From 086ec82844a8e798f60a82c9bfbbe84c3e12d1f3 Mon Sep 17 00:00:00 2001 From: cryptoking1106 Date: Thu, 18 Sep 2025 18:12:50 -0300 Subject: [PATCH] init --- .../.dockerignore | 1 + .../Cargo.toml | 80 + .../detectionlogs.json | 0 .../docker-compose.yml | 29 + .../idls/pump_0.1.0.json | 1934 +++ .../idls/token_program_idl.json | 845 ++ .../idls/whirlpool_idl.json | 3286 +++++ .../json-rpc-client/Cargo.toml | 25 + .../json-rpc-client/README.md | 3 + .../json-rpc-client/rustfmt.toml | 5 + .../src/jsonrpc_client/client_error.rs | 125 + .../src/jsonrpc_client/http_sender.rs | 218 + .../json-rpc-client/src/jsonrpc_client/mod.rs | 5 + .../src/jsonrpc_client/request.rs | 55 + .../src/jsonrpc_client/rpc_client.rs | 406 + .../src/jsonrpc_client/rpc_sender.rs | 21 + .../json-rpc-client/src/lib.rs | 1 + .../json-rpc-client/target/.rustc_info.json | 1 + .../json-rpc-client/target/CACHEDIR.TAG | 3 + .../target/release/.cargo-lock | 0 .../libjito_block_engine_json_rpc_client.d | 1 + .../libjito_block_engine_json_rpc_client.rlib | Bin 0 -> 262144 bytes .../logs.json | 1132 ++ .../parsers/pump_interface/Cargo.toml | 32 + .../parsers/pump_interface/src/accounts.rs | 84 + .../parsers/pump_interface/src/errors.rs | 48 + .../parsers/pump_interface/src/events.rs | 134 + .../pump_interface/src/instructions.rs | 1772 +++ .../parsers/pump_interface/src/lib.rs | 9 + .../parsers/pump_interface/src/serializer.rs | 37 + .../parsers/pump_interface/src/typedefs.rs | 140 + .../run.sh | 20 + .../shared_state/Cargo.toml | 15 + .../shared_state/mod.rs | 1 + .../shared_state/src/lib.rs | 269 + .../shared_state/state.rs | 21 + .../shredstreamproxy.sh | 24 + .../src/TradeDispather.rs | 86 + .../src/commands.rs | 239 + .../src/common/logger.rs | 90 + .../src/common/mod.rs | 3 + .../src/common/rpc.rs | 131 + .../src/common/utils.rs | 107 + .../src/core/mod.rs | 2 + .../src/core/token.rs | 117 + .../src/core/tx.rs | 224 + .../src/db.rs | 170 + .../src/dex/middleware.rs | 146 + .../src/dex/mod.rs | 1 + .../src/dex/pump_fun.rs | 470 + .../src/engine/mod.rs | 1 + .../src/engine/swap.rs | 85 + .../src/hardcap.rs | 151 + .../src/instruction_account_mapper.rs | 81 + .../src/latency_test.rs | 3 + .../src/latest_block.rs | 14 + .../src/lib.rs | 9 + .../src/logger.rs | 90 + .../src/secondbuy.rs | 157 + .../src/serialization.rs | 18 + .../src/services/jito.rs | 180 + .../src/services/mod.rs | 3 + .../src/services/nextblock.rs | 75 + .../src/services/zeroslot.rs | 179 + .../src/shred_stream.rs | 505 + .../src/solana_helper.rs | 179 + .../src/tginterface.rs | 44 + .../src/token_serializable.rs | 200 + .../src/trade_logger.rs | 143 + .../src/trading_loop.rs | 120 + .../trade_records.jsonl | 390 + .../README.md | 286 + 1_solana sniper bot(node) using gRPC/SETUP.md | 84 + .../env.template | 24 + 1_solana sniper bot(node) using gRPC/fuc.js | 182 + 1_solana sniper bot(node) using gRPC/grpc.js | 204 + 1_solana sniper bot(node) using gRPC/index.js | 28 + 1_solana sniper bot(node) using gRPC/main.js | 194 + .../package-lock.json | 10961 ++++++++++++++++ .../package.json | 44 + .../parsingtransaction.js | 266 + .../raydium_cpmm_idl.json | 1619 +++ .../raydium_launchpad_idl.json | 4304 ++++++ .../swap(offchain).js | 7 + 1_solana sniper bot(node) using gRPC/swap.js | 307 + 2_copy trading bot(node) using gRPC/README.md | 445 + 2_copy trading bot(node) using gRPC/SETUP.md | 84 + 2_copy trading bot(node) using gRPC/config.js | 180 + .../dashboard/public/dashboard.js | 427 + .../dashboard/public/index.html | 192 + .../dashboard/server.js | 237 + .../env.template | 157 + 2_copy trading bot(node) using gRPC/fuc.js | 182 + 2_copy trading bot(node) using gRPC/grpc.js | 204 + 2_copy trading bot(node) using gRPC/index.js | 154 + ...2d6fa545f978ea2a4cd18a2469f8eef-audit.json | 15 + ...47c0e8ccd2f7b24907043cafbaced36-audit.json | 15 + .../logs/trading-bot-2025-08-14.log | 20 + .../logs/trading-bot-error-2025-08-14.log | 3 + 2_copy trading bot(node) using gRPC/main.js | 325 + .../package-lock.json | 10961 ++++++++++++++++ .../package.json | 44 + .../parsingtransaction.js | 266 + .../raydium_cpmm_idl.json | 1619 +++ .../raydium_launchpad_idl.json | 4304 ++++++ .../services/notifications.js | 327 + .../services/riskManager.js | 413 + .../swap(offchain).js | 7 + 2_copy trading bot(node) using gRPC/swap.js | 307 + .../utils/logger.js | 174 + .../package-lock.json | 10961 ++++++++++++++++ .../package.json | 44 + .../swap(offchain).js | 42 + .../swap.js | 283 + CODE_OF_CONDUCT.md | 32 + CONTRIBUTING.md | 114 + Caldera-license.pdf | Bin 12298 -> 0 bytes LICENSE | 30 + PROGRAM_LOGIC_DIAGRAM(Node).md | 450 + PROGRAM_LOGIC_DIAGRAM(Rust).md | 257 + README.md | 443 +- SECURITY.md | 77 + last1120c/c00.c | 581 - last1120c/c01.c | 210 - last1120c/c02.c | 436 - last1120c/c03.c | 189 - last1120c/c0t.s | 264 - last1120c/c10.c | 469 - last1120c/c11.c | 251 - last1120c/c1t.s | 171 - last1120c/cctab.s | 118 - last1120c/cvopt.c | 357 - last1120c/efftab.s | 215 - last1120c/regtab.s | 696 - last1120c/sptab.s | 167 - prestruct/c00.c | 776 -- prestruct/c01.c | 369 - prestruct/c02.c | 505 - prestruct/c03.c | 251 - prestruct/c10.c | 588 - prestruct/c11.c | 261 - 141 files changed, 67491 insertions(+), 6883 deletions(-) create mode 100644 #_sniper (Rust) using jito Shred stream/.dockerignore create mode 100644 #_sniper (Rust) using jito Shred stream/Cargo.toml create mode 100644 #_sniper (Rust) using jito Shred stream/detectionlogs.json create mode 100644 #_sniper (Rust) using jito Shred stream/docker-compose.yml create mode 100644 #_sniper (Rust) using jito Shred stream/idls/pump_0.1.0.json create mode 100644 #_sniper (Rust) using jito Shred stream/idls/token_program_idl.json create mode 100644 #_sniper (Rust) using jito Shred stream/idls/whirlpool_idl.json create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/Cargo.toml create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/README.md create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/rustfmt.toml create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/client_error.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/http_sender.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/request.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_client.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_sender.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/src/lib.rs create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/target/.rustc_info.json create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/target/CACHEDIR.TAG create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/.cargo-lock create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.d create mode 100644 #_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.rlib create mode 100644 #_sniper (Rust) using jito Shred stream/logs.json create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/Cargo.toml create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/accounts.rs create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/errors.rs create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/events.rs create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/instructions.rs create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/lib.rs create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/serializer.rs create mode 100644 #_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/typedefs.rs create mode 100644 #_sniper (Rust) using jito Shred stream/run.sh create mode 100644 #_sniper (Rust) using jito Shred stream/shared_state/Cargo.toml create mode 100644 #_sniper (Rust) using jito Shred stream/shared_state/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/shared_state/src/lib.rs create mode 100644 #_sniper (Rust) using jito Shred stream/shared_state/state.rs create mode 100644 #_sniper (Rust) using jito Shred stream/shredstreamproxy.sh create mode 100644 #_sniper (Rust) using jito Shred stream/src/TradeDispather.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/commands.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/common/logger.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/common/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/common/rpc.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/common/utils.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/core/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/core/token.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/core/tx.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/db.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/dex/middleware.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/dex/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/dex/pump_fun.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/engine/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/engine/swap.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/hardcap.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/instruction_account_mapper.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/latency_test.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/latest_block.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/lib.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/logger.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/secondbuy.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/serialization.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/services/jito.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/services/mod.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/services/nextblock.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/services/zeroslot.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/shred_stream.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/solana_helper.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/tginterface.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/token_serializable.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/trade_logger.rs create mode 100644 #_sniper (Rust) using jito Shred stream/src/trading_loop.rs create mode 100644 #_sniper (Rust) using jito Shred stream/trade_records.jsonl create mode 100644 1_solana sniper bot(node) using gRPC/README.md create mode 100644 1_solana sniper bot(node) using gRPC/SETUP.md create mode 100644 1_solana sniper bot(node) using gRPC/env.template create mode 100644 1_solana sniper bot(node) using gRPC/fuc.js create mode 100644 1_solana sniper bot(node) using gRPC/grpc.js create mode 100644 1_solana sniper bot(node) using gRPC/index.js create mode 100644 1_solana sniper bot(node) using gRPC/main.js create mode 100644 1_solana sniper bot(node) using gRPC/package-lock.json create mode 100644 1_solana sniper bot(node) using gRPC/package.json create mode 100644 1_solana sniper bot(node) using gRPC/parsingtransaction.js create mode 100644 1_solana sniper bot(node) using gRPC/raydium_cpmm_idl.json create mode 100644 1_solana sniper bot(node) using gRPC/raydium_launchpad_idl.json create mode 100644 1_solana sniper bot(node) using gRPC/swap(offchain).js create mode 100644 1_solana sniper bot(node) using gRPC/swap.js create mode 100644 2_copy trading bot(node) using gRPC/README.md create mode 100644 2_copy trading bot(node) using gRPC/SETUP.md create mode 100644 2_copy trading bot(node) using gRPC/config.js create mode 100644 2_copy trading bot(node) using gRPC/dashboard/public/dashboard.js create mode 100644 2_copy trading bot(node) using gRPC/dashboard/public/index.html create mode 100644 2_copy trading bot(node) using gRPC/dashboard/server.js create mode 100644 2_copy trading bot(node) using gRPC/env.template create mode 100644 2_copy trading bot(node) using gRPC/fuc.js create mode 100644 2_copy trading bot(node) using gRPC/grpc.js create mode 100644 2_copy trading bot(node) using gRPC/index.js create mode 100644 2_copy trading bot(node) using gRPC/logs/.6dee68a8e2d6fa545f978ea2a4cd18a2469f8eef-audit.json create mode 100644 2_copy trading bot(node) using gRPC/logs/.a961c1e9547c0e8ccd2f7b24907043cafbaced36-audit.json create mode 100644 2_copy trading bot(node) using gRPC/logs/trading-bot-2025-08-14.log create mode 100644 2_copy trading bot(node) using gRPC/logs/trading-bot-error-2025-08-14.log create mode 100644 2_copy trading bot(node) using gRPC/main.js create mode 100644 2_copy trading bot(node) using gRPC/package-lock.json create mode 100644 2_copy trading bot(node) using gRPC/package.json create mode 100644 2_copy trading bot(node) using gRPC/parsingtransaction.js create mode 100644 2_copy trading bot(node) using gRPC/raydium_cpmm_idl.json create mode 100644 2_copy trading bot(node) using gRPC/raydium_launchpad_idl.json create mode 100644 2_copy trading bot(node) using gRPC/services/notifications.js create mode 100644 2_copy trading bot(node) using gRPC/services/riskManager.js create mode 100644 2_copy trading bot(node) using gRPC/swap(offchain).js create mode 100644 2_copy trading bot(node) using gRPC/swap.js create mode 100644 2_copy trading bot(node) using gRPC/utils/logger.js create mode 100644 3_sniper bot(node) using using Helius websocket/package-lock.json create mode 100644 3_sniper bot(node) using using Helius websocket/package.json create mode 100644 3_sniper bot(node) using using Helius websocket/swap(offchain).js create mode 100644 3_sniper bot(node) using using Helius websocket/swap.js create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md delete mode 100644 Caldera-license.pdf create mode 100644 LICENSE create mode 100644 PROGRAM_LOGIC_DIAGRAM(Node).md create mode 100644 PROGRAM_LOGIC_DIAGRAM(Rust).md create mode 100644 SECURITY.md delete mode 100644 last1120c/c00.c delete mode 100644 last1120c/c01.c delete mode 100644 last1120c/c02.c delete mode 100644 last1120c/c03.c delete mode 100644 last1120c/c0t.s delete mode 100644 last1120c/c10.c delete mode 100644 last1120c/c11.c delete mode 100644 last1120c/c1t.s delete mode 100644 last1120c/cctab.s delete mode 100644 last1120c/cvopt.c delete mode 100644 last1120c/efftab.s delete mode 100644 last1120c/regtab.s delete mode 100644 last1120c/sptab.s delete mode 100644 prestruct/c00.c delete mode 100644 prestruct/c01.c delete mode 100644 prestruct/c02.c delete mode 100644 prestruct/c03.c delete mode 100644 prestruct/c10.c delete mode 100644 prestruct/c11.c diff --git a/#_sniper (Rust) using jito Shred stream/.dockerignore b/#_sniper (Rust) using jito Shred stream/.dockerignore new file mode 100644 index 0000000..f2a4093 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/.dockerignore @@ -0,0 +1 @@ +**/target \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/Cargo.toml b/#_sniper (Rust) using jito Shred stream/Cargo.toml new file mode 100644 index 0000000..2b7d33c --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/Cargo.toml @@ -0,0 +1,80 @@ +[package] +name = "grpc-raydium-pool-monitoring-rust" +version = "3.0.0" +authors = ["Mephisto"] +edition = "2021" +license = "Apache-2.0" + +[dependencies] +anyhow = "1.0.62" +backoff = { version = "0.4.0", features = ["tokio"] } +bincode = "1.3.3" +borsh = { version = "1.5.3" } +bs58 = "0.5.1" +chrono = "0.4.39" +clap = { version = "4.3.0", features = ["derive"] } +env_logger = "0.11.3" +futures = "0.3.24" +hex = "0.4.3" +log = "0.4.17" +maplit = "1.0.2" +serde_json = "1.0.135" +solana-sdk = "2.1.7" +solana-entry = "=2.1.7" + +solana-transaction-status = "2.1.7" +solana-program = "2.1.7" +solana-account-decoder-client-types = "2.1.7" +tokio = { version = "1.21.2", features = ["full", "rt-multi-thread", "fs"] } +openssl = { version = "0.10", features = ["vendored"] } +reqwest = { version = "0.11.27", features = ["json", "socks", "native-tls", "blocking"] } +tonic = "0.12.1" +yellowstone-grpc-client = "4.0.0" +yellowstone-grpc-proto = { version = "4.0.0", default-features = false ,features = ["plugin"] } +yellowstone-vixen-core = { git = "https://github.com/rpcpool/yellowstone-vixen" } +yellowstone-vixen-parser = { git = "https://github.com/rpcpool/yellowstone-vixen", features = ["raydium"] } +indicatif = "0.17.9" +pump_interface = { path = "./parsers/pump_interface", features = ["serde"] } +serde = { version = "1.0", features = ["derive"] } +serde_with = "3.0" +postgres = "0.19" +solana-client = "2.1.7" +spl-associated-token-account = { version = "4.0.0", features = ["no-entrypoint"] } + +dotenv = "0.15" +lazy_static = "1.5.0" +shared_state = { path = "./shared_state" } +sdk = "0.1.0" +once_cell = "1.21.3" +uuid = { version = "1", features = ["v4"] } + +solana-account-decoder = "=2.1.7" +spl-token = { version = "7.0.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "7.0.0", features = ["no-entrypoint"] } +spl-token-client = "=0.14.0" + +jito-json-rpc-client = { path = "./json-rpc-client", package = "jito-block-engine-json-rpc-client" } +anchor-lang = "=0.31.0" +bytemuck = "1.21.0" +rand = "0.8.5" +tracing = "0.1.40" +futures-util = "0.3.30" +tokio-tungstenite = { version = "0.26.1", features = ["native-tls"] } +tokio-stream = "0.1.17" +borsh-derive = "1.5.3" +solana-transaction-status-client-types = "=2.1.7" +url = "2.3.1" +base64 = "0.22.1" +jito-protos = { path = "/home/ubuntu/shreds_sniper/shredstream-proxy/jito_protos" } + +[workspace] +members = [ + "json-rpc-client", + "shared_state", +] + + + +[build-dependencies] +tonic-build = "0.10" +protobuf-src = "1.0" diff --git a/#_sniper (Rust) using jito Shred stream/detectionlogs.json b/#_sniper (Rust) using jito Shred stream/detectionlogs.json new file mode 100644 index 0000000..e69de29 diff --git a/#_sniper (Rust) using jito Shred stream/docker-compose.yml b/#_sniper (Rust) using jito Shred stream/docker-compose.yml new file mode 100644 index 0000000..e22de41 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3.9' + +services: + rustapp: + container_name: rustapp + image: francescoxx/rustapp:1.0.0 + build: + context: . + dockerfile: Dockerfile + args: + DATABASE_URL: postgres://postgres:postgres@db:5432/postgres + ports: + - '8080:8080' + depends_on: + - db + db: + container_name: db + image: postgres:12 + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: postgres + ports: + - '5432:5432' + volumes: + - pgdata:/var/lib/postgresql/data + +volumes: + pgdata: {} diff --git a/#_sniper (Rust) using jito Shred stream/idls/pump_0.1.0.json b/#_sniper (Rust) using jito Shred stream/idls/pump_0.1.0.json new file mode 100644 index 0000000..f2080b4 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/idls/pump_0.1.0.json @@ -0,0 +1,1934 @@ +{ + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P", + "metadata": { + "name": "pump", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "buy", + "docs": ["Buys tokens from a bonding curve."], + "discriminator": [102, 6, 61, 18, 1, 218, 235, 234], + "accounts": [ + { + "name": "global", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "fee_recipient", + "writable": true + }, + { + "name": "mint" + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associated_bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "bonding_curve" + }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { + "name": "associated_user", + "writable": true + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "creator_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, 114, 101, 97, 116, 111, 114, 45, 118, 97, 117, 108, 116 + ] + }, + { + "kind": "account", + "path": "bonding_curve.creator", + "account": "BondingCurve" + } + ] + } + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "max_sol_cost", + "type": "u64" + } + ] + }, + { + "name": "collect_creator_fee", + "docs": [ + "Collects creator_fee from creator_vault to the coin creator account" + ], + "discriminator": [20, 22, 86, 123, 198, 28, 219, 132], + "accounts": [ + { + "name": "creator", + "writable": true, + "signer": true + }, + { + "name": "creator_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, 114, 101, 97, 116, 111, 114, 45, 118, 97, 117, 108, 116 + ] + }, + { + "kind": "account", + "path": "creator" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "create", + "docs": ["Creates a new coin and bonding curve."], + "discriminator": [24, 30, 200, 40, 5, 28, 7, 119], + "accounts": [ + { + "name": "mint", + "writable": true, + "signer": true + }, + { + "name": "mint_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 109, 105, 110, 116, 45, 97, 117, 116, 104, 111, 114, 105, 116, + 121 + ] + } + ] + } + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associated_bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "bonding_curve" + }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { + "name": "global", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "mpl_token_metadata", + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + }, + { + "name": "metadata", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [109, 101, 116, 97, 100, 97, 116, 97] + }, + { + "kind": "const", + "value": [ + 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, + 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, + 209, 188, 3, 248, 41, 70 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "account", + "path": "mpl_token_metadata" + } + } + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + }, + { + "name": "creator", + "type": "pubkey" + } + ] + }, + { + "name": "extend_account", + "docs": ["Extends the size of program-owned accounts"], + "discriminator": [234, 102, 194, 203, 150, 72, 62, 229], + "accounts": [ + { + "name": "account", + "writable": true + }, + { + "name": "user", + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "initialize", + "docs": ["Creates the global state."], + "discriminator": [175, 175, 109, 31, 13, 152, 155, 237], + "accounts": [ + { + "name": "global", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "migrate", + "docs": [ + "Migrates liquidity to pump_amm if the bonding curve is complete" + ], + "discriminator": [155, 234, 231, 146, 236, 158, 162, 30], + "accounts": [ + { + "name": "global", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "withdraw_authority", + "writable": true, + "relations": ["global"] + }, + { + "name": "mint" + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associated_bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "bonding_curve" + }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { + "name": "user", + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "pump_amm", + "address": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA" + }, + { + "name": "pool", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [112, 111, 111, 108] + }, + { + "kind": "const", + "value": [0, 0] + }, + { + "kind": "account", + "path": "pool_authority" + }, + { + "kind": "account", + "path": "mint" + }, + { + "kind": "account", + "path": "wsol_mint" + } + ], + "program": { + "kind": "account", + "path": "pump_amm" + } + } + }, + { + "name": "pool_authority", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, 111, 111, 108, 45, 97, 117, 116, 104, 111, 114, 105, 116, + 121 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "pool_authority_mint_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool_authority" + }, + { + "kind": "account", + "path": "token_program" + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "account", + "path": "associated_token_program" + } + } + }, + { + "name": "pool_authority_wsol_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool_authority" + }, + { + "kind": "account", + "path": "token_program" + }, + { + "kind": "account", + "path": "wsol_mint" + } + ], + "program": { + "kind": "account", + "path": "associated_token_program" + } + } + }, + { + "name": "amm_global_config", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, 108, 111, 98, 97, 108, 95, 99, 111, 110, 102, 105, 103 + ] + } + ], + "program": { + "kind": "account", + "path": "pump_amm" + } + } + }, + { + "name": "wsol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { + "name": "lp_mint", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, 111, 111, 108, 95, 108, 112, 95, 109, 105, 110, 116 + ] + }, + { + "kind": "account", + "path": "pool" + } + ], + "program": { + "kind": "account", + "path": "pump_amm" + } + } + }, + { + "name": "user_pool_token_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool_authority" + }, + { + "kind": "account", + "path": "token_2022_program" + }, + { + "kind": "account", + "path": "lp_mint" + } + ], + "program": { + "kind": "account", + "path": "associated_token_program" + } + } + }, + { + "name": "pool_base_token_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool" + }, + { + "kind": "account", + "path": "token_program" + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "account", + "path": "associated_token_program" + } + } + }, + { + "name": "pool_quote_token_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "pool" + }, + { + "kind": "account", + "path": "token_program" + }, + { + "kind": "account", + "path": "wsol_mint" + } + ], + "program": { + "kind": "account", + "path": "associated_token_program" + } + } + }, + { + "name": "token_2022_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "pump_amm_event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ], + "program": { + "kind": "account", + "path": "pump_amm" + } + } + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "sell", + "docs": ["Sells tokens into a bonding curve."], + "discriminator": [51, 230, 133, 164, 1, 127, 131, 173], + "accounts": [ + { + "name": "global", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "fee_recipient", + "writable": true + }, + { + "name": "mint" + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associated_bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "bonding_curve" + }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { + "name": "associated_user", + "writable": true + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "creator_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, 114, 101, 97, 116, 111, 114, 45, 118, 97, 117, 108, 116 + ] + }, + { + "kind": "account", + "path": "bonding_curve.creator", + "account": "BondingCurve" + } + ] + } + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "min_sol_output", + "type": "u64" + } + ] + }, + { + "name": "set_creator", + "docs": [ + "Allows Global::set_creator_authority to set the bonding curve creator from Metaplex metadata or input argument" + ], + "discriminator": [254, 148, 255, 112, 207, 142, 170, 165], + "accounts": [ + { + "name": "set_creator_authority", + "signer": true, + "relations": ["global"] + }, + { + "name": "global", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "mint" + }, + { + "name": "metadata", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [109, 101, 116, 97, 100, 97, 116, 97] + }, + { + "kind": "const", + "value": [ + 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, + 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, + 209, 188, 3, 248, 41, 70 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "const", + "value": [ + 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, + 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, + 188, 3, 248, 41, 70 + ] + } + } + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "creator", + "type": "pubkey" + } + ] + }, + { + "name": "set_metaplex_creator", + "docs": [ + "Syncs the bonding curve creator with the Metaplex metadata creator if it exists" + ], + "discriminator": [138, 96, 174, 217, 48, 85, 197, 246], + "accounts": [ + { + "name": "mint" + }, + { + "name": "metadata", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [109, 101, 116, 97, 100, 97, 116, 97] + }, + { + "kind": "const", + "value": [ + 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, + 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, + 209, 188, 3, 248, 41, 70 + ] + }, + { + "kind": "account", + "path": "mint" + } + ], + "program": { + "kind": "const", + "value": [ + 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, + 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, + 188, 3, 248, 41, 70 + ] + } + } + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + }, + { + "name": "set_params", + "docs": ["Sets the global state parameters."], + "discriminator": [27, 234, 178, 52, 147, 2, 187, 141], + "accounts": [ + { + "name": "global", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "authority", + "writable": true, + "signer": true, + "relations": ["global"] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "initial_virtual_token_reserves", + "type": "u64" + }, + { + "name": "initial_virtual_sol_reserves", + "type": "u64" + }, + { + "name": "initial_real_token_reserves", + "type": "u64" + }, + { + "name": "token_total_supply", + "type": "u64" + }, + { + "name": "fee_basis_points", + "type": "u64" + }, + { + "name": "withdraw_authority", + "type": "pubkey" + }, + { + "name": "enable_migrate", + "type": "bool" + }, + { + "name": "pool_migration_fee", + "type": "u64" + }, + { + "name": "creator_fee_basis_points", + "type": "u64" + }, + { + "name": "set_creator_authority", + "type": "pubkey" + } + ] + }, + { + "name": "update_global_authority", + "discriminator": [227, 181, 74, 196, 208, 21, 97, 213], + "accounts": [ + { + "name": "global", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [103, 108, 111, 98, 97, 108] + } + ] + } + }, + { + "name": "authority", + "signer": true, + "relations": ["global"] + }, + { + "name": "new_authority" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, + 114, 105, 116, 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [] + } + ], + "accounts": [ + { + "name": "BondingCurve", + "discriminator": [23, 183, 248, 55, 96, 216, 172, 96] + }, + { + "name": "Global", + "discriminator": [167, 232, 232, 177, 200, 108, 114, 127] + } + ], + "events": [ + { + "name": "CollectCreatorFeeEvent", + "discriminator": [122, 2, 127, 1, 14, 191, 12, 175] + }, + { + "name": "CompleteEvent", + "discriminator": [95, 114, 97, 156, 212, 46, 152, 8] + }, + { + "name": "CompletePumpAmmMigrationEvent", + "discriminator": [189, 233, 93, 185, 92, 148, 234, 148] + }, + { + "name": "CreateEvent", + "discriminator": [27, 114, 169, 77, 222, 235, 99, 118] + }, + { + "name": "ExtendAccountEvent", + "discriminator": [97, 97, 215, 144, 93, 146, 22, 124] + }, + { + "name": "SetCreatorEvent", + "discriminator": [237, 52, 123, 37, 245, 251, 72, 210] + }, + { + "name": "SetMetaplexCreatorEvent", + "discriminator": [142, 203, 6, 32, 127, 105, 191, 162] + }, + { + "name": "SetParamsEvent", + "discriminator": [223, 195, 159, 246, 62, 48, 143, 131] + }, + { + "name": "TradeEvent", + "discriminator": [189, 219, 127, 211, 78, 230, 97, 238] + }, + { + "name": "UpdateGlobalAuthorityEvent", + "discriminator": [182, 195, 137, 42, 35, 206, 207, 247] + } + ], + "errors": [ + { + "code": 6000, + "name": "NotAuthorized", + "msg": "The given account is not authorized to execute this instruction." + }, + { + "code": 6001, + "name": "AlreadyInitialized", + "msg": "The program is already initialized." + }, + { + "code": 6002, + "name": "TooMuchSolRequired", + "msg": "slippage: Too much SOL required to buy the given amount of tokens." + }, + { + "code": 6003, + "name": "TooLittleSolReceived", + "msg": "slippage: Too little SOL received to sell the given amount of tokens." + }, + { + "code": 6004, + "name": "MintDoesNotMatchBondingCurve", + "msg": "The mint does not match the bonding curve." + }, + { + "code": 6005, + "name": "BondingCurveComplete", + "msg": "The bonding curve has completed and liquidity migrated to raydium." + }, + { + "code": 6006, + "name": "BondingCurveNotComplete", + "msg": "The bonding curve has not completed." + }, + { + "code": 6007, + "name": "NotInitialized", + "msg": "The program is not initialized." + }, + { + "code": 6008, + "name": "WithdrawTooFrequent", + "msg": "Withdraw too frequent" + }, + { + "code": 6009, + "name": "NewSizeShouldBeGreaterThanCurrentSize", + "msg": "new_size should be > current_size" + }, + { + "code": 6010, + "name": "AccountTypeNotSupported", + "msg": "Account type not supported" + }, + { + "code": 6011, + "name": "InitialRealTokenReservesShouldBeLessThanTokenTotalSupply", + "msg": "initial_real_token_reserves should be less than token_total_supply" + }, + { + "code": 6012, + "name": "InitialVirtualTokenReservesShouldBeGreaterThanInitialRealTokenReserves", + "msg": "initial_virtual_token_reserves should be greater than initial_real_token_reserves" + }, + { + "code": 6013, + "name": "FeeBasisPointsGreaterThanMaximum", + "msg": "fee_basis_points greater than maximum" + }, + { + "code": 6014, + "name": "AllZerosWithdrawAuthority", + "msg": "Withdraw authority cannot be set to System Program ID" + }, + { + "code": 6015, + "name": "PoolMigrationFeeShouldBeLessThanFinalRealSolReserves", + "msg": "pool_migration_fee should be less than final_real_sol_reserves" + }, + { + "code": 6016, + "name": "PoolMigrationFeeShouldBeGreaterThanCreatorFeePlusMaxMigrateFees", + "msg": "pool_migration_fee should be greater than creator_fee + MAX_MIGRATE_FEES" + }, + { + "code": 6017, + "name": "DisabledWithdraw", + "msg": "Migrate instruction is disabled" + }, + { + "code": 6018, + "name": "DisabledMigrate", + "msg": "Migrate instruction is disabled" + }, + { + "code": 6019, + "name": "InvalidCreator", + "msg": "Invalid creator pubkey" + }, + { + "code": 6020, + "name": "BuyZeroAmount", + "msg": "Buy zero amount" + }, + { + "code": 6021, + "name": "NotEnoughTokensToBuy", + "msg": "Not enough tokens to buy" + }, + { + "code": 6022, + "name": "SellZeroAmount", + "msg": "Sell zero amount" + }, + { + "code": 6023, + "name": "NotEnoughTokensToSell", + "msg": "Not enough tokens to sell" + }, + { + "code": 6024, + "name": "Overflow", + "msg": "Overflow" + }, + { + "code": 6025, + "name": "Truncation", + "msg": "Truncation" + }, + { + "code": 6026, + "name": "DivisionByZero", + "msg": "Division by zero" + }, + { + "code": 6027, + "name": "NotEnoughRemainingAccounts", + "msg": "Not enough remaining accounts" + }, + { + "code": 6028, + "name": "AllFeeRecipientsShouldBeNonZero", + "msg": "All fee recipients should be non-zero" + }, + { + "code": 6029, + "name": "UnsortedNotUniqueFeeRecipients", + "msg": "Unsorted or not unique fee recipients" + }, + { + "code": 6030, + "name": "CreatorShouldNotBeZero", + "msg": "Creator should not be zero" + } + ], + "types": [ + { + "name": "BondingCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtual_token_reserves", + "type": "u64" + }, + { + "name": "virtual_sol_reserves", + "type": "u64" + }, + { + "name": "real_token_reserves", + "type": "u64" + }, + { + "name": "real_sol_reserves", + "type": "u64" + }, + { + "name": "token_total_supply", + "type": "u64" + }, + { + "name": "complete", + "type": "bool" + }, + { + "name": "creator", + "type": "pubkey" + } + ] + } + }, + { + "name": "CollectCreatorFeeEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "creator_fee", + "type": "u64" + } + ] + } + }, + { + "name": "CompleteEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "user", + "type": "pubkey" + }, + { + "name": "mint", + "type": "pubkey" + }, + { + "name": "bonding_curve", + "type": "pubkey" + }, + { + "name": "timestamp", + "type": "i64" + } + ] + } + }, + { + "name": "CompletePumpAmmMigrationEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "user", + "type": "pubkey" + }, + { + "name": "mint", + "type": "pubkey" + }, + { + "name": "mint_amount", + "type": "u64" + }, + { + "name": "sol_amount", + "type": "u64" + }, + { + "name": "pool_migration_fee", + "type": "u64" + }, + { + "name": "bonding_curve", + "type": "pubkey" + }, + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "pool", + "type": "pubkey" + } + ] + } + }, + { + "name": "CreateEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + }, + { + "name": "mint", + "type": "pubkey" + }, + { + "name": "bonding_curve", + "type": "pubkey" + }, + { + "name": "user", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "virtual_token_reserves", + "type": "u64" + }, + { + "name": "virtual_sol_reserves", + "type": "u64" + }, + { + "name": "real_token_reserves", + "type": "u64" + }, + { + "name": "token_total_supply", + "type": "u64" + } + ] + } + }, + { + "name": "ExtendAccountEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "account", + "type": "pubkey" + }, + { + "name": "user", + "type": "pubkey" + }, + { + "name": "current_size", + "type": "u64" + }, + { + "name": "new_size", + "type": "u64" + }, + { + "name": "timestamp", + "type": "i64" + } + ] + } + }, + { + "name": "Global", + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "docs": ["Unused"], + "type": "bool" + }, + { + "name": "authority", + "type": "pubkey" + }, + { + "name": "fee_recipient", + "type": "pubkey" + }, + { + "name": "initial_virtual_token_reserves", + "type": "u64" + }, + { + "name": "initial_virtual_sol_reserves", + "type": "u64" + }, + { + "name": "initial_real_token_reserves", + "type": "u64" + }, + { + "name": "token_total_supply", + "type": "u64" + }, + { + "name": "fee_basis_points", + "type": "u64" + }, + { + "name": "withdraw_authority", + "type": "pubkey" + }, + { + "name": "enable_migrate", + "docs": ["Unused"], + "type": "bool" + }, + { + "name": "pool_migration_fee", + "type": "u64" + }, + { + "name": "creator_fee_basis_points", + "type": "u64" + }, + { + "name": "fee_recipients", + "type": { + "array": ["pubkey", 7] + } + }, + { + "name": "set_creator_authority", + "type": "pubkey" + } + ] + } + }, + { + "name": "SetCreatorEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "mint", + "type": "pubkey" + }, + { + "name": "bonding_curve", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + } + ] + } + }, + { + "name": "SetMetaplexCreatorEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "mint", + "type": "pubkey" + }, + { + "name": "bonding_curve", + "type": "pubkey" + }, + { + "name": "metadata", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + } + ] + } + }, + { + "name": "SetParamsEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "initial_virtual_token_reserves", + "type": "u64" + }, + { + "name": "initial_virtual_sol_reserves", + "type": "u64" + }, + { + "name": "initial_real_token_reserves", + "type": "u64" + }, + { + "name": "final_real_sol_reserves", + "type": "u64" + }, + { + "name": "token_total_supply", + "type": "u64" + }, + { + "name": "fee_basis_points", + "type": "u64" + }, + { + "name": "withdraw_authority", + "type": "pubkey" + }, + { + "name": "enable_migrate", + "type": "bool" + }, + { + "name": "pool_migration_fee", + "type": "u64" + }, + { + "name": "creator_fee_basis_points", + "type": "u64" + }, + { + "name": "fee_recipients", + "type": { + "array": ["pubkey", 8] + } + }, + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "set_creator_authority", + "type": "pubkey" + } + ] + } + }, + { + "name": "TradeEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mint", + "type": "pubkey" + }, + { + "name": "sol_amount", + "type": "u64" + }, + { + "name": "token_amount", + "type": "u64" + }, + { + "name": "is_buy", + "type": "bool" + }, + { + "name": "user", + "type": "pubkey" + }, + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "virtual_sol_reserves", + "type": "u64" + }, + { + "name": "virtual_token_reserves", + "type": "u64" + }, + { + "name": "real_sol_reserves", + "type": "u64" + }, + { + "name": "real_token_reserves", + "type": "u64" + }, + { + "name": "fee_recipient", + "type": "pubkey" + }, + { + "name": "fee_basis_points", + "type": "u64" + }, + { + "name": "fee", + "type": "u64" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "creator_fee_basis_points", + "type": "u64" + }, + { + "name": "creator_fee", + "type": "u64" + } + ] + } + }, + { + "name": "UpdateGlobalAuthorityEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "global", + "type": "pubkey" + }, + { + "name": "authority", + "type": "pubkey" + }, + { + "name": "new_authority", + "type": "pubkey" + }, + { + "name": "timestamp", + "type": "i64" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/idls/token_program_idl.json b/#_sniper (Rust) using jito Shred stream/idls/token_program_idl.json new file mode 100644 index 0000000..12c8613 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/idls/token_program_idl.json @@ -0,0 +1,845 @@ +{ + "version": "3.3.0", + "name": "spl_token", + "instructions": [ + { + "name": "initializeMint", + "accounts": [ + { + "name": "mint", + "isMut": true, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "decimals", + "type": "u8" + }, + { + "name": "mintAuthority", + "type": "publicKey" + }, + { + "name": "freezeAuthority", + "type": { + "option": "publicKey" + } + } + ] + }, + { + "name": "initializeAccount", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "initializeMultisig", + "accounts": [ + { + "name": "multisig", + "isMut": true, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "m", + "type": "u8" + } + ] + }, + { + "name": "transfer", + "accounts": [ + { + "name": "source", + "isMut": true, + "isSigner": false + }, + { + "name": "destination", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "approve", + "accounts": [ + { + "name": "source", + "isMut": true, + "isSigner": false + }, + { + "name": "delegate", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "revoke", + "accounts": [ + { + "name": "source", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [] + }, + { + "name": "setAuthority", + "accounts": [ + { + "name": "owned", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "signer", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "authorityType", + "type": { + "defined": "AuthorityType" + } + }, + { + "name": "newAuthority", + "type": { + "option": "publicKey" + } + } + ] + }, + { + "name": "mintTo", + "accounts": [ + { + "name": "mint", + "isMut": true, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "burn", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "closeAccount", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "destination", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [] + }, + { + "name": "freezeAccount", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [] + }, + { + "name": "thawAccount", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [] + }, + { + "name": "transferChecked", + "accounts": [ + { + "name": "source", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "destination", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "decimals", + "type": "u8" + } + ] + }, + { + "name": "approveChecked", + "accounts": [ + { + "name": "source", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "delegate", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "decimals", + "type": "u8" + } + ] + }, + { + "name": "mintToChecked", + "accounts": [ + { + "name": "mint", + "isMut": true, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "decimals", + "type": "u8" + } + ] + }, + { + "name": "burnChecked", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "decimals", + "type": "u8" + } + ] + }, + { + "name": "initializeAccount2", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "owner", + "type": "publicKey" + } + ] + }, + { + "name": "syncNative", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "initializeAccount3", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "owner", + "type": "publicKey" + } + ] + }, + { + "name": "initializeMultisig2", + "accounts": [ + { + "name": "multisig", + "isMut": true, + "isSigner": false + }, + { + "name": "signer", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "m", + "type": "u8" + } + ] + }, + { + "name": "initializeMint2", + "accounts": [ + { + "name": "mint", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "decimals", + "type": "u8" + }, + { + "name": "mintAuthority", + "type": "publicKey" + }, + { + "name": "freezeAuthority", + "type": { + "option": "publicKey" + } + } + ] + }, + { + "name": "getAccountDataSize", + "accounts": [ + { + "name": "mint", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "initializeImmutableOwner", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "amountToUiAmount", + "accounts": [ + { + "name": "mint", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "uiAmountToAmount", + "accounts": [ + { + "name": "mint", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "uiAmount", + "type": "u64" + } + ] + } + ], + "accounts": [ + { + "name": "Mint", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mintAuthority", + "type": { + "option": "publicKey" + } + }, + { + "name": "supply", + "type": "u64" + }, + { + "name": "decimals", + "type": "u8" + }, + { + "name": "isInitialized", + "type": "bool" + }, + { + "name": "freezeAuthority", + "type": { + "option": "publicKey" + } + } + ] + } + }, + { + "name": "Account", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mint", + "type": "publicKey" + }, + { + "name": "owner", + "type": "publicKey" + }, + { + "name": "amount", + "type": "u64" + }, + { + "name": "delegate", + "type": { + "option": "publicKey" + } + }, + { + "name": "state", + "type": { + "defined": "AccountState" + } + }, + { + "name": "isNative", + "type": { + "option": "u64" + } + }, + { + "name": "delegatedAmount", + "type": "u64" + }, + { + "name": "closeAuthority", + "type": { + "option": "publicKey" + } + } + ] + } + }, + { + "name": "Multisig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "m", + "type": "u8" + }, + { + "name": "n", + "type": "u8" + }, + { + "name": "isInitialized", + "type": "bool" + }, + { + "name": "signers", + "type": { + "array": [ + "publicKey", + 11 + ] + } + } + ] + } + } + ], + "types": [ + { + "name": "AccountState", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Uninitialized" + }, + { + "name": "Initialized" + }, + { + "name": "Frozen" + } + ] + } + }, + { + "name": "AuthorityType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "MintTokens" + }, + { + "name": "FreezeAccount" + }, + { + "name": "AccountOwner" + }, + { + "name": "CloseAccount" + } + ] + } + } + ], + "errors": [ + { + "code": 0, + "name": "NotRentExempt", + "msg": "Lamport balance below rent-exempt threshold" + }, + { + "code": 1, + "name": "InsufficientFunds", + "msg": "Insufficient funds" + }, + { + "code": 2, + "name": "InvalidMint", + "msg": "Invalid Mint" + }, + { + "code": 3, + "name": "MintMismatch", + "msg": "Account not associated with this Mint" + }, + { + "code": 4, + "name": "OwnerMismatch", + "msg": "Owner does not match" + }, + { + "code": 5, + "name": "FixedSupply", + "msg": "Fixed supply" + }, + { + "code": 6, + "name": "AlreadyInUse", + "msg": "Already in use" + }, + { + "code": 7, + "name": "InvalidNumberOfProvidedSigners", + "msg": "Invalid number of provided signers" + }, + { + "code": 8, + "name": "InvalidNumberOfRequiredSigners", + "msg": "Invalid number of required signers" + }, + { + "code": 9, + "name": "UninitializedState", + "msg": "State is unititialized" + }, + { + "code": 10, + "name": "NativeNotSupported", + "msg": "Instruction does not support native tokens" + }, + { + "code": 11, + "name": "NonNativeHasBalance", + "msg": "Non-native account can only be closed if its balance is zero" + }, + { + "code": 12, + "name": "InvalidInstruction", + "msg": "Invalid instruction" + }, + { + "code": 13, + "name": "InvalidState", + "msg": "State is invalid for requested operation" + }, + { + "code": 14, + "name": "Overflow", + "msg": "Operation overflowed" + }, + { + "code": 15, + "name": "AuthorityTypeNotSupported", + "msg": "Account does not support specified authority type" + }, + { + "code": 16, + "name": "MintCannotFreeze", + "msg": "This token mint cannot freeze accounts" + }, + { + "code": 17, + "name": "AccountFrozen", + "msg": "Account is frozen" + }, + { + "code": 18, + "name": "MintDecimalsMismatch", + "msg": "The provided decimals value different from the Mint decimals" + }, + { + "code": 19, + "name": "NonNativeNotSupported", + "msg": "Instruction does not support non-native tokens" + } + ], + "metadata": { + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } +} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/idls/whirlpool_idl.json b/#_sniper (Rust) using jito Shred stream/idls/whirlpool_idl.json new file mode 100644 index 0000000..2341d07 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/idls/whirlpool_idl.json @@ -0,0 +1,3286 @@ +{ + "version": "0.3.0", + "name": "whirlpool", + "instructions": [ + { + "name": "initializeConfig", + "accounts": [ + { + "name": "config", + "isMut": true, + "isSigner": true + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "feeAuthority", + "type": "publicKey" + }, + { + "name": "collectProtocolFeesAuthority", + "type": "publicKey" + }, + { + "name": "rewardEmissionsSuperAuthority", + "type": "publicKey" + }, + { + "name": "defaultProtocolFeeRate", + "type": "u16" + } + ] + }, + { + "name": "initializePool", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": true + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": true + }, + { + "name": "feeTier", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "bumps", + "type": { + "defined": "WhirlpoolBumps" + } + }, + { + "name": "tickSpacing", + "type": "u16" + }, + { + "name": "initialSqrtPrice", + "type": "u128" + } + ] + }, + { + "name": "initializeTickArray", + "accounts": [ + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "tickArray", + "isMut": true, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "startTickIndex", + "type": "i32" + } + ] + }, + { + "name": "initializeFeeTier", + "accounts": [ + { + "name": "config", + "isMut": false, + "isSigner": false + }, + { + "name": "feeTier", + "isMut": true, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "tickSpacing", + "type": "u16" + }, + { + "name": "defaultFeeRate", + "type": "u16" + } + ] + }, + { + "name": "initializeReward", + "accounts": [ + { + "name": "rewardAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardMint", + "isMut": false, + "isSigner": false + }, + { + "name": "rewardVault", + "isMut": true, + "isSigner": true + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + } + ] + }, + { + "name": "setRewardEmissions", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "rewardVault", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + }, + { + "name": "emissionsPerSecondX64", + "type": "u128" + } + ] + }, + { + "name": "openPosition", + "accounts": [ + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "owner", + "isMut": false, + "isSigner": false + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionMint", + "isMut": true, + "isSigner": true + }, + { + "name": "positionTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "associatedTokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "bumps", + "type": { + "defined": "OpenPositionBumps" + } + }, + { + "name": "tickLowerIndex", + "type": "i32" + }, + { + "name": "tickUpperIndex", + "type": "i32" + } + ] + }, + { + "name": "openPositionWithMetadata", + "accounts": [ + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "owner", + "isMut": false, + "isSigner": false + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionMint", + "isMut": true, + "isSigner": true + }, + { + "name": "positionMetadataAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "associatedTokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "metadataProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "metadataUpdateAuth", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "bumps", + "type": { + "defined": "OpenPositionWithMetadataBumps" + } + }, + { + "name": "tickLowerIndex", + "type": "i32" + }, + { + "name": "tickUpperIndex", + "type": "i32" + } + ] + }, + { + "name": "increaseLiquidity", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayLower", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayUpper", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "liquidityAmount", + "type": "u128" + }, + { + "name": "tokenMaxA", + "type": "u64" + }, + { + "name": "tokenMaxB", + "type": "u64" + } + ] + }, + { + "name": "decreaseLiquidity", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayLower", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayUpper", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "liquidityAmount", + "type": "u128" + }, + { + "name": "tokenMinA", + "type": "u64" + }, + { + "name": "tokenMinB", + "type": "u64" + } + ] + }, + { + "name": "updateFeesAndRewards", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayLower", + "isMut": false, + "isSigner": false + }, + { + "name": "tickArrayUpper", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "collectFees", + "accounts": [ + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "collectReward", + "accounts": [ + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "rewardOwnerAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + } + ] + }, + { + "name": "collectProtocolFees", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "collectProtocolFeesAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenDestinationA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenDestinationB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "swap", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArray0", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArray1", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArray2", + "isMut": true, + "isSigner": false + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "otherAmountThreshold", + "type": "u64" + }, + { + "name": "sqrtPriceLimit", + "type": "u128" + }, + { + "name": "amountSpecifiedIsInput", + "type": "bool" + }, + { + "name": "aToB", + "type": "bool" + } + ] + }, + { + "name": "closePosition", + "accounts": [ + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "receiver", + "isMut": true, + "isSigner": false + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionMint", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "setDefaultFeeRate", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "feeTier", + "isMut": true, + "isSigner": false + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "defaultFeeRate", + "type": "u16" + } + ] + }, + { + "name": "setDefaultProtocolFeeRate", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": true, + "isSigner": false + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "defaultProtocolFeeRate", + "type": "u16" + } + ] + }, + { + "name": "setFeeRate", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "feeRate", + "type": "u16" + } + ] + }, + { + "name": "setProtocolFeeRate", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "protocolFeeRate", + "type": "u16" + } + ] + }, + { + "name": "setFeeAuthority", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": true, + "isSigner": false + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newFeeAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "setCollectProtocolFeesAuthority", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": true, + "isSigner": false + }, + { + "name": "collectProtocolFeesAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newCollectProtocolFeesAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "setRewardAuthority", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newRewardAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + } + ] + }, + { + "name": "setRewardAuthorityBySuperAuthority", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardEmissionsSuperAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newRewardAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + } + ] + }, + { + "name": "setRewardEmissionsSuperAuthority", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardEmissionsSuperAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newRewardEmissionsSuperAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "twoHopSwap", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "whirlpoolOne", + "isMut": true, + "isSigner": false + }, + { + "name": "whirlpoolTwo", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountOneA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultOneA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountOneB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultOneB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountTwoA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultTwoA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountTwoB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultTwoB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayOne0", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayOne1", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayOne2", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayTwo0", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayTwo1", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayTwo2", + "isMut": true, + "isSigner": false + }, + { + "name": "oracleOne", + "isMut": false, + "isSigner": false + }, + { + "name": "oracleTwo", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "otherAmountThreshold", + "type": "u64" + }, + { + "name": "amountSpecifiedIsInput", + "type": "bool" + }, + { + "name": "aToBOne", + "type": "bool" + }, + { + "name": "aToBTwo", + "type": "bool" + }, + { + "name": "sqrtPriceLimitOne", + "type": "u128" + }, + { + "name": "sqrtPriceLimitTwo", + "type": "u128" + } + ] + }, + { + "name": "initializePositionBundle", + "accounts": [ + { + "name": "positionBundle", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleMint", + "isMut": true, + "isSigner": true + }, + { + "name": "positionBundleTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleOwner", + "isMut": false, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "associatedTokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "initializePositionBundleWithMetadata", + "accounts": [ + { + "name": "positionBundle", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleMint", + "isMut": true, + "isSigner": true + }, + { + "name": "positionBundleMetadata", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleOwner", + "isMut": false, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "metadataUpdateAuth", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "associatedTokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "metadataProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "deletePositionBundle", + "accounts": [ + { + "name": "positionBundle", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleMint", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleOwner", + "isMut": false, + "isSigner": true + }, + { + "name": "receiver", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "openBundledPosition", + "accounts": [ + { + "name": "bundledPosition", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundle", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "positionBundleAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "bundleIndex", + "type": "u16" + }, + { + "name": "tickLowerIndex", + "type": "i32" + }, + { + "name": "tickUpperIndex", + "type": "i32" + } + ] + }, + { + "name": "closeBundledPosition", + "accounts": [ + { + "name": "bundledPosition", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundle", + "isMut": true, + "isSigner": false + }, + { + "name": "positionBundleTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "positionBundleAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "receiver", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "bundleIndex", + "type": "u16" + } + ] + }, + { + "name": "collectFeesV2", + "accounts": [ + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgramA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramB", + "isMut": false, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "collectProtocolFeesV2", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "collectProtocolFeesAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenDestinationA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenDestinationB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgramA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramB", + "isMut": false, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "collectRewardV2", + "accounts": [ + { + "name": "whirlpool", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "rewardOwnerAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardMint", + "isMut": false, + "isSigner": false + }, + { + "name": "rewardVault", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardTokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + }, + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "decreaseLiquidityV2", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgramA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramB", + "isMut": false, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayLower", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayUpper", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "liquidityAmount", + "type": "u128" + }, + { + "name": "tokenMinA", + "type": "u64" + }, + { + "name": "tokenMinB", + "type": "u64" + }, + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "increaseLiquidityV2", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgramA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramB", + "isMut": false, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "positionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "position", + "isMut": true, + "isSigner": false + }, + { + "name": "positionTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayLower", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayUpper", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "liquidityAmount", + "type": "u128" + }, + { + "name": "tokenMaxA", + "type": "u64" + }, + { + "name": "tokenMaxB", + "type": "u64" + }, + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "initializePoolV2", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenBadgeA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenBadgeB", + "isMut": false, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": true + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": true + }, + { + "name": "feeTier", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramB", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "tickSpacing", + "type": "u16" + }, + { + "name": "initialSqrtPrice", + "type": "u128" + } + ] + }, + { + "name": "initializeRewardV2", + "accounts": [ + { + "name": "rewardAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardMint", + "isMut": false, + "isSigner": false + }, + { + "name": "rewardTokenBadge", + "isMut": false, + "isSigner": false + }, + { + "name": "rewardVault", + "isMut": true, + "isSigner": true + }, + { + "name": "rewardTokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + } + ] + }, + { + "name": "setRewardEmissionsV2", + "accounts": [ + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "rewardAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "rewardVault", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "rewardIndex", + "type": "u8" + }, + { + "name": "emissionsPerSecondX64", + "type": "u128" + } + ] + }, + { + "name": "swapV2", + "accounts": [ + { + "name": "tokenProgramA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramB", + "isMut": false, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "whirlpool", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenMintA", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintB", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultA", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountB", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultB", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArray0", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArray1", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArray2", + "isMut": true, + "isSigner": false + }, + { + "name": "oracle", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "otherAmountThreshold", + "type": "u64" + }, + { + "name": "sqrtPriceLimit", + "type": "u128" + }, + { + "name": "amountSpecifiedIsInput", + "type": "bool" + }, + { + "name": "aToB", + "type": "bool" + }, + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "twoHopSwapV2", + "accounts": [ + { + "name": "whirlpoolOne", + "isMut": true, + "isSigner": false + }, + { + "name": "whirlpoolTwo", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenMintInput", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintIntermediate", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenMintOutput", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramInput", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramIntermediate", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgramOutput", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenOwnerAccountInput", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultOneInput", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultOneIntermediate", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultTwoIntermediate", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenVaultTwoOutput", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenOwnerAccountOutput", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "tickArrayOne0", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayOne1", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayOne2", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayTwo0", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayTwo1", + "isMut": true, + "isSigner": false + }, + { + "name": "tickArrayTwo2", + "isMut": true, + "isSigner": false + }, + { + "name": "oracleOne", + "isMut": true, + "isSigner": false + }, + { + "name": "oracleTwo", + "isMut": true, + "isSigner": false + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "otherAmountThreshold", + "type": "u64" + }, + { + "name": "amountSpecifiedIsInput", + "type": "bool" + }, + { + "name": "aToBOne", + "type": "bool" + }, + { + "name": "aToBTwo", + "type": "bool" + }, + { + "name": "sqrtPriceLimitOne", + "type": "u128" + }, + { + "name": "sqrtPriceLimitTwo", + "type": "u128" + }, + { + "name": "remainingAccountsInfo", + "type": { + "option": { + "defined": "RemainingAccountsInfo" + } + } + } + ] + }, + { + "name": "initializeConfigExtension", + "accounts": [ + { + "name": "config", + "isMut": false, + "isSigner": false + }, + { + "name": "configExtension", + "isMut": true, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "feeAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "setConfigExtensionAuthority", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpoolsConfigExtension", + "isMut": true, + "isSigner": false + }, + { + "name": "configExtensionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newConfigExtensionAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "setTokenBadgeAuthority", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpoolsConfigExtension", + "isMut": true, + "isSigner": false + }, + { + "name": "configExtensionAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "newTokenBadgeAuthority", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "initializeTokenBadge", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpoolsConfigExtension", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenBadgeAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "tokenMint", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenBadge", + "isMut": true, + "isSigner": false + }, + { + "name": "funder", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "deleteTokenBadge", + "accounts": [ + { + "name": "whirlpoolsConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "whirlpoolsConfigExtension", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenBadgeAuthority", + "isMut": false, + "isSigner": true + }, + { + "name": "tokenMint", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenBadge", + "isMut": true, + "isSigner": false + }, + { + "name": "receiver", + "isMut": true, + "isSigner": false + } + ], + "args": [] + } + ], + "accounts": [ + { + "name": "WhirlpoolsConfigExtension", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whirlpoolsConfig", + "type": "publicKey" + }, + { + "name": "configExtensionAuthority", + "type": "publicKey" + }, + { + "name": "tokenBadgeAuthority", + "type": "publicKey" + } + ] + } + }, + { + "name": "WhirlpoolsConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "feeAuthority", + "type": "publicKey" + }, + { + "name": "collectProtocolFeesAuthority", + "type": "publicKey" + }, + { + "name": "rewardEmissionsSuperAuthority", + "type": "publicKey" + }, + { + "name": "defaultProtocolFeeRate", + "type": "u16" + } + ] + } + }, + { + "name": "FeeTier", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whirlpoolsConfig", + "type": "publicKey" + }, + { + "name": "tickSpacing", + "type": "u16" + }, + { + "name": "defaultFeeRate", + "type": "u16" + } + ] + } + }, + { + "name": "PositionBundle", + "type": { + "kind": "struct", + "fields": [ + { + "name": "positionBundleMint", + "type": "publicKey" + }, + { + "name": "positionBitmap", + "type": { + "array": ["u8", 32] + } + } + ] + } + }, + { + "name": "Position", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whirlpool", + "type": "publicKey" + }, + { + "name": "positionMint", + "type": "publicKey" + }, + { + "name": "liquidity", + "type": "u128" + }, + { + "name": "tickLowerIndex", + "type": "i32" + }, + { + "name": "tickUpperIndex", + "type": "i32" + }, + { + "name": "feeGrowthCheckpointA", + "type": "u128" + }, + { + "name": "feeOwedA", + "type": "u64" + }, + { + "name": "feeGrowthCheckpointB", + "type": "u128" + }, + { + "name": "feeOwedB", + "type": "u64" + }, + { + "name": "rewardInfos", + "type": { + "array": [ + { + "defined": "PositionRewardInfo" + }, + 3 + ] + } + } + ] + } + }, + { + "name": "TickArray", + "type": { + "kind": "struct", + "fields": [ + { + "name": "startTickIndex", + "type": "i32" + }, + { + "name": "ticks", + "type": { + "array": [ + { + "defined": "Tick" + }, + 88 + ] + } + }, + { + "name": "whirlpool", + "type": "publicKey" + } + ] + } + }, + { + "name": "TokenBadge", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whirlpoolsConfig", + "type": "publicKey" + }, + { + "name": "tokenMint", + "type": "publicKey" + } + ] + } + }, + { + "name": "Whirlpool", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whirlpoolsConfig", + "type": "publicKey" + }, + { + "name": "whirlpoolBump", + "type": { + "array": ["u8", 1] + } + }, + { + "name": "tickSpacing", + "type": "u16" + }, + { + "name": "tickSpacingSeed", + "type": { + "array": ["u8", 2] + } + }, + { + "name": "feeRate", + "type": "u16" + }, + { + "name": "protocolFeeRate", + "type": "u16" + }, + { + "name": "liquidity", + "type": "u128" + }, + { + "name": "sqrtPrice", + "type": "u128" + }, + { + "name": "tickCurrentIndex", + "type": "i32" + }, + { + "name": "protocolFeeOwedA", + "type": "u64" + }, + { + "name": "protocolFeeOwedB", + "type": "u64" + }, + { + "name": "tokenMintA", + "type": "publicKey" + }, + { + "name": "tokenVaultA", + "type": "publicKey" + }, + { + "name": "feeGrowthGlobalA", + "type": "u128" + }, + { + "name": "tokenMintB", + "type": "publicKey" + }, + { + "name": "tokenVaultB", + "type": "publicKey" + }, + { + "name": "feeGrowthGlobalB", + "type": "u128" + }, + { + "name": "rewardLastUpdatedTimestamp", + "type": "u64" + }, + { + "name": "rewardInfos", + "type": { + "array": [ + { + "defined": "WhirlpoolRewardInfo" + }, + 3 + ] + } + } + ] + } + } + ], + "types": [ + { + "name": "OpenPositionBumps", + "type": { + "kind": "struct", + "fields": [ + { + "name": "positionBump", + "type": "u8" + } + ] + } + }, + { + "name": "OpenPositionWithMetadataBumps", + "type": { + "kind": "struct", + "fields": [ + { + "name": "positionBump", + "type": "u8" + }, + { + "name": "metadataBump", + "type": "u8" + } + ] + } + }, + { + "name": "PositionRewardInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "growthInsideCheckpoint", + "type": "u128" + }, + { + "name": "amountOwed", + "type": "u64" + } + ] + } + }, + { + "name": "Tick", + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "type": "bool" + }, + { + "name": "liquidityNet", + "type": "i128" + }, + { + "name": "liquidityGross", + "type": "u128" + }, + { + "name": "feeGrowthOutsideA", + "type": "u128" + }, + { + "name": "feeGrowthOutsideB", + "type": "u128" + }, + { + "name": "rewardGrowthsOutside", + "type": { + "array": ["u128", 3] + } + } + ] + } + }, + { + "name": "WhirlpoolRewardInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mint", + "type": "publicKey" + }, + { + "name": "vault", + "type": "publicKey" + }, + { + "name": "authority", + "type": "publicKey" + }, + { + "name": "emissionsPerSecondX64", + "type": "u128" + }, + { + "name": "growthGlobalX64", + "type": "u128" + } + ] + } + }, + { + "name": "WhirlpoolBumps", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whirlpoolBump", + "type": "u8" + } + ] + } + }, + { + "name": "RemainingAccountsSlice", + "type": { + "kind": "struct", + "fields": [ + { + "name": "accountsType", + "type": { + "defined": "AccountsType" + } + }, + { + "name": "length", + "type": "u8" + } + ] + } + }, + { + "name": "RemainingAccountsInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "slices", + "type": { + "vec": { + "defined": "RemainingAccountsSlice" + } + } + } + ] + } + }, + { + "name": "CurrIndex", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Below" + }, + { + "name": "Inside" + }, + { + "name": "Above" + } + ] + } + }, + { + "name": "TickLabel", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Upper" + }, + { + "name": "Lower" + } + ] + } + }, + { + "name": "Direction", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Left" + }, + { + "name": "Right" + } + ] + } + }, + { + "name": "AccountsType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "TransferHookA" + }, + { + "name": "TransferHookB" + }, + { + "name": "TransferHookReward" + }, + { + "name": "TransferHookInput" + }, + { + "name": "TransferHookIntermediate" + }, + { + "name": "TransferHookOutput" + }, + { + "name": "SupplementalTickArrays" + }, + { + "name": "SupplementalTickArraysOne" + }, + { + "name": "SupplementalTickArraysTwo" + } + ] + } + } + ], + "errors": [ + { + "code": 6000, + "name": "InvalidEnum", + "msg": "Enum value could not be converted" + }, + { + "code": 6001, + "name": "InvalidStartTick", + "msg": "Invalid start tick index provided." + }, + { + "code": 6002, + "name": "TickArrayExistInPool", + "msg": "Tick-array already exists in this whirlpool" + }, + { + "code": 6003, + "name": "TickArrayIndexOutofBounds", + "msg": "Attempt to search for a tick-array failed" + }, + { + "code": 6004, + "name": "InvalidTickSpacing", + "msg": "Tick-spacing is not supported" + }, + { + "code": 6005, + "name": "ClosePositionNotEmpty", + "msg": "Position is not empty It cannot be closed" + }, + { + "code": 6006, + "name": "DivideByZero", + "msg": "Unable to divide by zero" + }, + { + "code": 6007, + "name": "NumberCastError", + "msg": "Unable to cast number into BigInt" + }, + { + "code": 6008, + "name": "NumberDownCastError", + "msg": "Unable to down cast number" + }, + { + "code": 6009, + "name": "TickNotFound", + "msg": "Tick not found within tick array" + }, + { + "code": 6010, + "name": "InvalidTickIndex", + "msg": "Provided tick index is either out of bounds or uninitializable" + }, + { + "code": 6011, + "name": "SqrtPriceOutOfBounds", + "msg": "Provided sqrt price out of bounds" + }, + { + "code": 6012, + "name": "LiquidityZero", + "msg": "Liquidity amount must be greater than zero" + }, + { + "code": 6013, + "name": "LiquidityTooHigh", + "msg": "Liquidity amount must be less than i64::MAX" + }, + { + "code": 6014, + "name": "LiquidityOverflow", + "msg": "Liquidity overflow" + }, + { + "code": 6015, + "name": "LiquidityUnderflow", + "msg": "Liquidity underflow" + }, + { + "code": 6016, + "name": "LiquidityNetError", + "msg": "Tick liquidity net underflowed or overflowed" + }, + { + "code": 6017, + "name": "TokenMaxExceeded", + "msg": "Exceeded token max" + }, + { + "code": 6018, + "name": "TokenMinSubceeded", + "msg": "Did not meet token min" + }, + { + "code": 6019, + "name": "MissingOrInvalidDelegate", + "msg": "Position token account has a missing or invalid delegate" + }, + { + "code": 6020, + "name": "InvalidPositionTokenAmount", + "msg": "Position token amount must be 1" + }, + { + "code": 6021, + "name": "InvalidTimestampConversion", + "msg": "Timestamp should be convertible from i64 to u64" + }, + { + "code": 6022, + "name": "InvalidTimestamp", + "msg": "Timestamp should be greater than the last updated timestamp" + }, + { + "code": 6023, + "name": "InvalidTickArraySequence", + "msg": "Invalid tick array sequence provided for instruction." + }, + { + "code": 6024, + "name": "InvalidTokenMintOrder", + "msg": "Token Mint in wrong order" + }, + { + "code": 6025, + "name": "RewardNotInitialized", + "msg": "Reward not initialized" + }, + { + "code": 6026, + "name": "InvalidRewardIndex", + "msg": "Invalid reward index" + }, + { + "code": 6027, + "name": "RewardVaultAmountInsufficient", + "msg": "Reward vault requires amount to support emissions for at least one day" + }, + { + "code": 6028, + "name": "FeeRateMaxExceeded", + "msg": "Exceeded max fee rate" + }, + { + "code": 6029, + "name": "ProtocolFeeRateMaxExceeded", + "msg": "Exceeded max protocol fee rate" + }, + { + "code": 6030, + "name": "MultiplicationShiftRightOverflow", + "msg": "Multiplication with shift right overflow" + }, + { + "code": 6031, + "name": "MulDivOverflow", + "msg": "Muldiv overflow" + }, + { + "code": 6032, + "name": "MulDivInvalidInput", + "msg": "Invalid div_u256 input" + }, + { + "code": 6033, + "name": "MultiplicationOverflow", + "msg": "Multiplication overflow" + }, + { + "code": 6034, + "name": "InvalidSqrtPriceLimitDirection", + "msg": "Provided SqrtPriceLimit not in the same direction as the swap." + }, + { + "code": 6035, + "name": "ZeroTradableAmount", + "msg": "There are no tradable amount to swap." + }, + { + "code": 6036, + "name": "AmountOutBelowMinimum", + "msg": "Amount out below minimum threshold" + }, + { + "code": 6037, + "name": "AmountInAboveMaximum", + "msg": "Amount in above maximum threshold" + }, + { + "code": 6038, + "name": "TickArraySequenceInvalidIndex", + "msg": "Invalid index for tick array sequence" + }, + { + "code": 6039, + "name": "AmountCalcOverflow", + "msg": "Amount calculated overflows" + }, + { + "code": 6040, + "name": "AmountRemainingOverflow", + "msg": "Amount remaining overflows" + }, + { + "code": 6041, + "name": "InvalidIntermediaryMint", + "msg": "Invalid intermediary mint" + }, + { + "code": 6042, + "name": "DuplicateTwoHopPool", + "msg": "Duplicate two hop pool" + }, + { + "code": 6043, + "name": "InvalidBundleIndex", + "msg": "Bundle index is out of bounds" + }, + { + "code": 6044, + "name": "BundledPositionAlreadyOpened", + "msg": "Position has already been opened" + }, + { + "code": 6045, + "name": "BundledPositionAlreadyClosed", + "msg": "Position has already been closed" + }, + { + "code": 6046, + "name": "PositionBundleNotDeletable", + "msg": "Unable to delete PositionBundle with open positions" + }, + { + "code": 6047, + "name": "UnsupportedTokenMint", + "msg": "Token mint has unsupported attributes" + }, + { + "code": 6048, + "name": "RemainingAccountsInvalidSlice", + "msg": "Invalid remaining accounts" + }, + { + "code": 6049, + "name": "RemainingAccountsInsufficient", + "msg": "Insufficient remaining accounts" + }, + { + "code": 6050, + "name": "NoExtraAccountsForTransferHook", + "msg": "Unable to call transfer hook without extra accounts" + }, + { + "code": 6051, + "name": "IntermediateTokenAmountMismatch", + "msg": "Output and input amount mismatch" + }, + { + "code": 6052, + "name": "TransferFeeCalculationError", + "msg": "Transfer fee calculation failed" + }, + { + "code": 6053, + "name": "RemainingAccountsDuplicatedAccountsType", + "msg": "Same accounts type is provided more than once" + }, + { + "code": 6054, + "name": "TooManySupplementalTickArrays", + "msg": "Too many supplemental tick arrays provided" + }, + { + "code": 6055, + "name": "DifferentWhirlpoolTickArrayAccount", + "msg": "TickArray account for different whirlpool provided" + } + ] +} diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/Cargo.toml b/#_sniper (Rust) using jito Shred stream/json-rpc-client/Cargo.toml new file mode 100644 index 0000000..0661a5b --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "jito-block-engine-json-rpc-client" +version = "0.1.0" +edition = "2021" +description = "A sample rpc client to generate and send requests to jito block engine server" +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +async-trait = "0.1.68" +bincode = "1.3.3" +log = "0.4.17" +reqwest = { version = "0.11", features = ["json"] } +serde = { version = "1.0.189", features = ["derive"] } +serde_json = "1.0.107" +solana-rpc-client = "=2.1.7" +solana-rpc-client-api = "=2.1.7" +solana-sdk = "=2.1.7" +solana-transaction-status = "=2.1.7" +thiserror = "1.0.40" +tokio = { version = "1", features = ["rt-multi-thread"] } + +[dev-dependencies] +solana-program = "=2.1.7" + + diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/README.md b/#_sniper (Rust) using jito Shred stream/json-rpc-client/README.md new file mode 100644 index 0000000..96d471e --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/README.md @@ -0,0 +1,3 @@ +# json-rpc-client + +This repository contains code to communicate with Jito's Block-Engine. diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/rustfmt.toml b/#_sniper (Rust) using jito Shred stream/json-rpc-client/rustfmt.toml new file mode 100644 index 0000000..d6f726f --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/rustfmt.toml @@ -0,0 +1,5 @@ +edition = "2021" # required by rust-analyzer +imports_granularity="Crate" +format_code_in_doc_comments = true +error_on_unformatted = true +group_imports = "StdExternalCrate" diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/client_error.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/client_error.rs new file mode 100644 index 0000000..61cdae0 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/client_error.rs @@ -0,0 +1,125 @@ +pub use reqwest; +use solana_rpc_client_api::{client_error::ErrorKind, request}; +use solana_sdk::{ + signature::SignerError, transaction::TransactionError, transport::TransportError, +}; +use thiserror::Error as ThisError; + +use crate::jsonrpc_client::request::RpcRequest; + +#[derive(ThisError, Debug)] +#[error("{kind}")] +pub struct Error { + pub request: Option, + + #[source] + pub kind: ErrorKind, +} + +impl Error { + pub fn new_with_request(kind: ErrorKind, request: RpcRequest) -> Self { + Self { + request: Some(request), + kind, + } + } + + pub fn into_with_request(self, request: RpcRequest) -> Self { + Self { + request: Some(request), + ..self + } + } + + pub fn request(&self) -> Option<&RpcRequest> { + self.request.as_ref() + } + + pub fn kind(&self) -> &ErrorKind { + &self.kind + } + + pub fn get_transaction_error(&self) -> Option { + self.kind.get_transaction_error() + } +} + +impl From for Error { + fn from(kind: ErrorKind) -> Self { + Self { + request: None, + kind, + } + } +} + +impl From for Error { + fn from(err: TransportError) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +impl From for TransportError { + fn from(client_error: Error) -> Self { + client_error.kind.into() + } +} + +impl From for Error { + fn from(err: std::io::Error) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +impl From for Error { + fn from(err: reqwest::Error) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +impl From for Error { + fn from(err: request::RpcError) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +impl From for Error { + fn from(err: serde_json::error::Error) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +impl From for Error { + fn from(err: SignerError) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +impl From for Error { + fn from(err: TransactionError) -> Self { + Self { + request: None, + kind: err.into(), + } + } +} + +pub type Result = std::result::Result; diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/http_sender.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/http_sender.rs new file mode 100644 index 0000000..16b9e17 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/http_sender.rs @@ -0,0 +1,218 @@ +use std::{ + sync::{ + atomic::{AtomicU64, Ordering}, + Arc, RwLock, + }, + time::{Duration, Instant}, +}; + +use async_trait::async_trait; +use log::debug; +use reqwest::{ + self, + header::{CONTENT_TYPE, RETRY_AFTER}, + StatusCode, +}; +use solana_rpc_client_api::{ + custom_error, + error_object::RpcErrorObject, + request::{RpcError, RpcResponseErrorData}, + response::RpcSimulateTransactionResult, +}; +use tokio::time::sleep; + +use crate::jsonrpc_client::{client_error::Result, request::RpcRequest, rpc_sender::RpcSender}; + +pub struct HttpSender { + client: Arc, + url: String, + request_id: AtomicU64, + stats: RwLock, +} + +/// Nonblocking [`RpcSender`] over HTTP. +impl HttpSender { + /// Create an HTTP RPC sender. + /// + /// The URL is an HTTP URL, usually for port 8899, as in + /// "http://localhost:8899". The sender has a default timeout of 30 seconds. + pub fn new(url: U) -> Self { + Self::new_with_timeout(url, Duration::from_secs(30)) + } + + /// Create an HTTP RPC sender. + /// + /// The URL is an HTTP URL, usually for port 8899. + pub fn new_with_timeout(url: U, timeout: Duration) -> Self { + let client = Arc::new( + reqwest::Client::builder() + .timeout(timeout) + .pool_idle_timeout(timeout) + .build() + .expect("build rpc client"), + ); + + Self { + client, + url: url.to_string(), + request_id: AtomicU64::new(0), + stats: RwLock::new(solana_rpc_client::rpc_sender::RpcTransportStats::default()), + } + } +} + +struct StatsUpdater<'a> { + stats: &'a RwLock, + request_start_time: Instant, + rate_limited_time: Duration, +} + +impl<'a> StatsUpdater<'a> { + fn new(stats: &'a RwLock) -> Self { + Self { + stats, + request_start_time: Instant::now(), + rate_limited_time: Duration::default(), + } + } + + fn add_rate_limited_time(&mut self, duration: Duration) { + self.rate_limited_time += duration; + } +} + +impl Drop for StatsUpdater<'_> { + fn drop(&mut self) { + let mut stats = self.stats.write().unwrap(); + stats.request_count += 1; + stats.elapsed_time += Instant::now().duration_since(self.request_start_time); + stats.rate_limited_time += self.rate_limited_time; + } +} + +#[async_trait] +impl RpcSender for HttpSender { + fn get_transport_stats(&self) -> solana_rpc_client::rpc_sender::RpcTransportStats { + self.stats.read().unwrap().clone() + } + + async fn send( + &self, + request: RpcRequest, + params: serde_json::Value, + ) -> Result { + let mut stats_updater = StatsUpdater::new(&self.stats); + + let request_id = self.request_id.fetch_add(1, Ordering::Relaxed); + let request_json = request.build_request_json(request_id, params).to_string(); + + let mut too_many_requests_retries = 5; + loop { + let response = { + let client = self.client.clone(); + let request_json = request_json.clone(); + client + .post(&self.url) + .header(CONTENT_TYPE, "application/json") + .body(request_json) + .send() + .await + }?; + + if !response.status().is_success() { + if response.status() == StatusCode::TOO_MANY_REQUESTS + && too_many_requests_retries > 0 + { + let mut duration = Duration::from_millis(500); + if let Some(retry_after) = response.headers().get(RETRY_AFTER) { + if let Ok(retry_after) = retry_after.to_str() { + if let Ok(retry_after) = retry_after.parse::() { + if retry_after < 120 { + duration = Duration::from_secs(retry_after); + } + } + } + } + + too_many_requests_retries -= 1; + debug!( + "Too many requests: server responded with {:?}, {} retries left, pausing for {:?}", + response, too_many_requests_retries, duration + ); + + sleep(duration).await; + stats_updater.add_rate_limited_time(duration); + continue; + } + return Err(response.error_for_status().unwrap_err().into()); + } + + let mut json = response.json::().await?; + if json["error"].is_object() { + return match serde_json::from_value::(json["error"].clone()) { + Ok(rpc_error_object) => { + let data = match rpc_error_object.code { + solana_rpc_client_api::custom_error::JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE => { + match serde_json::from_value::(json["error"]["data"].clone()) { + Ok(data) => RpcResponseErrorData::SendTransactionPreflightFailure(data), + Err(err) => { + debug!("Failed to deserialize RpcSimulateTransactionResult: {:?}", err); + RpcResponseErrorData::Empty + } + } + }, + custom_error::JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY => { + match serde_json::from_value::(json["error"]["data"].clone()) { + Ok(custom_error::NodeUnhealthyErrorData {num_slots_behind}) => RpcResponseErrorData::NodeUnhealthy {num_slots_behind}, + Err(_err) => { + RpcResponseErrorData::Empty + } + } + }, + _ => RpcResponseErrorData::Empty + }; + + Err(RpcError::RpcResponseError { + code: rpc_error_object.code, + message: rpc_error_object.message, + data, + } + .into()) + } + Err(err) => Err(RpcError::RpcRequestError(format!( + "Failed to deserialize RPC error response: {} [{}]", + serde_json::to_string(&json["error"]).unwrap(), + err + )) + .into()), + }; + } + return Ok(json["result"].take()); + } + } + + fn url(&self) -> String { + self.url.clone() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test(flavor = "multi_thread")] + async fn http_sender_on_tokio_multi_thread() { + let http_sender = HttpSender::new("http://localhost:1234".to_string()); + let _ = http_sender + .send(RpcRequest::GetTipAccounts, serde_json::Value::Null) + .await; + } + + #[tokio::test(flavor = "current_thread")] + async fn http_sender_on_tokio_current_thread() { + let http_sender = HttpSender::new("http://localhost:1234".to_string()); + let _ = http_sender + .send(RpcRequest::GetTipAccounts, serde_json::Value::Null) + .await; + } +} diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/mod.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/mod.rs new file mode 100644 index 0000000..3a98d13 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/mod.rs @@ -0,0 +1,5 @@ +pub mod client_error; +pub mod http_sender; +pub mod request; +pub mod rpc_client; +pub mod rpc_sender; diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/request.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/request.rs new file mode 100644 index 0000000..6bbbfa0 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/request.rs @@ -0,0 +1,55 @@ +use std::fmt; + +use serde_json::{json, Value}; + +#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)] +pub enum RpcRequest { + Custom { method: &'static str }, + GetBundlesStatuses, + GetTipAccounts, + SendBundle, +} + +impl fmt::Display for RpcRequest { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let method = match self { + RpcRequest::Custom { method } => method, + RpcRequest::GetBundlesStatuses => "getBundleStatuses", + RpcRequest::GetTipAccounts => "getTipAccounts", + RpcRequest::SendBundle => "sendBundle", + }; + + write!(f, "{method}") + } +} + +impl RpcRequest { + pub fn build_request_json(self, id: u64, params: Value) -> Value { + let jsonrpc = "2.0"; + json!({ + "jsonrpc": jsonrpc, + "id": id, + "method": format!("{self}"), + "params": params, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build_request_json() { + let test_request = RpcRequest::GetTipAccounts; + let request = test_request.build_request_json(1, json!([])); + assert_eq!(request["method"], "getTipAccounts"); + assert_eq!(request["params"], json!([])); + + let test_request = RpcRequest::GetBundlesStatuses; + let addr = json!("deadbeefXjn8o3yroDHxUtKsZZgoy4GPkPPXfouKNHhx"); + let request = test_request.build_request_json(1, json!([addr])); + assert_eq!(request["method"], "getBundleStatuses"); + assert_eq!(request["params"], json!([addr])); + } +} diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_client.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_client.rs new file mode 100644 index 0000000..62a0689 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_client.rs @@ -0,0 +1,406 @@ +use std::time::Duration; + +use bincode::serialize; +use log::*; +use serde_json::{json, Value}; +use solana_rpc_client::{ + rpc_client::{RpcClientConfig, SerializableTransaction}, + rpc_sender::RpcTransportStats, +}; +use solana_rpc_client_api::{ + client_error::ErrorKind as ClientErrorKind, request::RpcError, response::Response, +}; +use solana_sdk::{bs58, commitment_config::CommitmentConfig}; +use solana_transaction_status::UiTransactionEncoding; + +use crate::jsonrpc_client::{ + client_error, + client_error::{Error as ClientError, Result as ClientResult}, + http_sender::HttpSender, + request::RpcRequest, + rpc_sender::*, +}; + +pub type RpcResult = client_error::Result>; +/// A client of a remote Jito block engine node. +/// +/// `RpcClient` communicates with a block engine node over [JSON-RPC] +/// It is the primary Rust interface for querying and transacting with the network +/// from external programs. +/// +/// This is modeled very closely with the solan RpcClient with similar error types. +/// You can treat the client similar to the Solana RpcClient with the difference being +/// the RpcClient supports the block engine apis. +/// +/// The client can be used with jito block engine proxy server for authentication +/// The client can be used as is to send requests unauthenticated to the jito block engine as well +/// +/// Please note that the commitment level is not used at the moment. Support will be added +/// later on to specify and use the commitment levels. +pub struct RpcClient { + sender: Box, + config: RpcClientConfig, +} + +impl RpcClient { + /// Create an `RpcClient` from an [`RpcSender`] and an [`RpcClientConfig`]. + /// + /// This is the basic constructor, allowing construction with any type of + /// `RpcSender`. Most applications should use one of the other constructors, + /// such as [`RpcClient::new`], [`RpcClient::new_with_commitment`] or + /// [`RpcClient::new_with_timeout`]. + pub fn new_sender( + sender: T, + config: RpcClientConfig, + ) -> Self { + Self { + sender: Box::new(sender), + config, + } + } + + /// Create an HTTP `RpcClient`. + /// + /// The URL is an HTTP URL, usually for port 8899, as in + /// "http://localhost:8899". + /// + /// The client has a default timeout of 30 seconds, and a default [commitment + /// level][cl] of [`Finalized`](CommitmentLevel::Finalized). + /// + /// [cl]: https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment + /// + /// # Examples + /// + /// ``` + /// # use jito_block_engine_json_rpc_client::jsonrpc_client::rpc_client::RpcClient; + /// let url = "http://localhost:8899".to_string(); + /// let client = RpcClient::new(url); + /// ``` + pub fn new(url: String) -> Self { + Self::new_with_commitment(url, CommitmentConfig::default()) + } + + /// Create an HTTP `RpcClient` with specified [commitment level][cl]. + /// + /// Please note the client is not currently implemented to support commitment level configs + /// + /// [cl]: https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment + /// + /// The URL is an HTTP URL, usually for port 8899, as in + /// "http://localhost:8899". + /// + /// The client has a default timeout of 30 seconds, and a user-specified + /// [`CommitmentLevel`] via [`CommitmentConfig`]. + /// + /// # Examples + /// + /// # use solana_sdk::commitment_config::CommitmentConfig; + /// # use jito_block_engine_json_rpc_client::jsonrpc_client::rpc_client::RpcClient; + /// let url = "http://localhost:8899".to_string(); + /// let commitment_config = CommitmentConfig::processed(); + /// let client = RpcClient::new_with_commitment(url, commitment_config); + fn new_with_commitment(url: String, commitment_config: CommitmentConfig) -> Self { + Self::new_sender( + HttpSender::new(url), + RpcClientConfig::with_commitment(commitment_config), + ) + } + + /// Create an HTTP `RpcClient` with specified timeout. + /// + /// The URL is an HTTP URL, usually for port 8899, as in + /// "http://localhost:8899". + /// + /// The client has and a default [commitment level][cl] of + /// [`Finalized`](CommitmentLevel::Finalized). + /// + /// [cl]: https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment + /// + /// # Examples + /// + /// ``` + /// # use std::time::Duration; + /// # use jito_block_engine_json_rpc_client::jsonrpc_client::rpc_client::RpcClient; + /// let url = "http://localhost::8899".to_string(); + /// let timeout = Duration::from_secs(1); + /// let client = RpcClient::new_with_timeout(url, timeout); + /// ``` + pub fn new_with_timeout(url: String, timeout: Duration) -> Self { + Self::new_sender( + HttpSender::new_with_timeout(url, timeout), + RpcClientConfig::with_commitment(CommitmentConfig::default()), + ) + } + + /// Get the configured url of the client's sender + pub fn url(&self) -> String { + self.sender.url() + } + + /// Get the configured default [commitment level][cl]. + /// + /// [cl]: https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment + /// + /// The commitment config may be specified during construction, and + /// determines how thoroughly committed a transaction must be when waiting + /// for its confirmation or otherwise checking for confirmation. If not + /// specified, the default commitment level is + /// [`Finalized`](CommitmentLevel::Finalized). + /// + /// The default commitment level is overridden when calling methods that + /// explicitly provide a [`CommitmentConfig`], like + /// [`RpcClient::confirm_transaction_with_commitment`]. + pub fn commitment(&self) -> CommitmentConfig { + self.config.commitment_config + } + + /// Submits a bundle of signed transactions to the network. + /// + /// This returns a bundle_id on success and will return an error + /// code on failure. The error code will only be on the basic + /// validation of the bundle and publishing the bundle to the mempool + /// For the bundle status regarding whether it landed or not, get_bundle_statuses + /// should be used with the bundle id. + /// + /// Example excerpt can be as below + /// + /// use jito_block_engine_json_rpc_client::jsonrpc_client::rpc_client::RpcClient; + /// use solana_program::hash::Hash; + /// use solana_sdk::{pubkey::Pubkey, signer::keypair::Keypair}; + /// + /// let base = 0; + /// let MAX_BUNDLE_LEN = 5; + /// let searcher_keypair = Keypair::new(); + /// let recent_blockhash = Hash::new_unique(); + /// + /// let mut bundle: Vec<_> = (0..(MAX_BUNDLE_LEN) as u64) + /// .map(|amount| { + /// VersionedTransaction::from(system_transaction::transfer( + /// &searcher_keypair, + /// &searcher_keypair.pubkey(), + /// base + amount, + /// recent_blockhash, + /// )) + /// }) + /// .collect(); + /// + /// let rpc_client = RpcClient::new(SERVER_URL.to_owned()); + /// let response = rpc_client.send_bundle(&bundle).await; + pub async fn send_bundle( + &self, + transactions: &[impl SerializableTransaction], + ) -> ClientResult { + let mut serialized_encoded: Vec = Vec::with_capacity(transactions.len()); + for transaction in transactions { + let encoding = self.default_cluster_transaction_encoding().await?; + serialized_encoded.push(serialize_and_encode(transaction, encoding)?); + } + //The bundle may or may + // not have been submitted to the cluster, so callers should verify the success of + // the correct transaction signature independently. + match self + .send(RpcRequest::SendBundle, json!([serialized_encoded])) + .await + { + Ok(signature_base58_str) => ClientResult::Ok(signature_base58_str), + Err(err) => { + if let ClientErrorKind::RpcError(RpcError::RpcResponseError { + code, message, .. + }) = &err.kind + { + debug!("{} {}", code, message); + } + Err(err) + } + } + } + + async fn default_cluster_transaction_encoding( + &self, + ) -> Result { + Ok(UiTransactionEncoding::Base58) + } + + /// Gets the statuses of a list of bundle ids. + /// + /// Returns the statuses of a list of signatures. Each signature must be a bundle_id. + /// bundle ids are sha256 hashes of their tx signatures (we get it after a sendBundle) + /// This method currently will provide information regarding whether the bundle + /// landed or not. + /// The behavior is similar to the solana rpc method getSignatureStatuses + /// https://docs.solana.com/api/http#getsignaturestatuses + /// + /// If the bundle_id is not found or the all of the transactions in the bundle has not landed, + /// we return null. If found and landed, we return the context information including the slot + /// at which the request was made and result with the bundle_id(s) and the transactions with the + /// slot and confirmation status. At this point, its assumed that all transactions within a bundle + /// will have the same slot number and confirmation status. + /// + /// The confirmation status of a bundle is the confirmation status of the transactions. + /// This api does not provide a commitment level to configure, but will return the commitment level + /// as returned by the rpc. The rpc used to fetch bulk transaction status does not provide a commitment + /// level configuration option either. + /// + /// Example excerpt can be as below + /// + /// use jito_block_engine_json_rpc_client::jsonrpc_client::rpc_client::RpcClient; + /// + /// let SERVER_URL = "http://localhost:8899"; + /// let bundle_id = "bundle_id".to_owned(); + /// + /// let rpc_client = RpcClient::new(SERVER_URL.to_owned()); + /// let response = rpc_client.get_bundle_statuses(&[bundle_id.clone()]).await; + pub async fn get_bundle_statuses( + &self, + signatures: &[String], + ) -> RpcResult> { + self.send(RpcRequest::GetBundlesStatuses, json!([signatures])) + .await + } + + /// Returns the tip accounts to be used for tip payments. + pub async fn get_tip_accounts(&self) -> ClientResult> { + self.send(RpcRequest::GetTipAccounts, Value::Null).await + } + + pub async fn send(&self, request: RpcRequest, params: Value) -> ClientResult + where + T: serde::de::DeserializeOwned, + { + assert!(params.is_array() || params.is_null()); + + let response = self + .sender + .send(request, params) + .await + .map_err(|err| err.into_with_request(request))?; + serde_json::from_value(response) + .map_err(|err| ClientError::new_with_request(err.into(), request)) + } + + pub fn get_transport_stats(&self) -> RpcTransportStats { + self.sender.get_transport_stats() + } +} + +fn serialize_and_encode(input: &T, encoding: UiTransactionEncoding) -> ClientResult +where + T: serde::ser::Serialize, +{ + let serialized = serialize(input) + .map_err(|e| ClientErrorKind::Custom(format!("Serialization failed: {e}")))?; + let encoded = match encoding { + UiTransactionEncoding::Base58 => bs58::encode(serialized).into_string(), + _ => { + return Err(ClientErrorKind::Custom(format!( + "unsupported encoding: {encoding}. Supported encodings: base58" + )) + .into()) + } + }; + Ok(encoded) +} + +// Sample tests. Can use these as a reference point on how to use the api and what to expect +#[cfg(test)] +mod rpc_client_tests { + use solana_program::hash::Hash; + use solana_sdk::{ + pubkey::Pubkey, signature::Signer, signer::keypair::Keypair, system_transaction, + transaction::VersionedTransaction, + }; + + use crate::jsonrpc_client::rpc_client::RpcClient; + + // Use the proxy server url here. + const SERVER_URL: &str = "http://0.0.0.0:8080/api/v1/bundles"; + + #[tokio::test] + pub async fn get_tip_accounts() { + // Let's try the same with the rpc client + let rpc_client = RpcClient::new(SERVER_URL.to_owned()); + + let tip_accounts = rpc_client.get_tip_accounts().await; + + // Sample output. Pick only randomly to not have contention + // ["9ttgPBBhRYFuQccdR1DSnb7hydsWANoDsV3P9kaGMCEh", + // "EoW3SUQap7ZeynXQ2QJ847aerhxbPVr843uMeTfc9dxM", + // "4xgEmT58RwTNsF5xm2RMYCnR1EVukdK8a1i2qFjnJFu3", + // "B1mrQSpdeMU9gCvkJ6VsXVVoYjRGkNA7TtjMyqxrhecH", + // "aTtUk2DHgLhKZRDjePq6eiHRKC1XXFMBiSUfQ2JNDbN", + // "9n3d1K5YD2vECAbRFhFFGYNNjiXtHXJWn9F31t89vsAV", + // "ARTtviJkLLt6cHGQDydfo1Wyk6M4VGZdKZ2ZhdnJL336", + // "E2eSqe33tuhAHKTrwky5uEjaVqnb2T9ns6nHHUrN8588"] + println!("{:?}", tip_accounts); + } + + #[tokio::test] + pub async fn send_bundle() { + let rpc_client = RpcClient::new(SERVER_URL.to_owned()); + + // Use your own keypair to sign + let signer_keypair = Keypair::new(); + + // Get the latest blockhash from solana cluster. Can use https://docs.solana.com/api/http#getlatestblockhash + let recent_blockhash = Hash::new_unique(); + + // Use the get_tip_accounts to randomly select a tip account to send tips to + let tip_account = Pubkey::try_from("DCN82qDxJAQuSqHhv2BJuAgi41SPeKZB5ioBCTMNDrCC").unwrap(); + + let mut bundle: Vec<_> = vec![VersionedTransaction::from(system_transaction::transfer( + &signer_keypair, + &signer_keypair.pubkey(), + 10000, + recent_blockhash, + ))]; + + // Add the tip + bundle.push(VersionedTransaction::from(system_transaction::transfer( + &signer_keypair, + &tip_account, + 10000, + recent_blockhash, + ))); + let response = rpc_client.send_bundle(&bundle).await; + + // If successful, the bundle_id can be retrieved. Else, an error code will be provided + println!("{:?}", response); + } + + #[tokio::test] + pub async fn get_bundle_statuses() { + let rpc_client = RpcClient::new(SERVER_URL.to_owned()); + + // Use the bundle id you got from send_bundle + let bundle_id = + "6e4b90284778a40633b56e4289202ea79e62d2296bb3d45398bb93f6c9ec083d".to_owned(); + + let response = rpc_client.get_bundle_statuses(&[bundle_id]).await; + + // Sample success output: + // Response { + // context: RpcResponseContext { + // slot: 0, api_version: None }, + // value: [Object { + // "bundle_id": String("6e4b90284778a40633b56e4289202ea79e62d2296bb3d45398bb93f6c9ec083d"), + // "transactions": Array [String("4DGCuaKc2oue4Z8YC6mBwyg3oPAFG64BfxDtMbqDU3Du9zr26oVSuZcjSnJqTnHnKYFJ4AdPuq5kUrWKwTFLKtW6"), + // String("srrgfKABYeaKazZjBmpuPKySJ8qgqezYaCdDnB9nhED5CFhviZ1wgcs5vEKnAK9L2ytRauWG9czGoKRxajpZ1YR")], + // "slot": Number(240632575), + // "confirmation_status": String("finalized"), + // "err": Object {"Ok": Null}}] } + // + // Sample retryable error output: + // Response { + // context: RpcResponseContext { + // slot: 0, api_version: None }, + // value: [Object { + // "bundle_id": String("6e4b90284778a40633b56e4289202ea79e62d2296bb3d45398bb93f6c9ec083d"), + // "transactions": Array [String("4DGCuaKc2oue4Z8YC6mBwyg3oPAFG64BfxDtMbqDU3Du9zr26oVSuZcjSnJqTnHnKYFJ4AdPuq5kUrWKwTFLKtW6"), + // String("srrgfKABYeaKazZjBmpuPKySJ8qgqezYaCdDnB9nhED5CFhviZ1wgcs5vEKnAK9L2ytRauWG9czGoKRxajpZ1YR")], + // "slot": Number(612529), + // "confirmation_status": Null, + // "err": Object {"Err": Object {"Retryable": String("Failed to retrieve information from solana cluster")}}}] } + // If unknown bundle, the response would be null + println!("{:?}", response); + } +} diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_sender.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_sender.rs new file mode 100644 index 0000000..f5398f3 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/jsonrpc_client/rpc_sender.rs @@ -0,0 +1,21 @@ +use async_trait::async_trait; +use solana_rpc_client::rpc_sender::RpcTransportStats; + +use crate::jsonrpc_client::{client_error::Result, request::RpcRequest}; + +/// A transport for RPC calls. +/// +/// `RpcSender` implements the underlying transport of requests to, and +/// responses from, a Solana node, and is used primarily by [`RpcClient`]. +/// +/// [`RpcClient`]: crate::rpc_client::RpcClient +#[async_trait] +pub trait RpcSender { + async fn send( + &self, + request: RpcRequest, + params: serde_json::Value, + ) -> Result; + fn get_transport_stats(&self) -> RpcTransportStats; + fn url(&self) -> String; +} diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/lib.rs b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/lib.rs new file mode 100644 index 0000000..19a3340 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/src/lib.rs @@ -0,0 +1 @@ +pub mod jsonrpc_client; diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/.rustc_info.json b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/.rustc_info.json new file mode 100644 index 0000000..0f4cf43 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":16894786775884202872,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.85.1 (4eb161250 2025-03-15)\nbinary: rustc\ncommit-hash: 4eb161250e340c8f48f66e2b929ef4a5bed7c181\ncommit-date: 2025-03-15\nhost: x86_64-unknown-linux-gnu\nrelease: 1.85.1\nLLVM version: 19.1.7\n","stderr":""},"13331785392996375709":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/CACHEDIR.TAG b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/CACHEDIR.TAG new file mode 100644 index 0000000..20d7c31 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/.cargo-lock b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/.cargo-lock new file mode 100644 index 0000000..e69de29 diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.d b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.d new file mode 100644 index 0000000..8f0a266 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.d @@ -0,0 +1 @@ +/pumpfun_indexer/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.rlib: /pumpfun_indexer/json-rpc-client/src/jsonrpc_client/client_error.rs /pumpfun_indexer/json-rpc-client/src/jsonrpc_client/http_sender.rs /pumpfun_indexer/json-rpc-client/src/jsonrpc_client/mod.rs /pumpfun_indexer/json-rpc-client/src/jsonrpc_client/request.rs /pumpfun_indexer/json-rpc-client/src/jsonrpc_client/rpc_client.rs /pumpfun_indexer/json-rpc-client/src/jsonrpc_client/rpc_sender.rs /pumpfun_indexer/json-rpc-client/src/lib.rs diff --git a/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.rlib b/#_sniper (Rust) using jito Shred stream/json-rpc-client/target/release/libjito_block_engine_json_rpc_client.rlib new file mode 100644 index 0000000000000000000000000000000000000000..58e18d8266d1fa016c3389da6c0cede62a1e79b3 GIT binary patch literal 262144 zcmeF42b^4G_4hXc0tq3Z_bQ@ zX%4sGok!;+y8#X zehyYTe*LyF{dslcww0FP&!h=oYWv9jTzOdAq%rzgdCjBS{_B5kxxQ`X|NXQ)2a~^c zY1{vPmfReyvhabnVg3ARdfO@=;h!lR{-o`HKchbfQ&;&|+nE0Z3)-fR<&zb=6~tS+PupYev}t{sGR-T>U((Nrcf~8a1wm9SiicEffybNOrCc$JLe=ijG}ZS5 z({)Tu2_0A6z0K?H>242vGu9$E3>7W5G(C)U#j#CY3vADdBGYVF?e@;j1zqi`uB(Qt zE2id}rm1O$uIp_K$dp}hD+AHO$WDi$t22`E3^fu}%XcqebYZTvs5hdMx)&OT6$ZK+ zIJ)I%yVq}9Rjg(vvq3M0n9qK5FJ{yT7q3RH&!M}XtNW3ndRpv-mf={tiwPOqPMOu6 z^12t%E7x-@BVd(7kF{{!rQNGybR@k}eaCif(_&w#n&;Tf?muN&+5-J%I~iB3DXtQ0 zW~f*Ohr?)gTx$Js89`4W(tAq<%M1%Wy}5jMuD8<*A|VC5&d#2oy?sH%e-4U*s=q3h z3iOH=%|LUxSIlO|Wh}Gf>az^iD`dHXNU>eRGa_-Eo7{+2{c+W~%kA_MRh7Q( z=&0T(C`qj%a#1J@&2=nYQB>ckCs&#~D{lQRj_sCms?SPKZz^D!zB}A8fUv)J0$5hpK1J{U6E%IE? zLKhk98PiacE2@1iAENZ<<9sA88CA6%2c5#O9XoPNZ|pm#)}A%G#ieJOmT#-Er7wj$ zxz4QVVc=?tqJ^4jW1s}f%&fVF-n~AMV4Zjma;UKbcns? z*;){2n1H6PJAt-rozTdQ^jOzz&-Crk(b1O1TzsgxT(tm64Q`}|ZG@ib1zKbok)yeq z?3-;@-%S-$eSps)z2U3PVPS;emFVp0=9d}b7jbu)@-Jx2RUKaqeAn|dO9?`!!JUND zAn8X>r`PS}N(HaG=mp|Z%@s>tsjrv|I`c?E=?&oK%(b@*+eX}@1Dzc+7fVn1Pcc`k zaElb1{PcnO89iOS`OYZZtDF0ZYk^*fv57gU2xj4*nU#+^!|YnF?Rm-mRb1L?a%uaE zN>Py+GR#1YA}cU8-SAbb?ycRNex#c96(mj9mYqpHz$=t+Uv(~;83jGzXiv7P8@dx3 zx~*A(k7itNJ2pAl4HRZgRjMc33xb|L_HQUhTUcV-x&C*V{#E`0&mF(iDk)(!mGSkq~`MTy17)s zT;i(?O$C>4sG^6PuA(N_m8vv#UmcV^rp?8HLa_!BnLc8{Hq%vb8|hsz;HB6)9gq%cpO6wl|+@QxED=#kb5zmtVU{r zxb4t4Je_63r)Zm@>0sm4KiQRb@y0aa*6efSV3VdaKW3-sp5eN#q1aZlO*vXKO*KDi z(IrOi`ovLu%`^!BaD3~EMf5|bskl!K9jt2aR%<P4_vjW1bCm@=WF-ASX-rOhZ>5t8Qq2BG?+!u^`otXKV_Cgf5 z7y62&T-1^4jS9t{ZlZ*xMbgev9jS61fjced69}1~i@N9KyQAC@JeDi;2C3TB-Y)*4 z`p+GuQZM1q?l3Bd5Q$eR9@rZadreG-G@@E1eTCR)Z=cD3#gR9}AK7(2&SVSct3rfL zkF>;~*Y$?|QH}onQPrycsLGynZjS7mYIR2oa|`pOj$A3<74`H9msJo425O-1JC5nt zx{}zOR&r4`Y`ei+EN;8{(j388#cXF2Ji9kY#v|pWJ1@en6Bb`@PXVWMzd@sGF8{MTrN_@i510C z@LDJ)q4Y3T+qG1YFcrhKgj0{OG1vghHnc<^YxspM!dmMK(qYp~?+J=29zGshaeYnC zoUu*3N%sIzI5u(Dn2REd3peg{7E^1b+nN`6OtxWoQ5eK(((Q`wr7C(;8d1}}l)bvU zqe7L9BoQd7nnakyHViE=G|g9)z|FL_R)(kJ>9rlp@{G_n0ToE8v3Pj+6r0d3GeIvr zKUtJUxSLWJQhl5IzG-7E>85H~?RxtCnXknb8ttvK=J`9ODE^jJnb6?lnU< zRy4X2`vE?Q%u(6I?zK^<4Bv^+Fm)&Phw-MvfoE+E&r}1DMTrusHX|tlqy#9XDD(rz zQVpm7s*aYS(#k#zkzYWn%s66ydrD@#HZi}EiY?~yCPzc_?c~kM4tDKkHgNO4&Z?tX zwO0d+2xjQ0k)c?6h=i&mahu(75rfh_#R5zgaTg32*XUwdhFVF>Onh|05|MWm&>3-A zCGPKGdzc4*<{TzC#os$xG^5ii7G>nbJz8+_!E6B1+|u&ajjlOz%SYFHV)4e4z_;K$Z=KhT`Gf%r(UB|<^e zs%EsH4H?PuBGokg$mTY|=m`?^K;)vB$z+sE3y?0eM2!FKQw(mw4JbSD}AyR zabrh{j>pQhfT;|z!P2qx$yRK37m*M*G)%y(VKNrG?)}n?h{^5RJ(q0|+vy5bVY5bQye6QmDAZj~M`>2wMC~1e@!ANR(6_*&ns`IQ zF`H-4(ly&wLk(cD(G5Us%(7|8qc}GEIrQu} z0=5kx#=&|Xvw6lJ6Ue<~yJ3X0bClNClyXC=_#VdBPa!L-mr>E)6#44=(9S|X^% zZ0q1*Oyu;cCe3h!j)T#-c)U#L8YEn+PVAD& z3~DkoywFTG+E_H~;f_Qdvpf}FV&o<_$5=E>_#4~EGU7N4JTFXqFk|9?jku-^lHr`l zi|r`&%Q#gi!oiE2;sBdi=fQ|Uz0}v+8C5|B6)a!@OtT}BY>gmMP)4tPBk}oFb$}q9 zZiI%bIDw^^3LR+D?U`YDhA^7OatyKUDT-nQ#KgeUsmV<^Y8}v&%z>IBKeG#h2&9i6 z7qBE=cv9|~ok~4Jca8N_4mlDN+=6M_3O)oM4{s{^M(b1z*$o@tERjD4nh7mdVs5?W z_GZ2LZ0-wcJ*R$ipU_(Gg_fm%*V-6O_9BD*)%wKPIHKavjpBe~>6xS$2_#H?aM0pl z<&p_2X&`=WLL49iG;~Lc3vQHRqC>P~O4c)X zqgT-}R6W|>E}w007Z10$cX@^R0)@CQu*A0DPM|=ygJUIHDDe4A<;Vh1~>YTbM&fpe;L@P^M1x6(b5fB3%4eixVeWqi(w+>GlX0 zelPfe3V>n7;u~V^MYIf1Jji?0JzRg0RdJX$TCFU%sn%*Wx850wcjRBlL}RTlG~O|q zI+Cd$@s6pUd{qT@KUFk*tHu~035YZ^-YUpQiG{(^L<;O>ZmIOv7&V!5d; z*FY}V`Y12%%tdhhR7t)ivb-XM%M!D^5otpthpPmgOq>>pbA4%#d9N<^-Vz(LEqC<% z1&me?NH_-=W%!n9K$IliBMnCDC?i|p={ zy5krEVqklrZW*T6%%I759oe9p)@}OBtfpVfRHBhgiE8D$L41{Rg(&DN6ggJxh|q}< z<$7S@vr-5&)!z|TF%n$pD5nx{R!Qb-*#9cA-rBwp6R)^=p&Z&i z``p6Y4IZBhE5*qSbxk?l-h%u*Qe=6L_zkZc+?1;jNz zwf~z{q3ZGjF0y)7#kOTyRl><+9(jr#>6YSS?loukWRT5~SuLZk7>=5fWVotN9Ld2{ z#?79lJ~mL2KDwhd151rzMGRHL1YOeL&?R1=kG4hU6FVV^95xCgGWC=^sKNSv>3UNZut^&OkFbD8u3Bo4I`2$D?WjJKgWXM>D(yn$YCl`CKX>V8JT8QnjU zRmt&?LarYJWi-${*`LpTajg5dSQ%54f&E zpeZIq8l<2SX3NqYYB&4Q+9a_05$du))Z!ZUwIopV(Ha7v292<{8p2Obw5wj);j(&E z!T&&Tq6F|r2fCd?*FRdT;Bd4_0VH_|gbAS{DQ!MlL-5GyR0sic>m#m_nTRpE$FeR7YmEU>F5JTyeNcxf zIY2r6jOEcI<4UtgaJg5jMRT)e}F>Rj%8dZMD zBvq>JHx_BL56H+TAcw${0o97`xqztcii)ag8rk1?GEF#=Rl`ute$a`bRO7~NHxQ={ z+J%^+8J>etoV3I>)B!hh6h|>Jpa}P+S|PE6a;EOYExA1WMlG3x4Yg@~ra!bv*k^{> zw$M#m(;Yk19gA!|0vRdKL!&mW!TUG$f>u`^sWxI|9v3x9GCqWKdL2PWXQSJOaQ;|E z(;XlYejty_h&eCt_C?rlK6#cKKZc0rT#Fvk3Wjh4k3%$z8Q#M;|CBI^BsDUz;) z>3zZcs3g1z{r@ptqCMra0~d;XP7e^R>X14QKB#E{;tt-OOO{=S)uXbNuUjAuRNdnL z6=t0wrYrGU>FiY1Iw+Dga^?~ml;oM*$wyIUE0nk?K5hGo$vsD=vO}h0mOC!@`Vb!= zUMSe-dX9p~wAh)KJey#u*jjqvhL%nqOEmyw7+1lPpVy9CQ7kauXLn7nJSAmd2?G3d+N_1ZDGj>5Ry)F=eARl%JgUn#m zAQL?_LGxB}_!H*Sl$X2`^r`JMlL_dV&#Z<7O6qBdt7rf%2OLH*fJr4LJsOs%G=eJ| zfrnyDx z7941$A|=8%#Obt^rO^c+egGrZsJI8*(!_%(l(3W|u;#W-#Z@%{Ln2m(B;?mfyNC>x zJWbojqn!~(s0s%`bF>)d$iNO`60gLW2H;3Q(SlR7;)JcO@GRL*+Az|YbOa(A)wR<6 zl(8;RFvPX7ghv{ZexoA;4SY#pOH<>c;c`@5+GDXCVW7dVNTyOmB@iM7a$DL-IAeI* zQc_k6m2EI-DpewsK*K+)=&(f_Y4+I?ZiGZe7Yr8};SgQvZklGcgd4HAnMv^vJ=pO~ z#YznOB|Tjhl{bx8kKr*P1;rnoMr^17(K6VZoJJqDT*#v(JrashQgx7Ybr#2i7-e)C z380KueJ>{4E`+9YR2m_(Ob7k%Lk9}^h&ejvg#O2}5P;@-h6SnkXsii(nQNf)l4m7y z0n*g+C45dGg0LY03IofHT+p*}ByK_qE(q&~CtC8L+S=RU56+jM#ZMC?+S@_9_3Xtz zd7`u$8lWrna`7-4s0UI;6Hy_=fd*T1v(mTX`l&5_>*>D&NI1waAPI|n$k6pE7({Ye zn&G{qr`w34$oGJ(g(iHfBw5vWQ&qe1bTl!tReK6u9*oRRf0@8Dxp& z4q8`nVdZg5{905t)(lk~mqfRfgHkFD7b=N6gcLMnz~bMHZ_`5>LTJ;2ni*FF|~pe zT`DI^zN*d1W`-cUDi$i4Ctz-Lgti4$w5X~~5Lao=E1^cYHSn%a%@UdRvc5 zgAgzUu<1pyr`yzoWhSNPToL?w)L8NYpXsHh75v?nX4nBl?vy2U+O<@B9b!k0W|s{z zUPIGG8_>}-wG7YKxXWoG(^BZN1B)6I-N0r2D1yDT=~+&5?UqKDEtp|k&^xN@!BUzT znT=;Tg-s68Whc2ms`Y}(ZNB)X7aq-uBd=N-XAVcygW4uY?5Y|LEjS7w2y{%ep62$m zn(70!y4~a#>YRw?zK~@hkGv0BYT~!>g*0EVg)gMpezm?(Ut7U>mC*Pml=Stv*+*VB zu>N=ZalQ|rdLC|_zFt3ZS%<<&qu#g+NDdx8 zT^^VJ*7@tVbuiastZEB3WlV|x_N|i+Jt=ul0!-k;*eu93p+jwc-=w--t$owv&Py-8 zT3t+)bL)08PY5xp5sk9HGnD1{OH*?)puBDk?$&(TH0bwwF{8X_~73$EK6!1*k zqRV`*34?+dh{71-Kf((kFU6*NJs?|giO+TQeK;`eNG_30#b4N<(Cxj7-w7I?`VuZv z@><(xZlX2}bi)iVGh5hZwYC_XiR4Z|dMkpRu&_5P)HAKL){vV!oSC&*>kAyt;nzq2 zcPM!3sBa$yQ~*s3`{92E)LDd10|bzetE9^rQE#k}tC0JTG&Rlhwd52Gzc;Q8#2S*=c!cvvu>;N+^X&y#qe_dPgUcA_jv~A*z)p-TDVNp~=-So4f8$*04aaEfVr=nWZ zdyeX7J*$xRFU(Q=R+PWZiwSfhgTe+jyUkZ2kxrok(jssEBf`wq0}~=@n+R4~WMsHK z3C$SC5^jco3PnMjoWkml*g;SC0#f!>bAa19jgTk*O5I%WEMnBVi!Ikr>ZOhbIXUg^ z>Ewiqy5&R3SNd()KFyz&{B@QiEXo`5^q{|9)E&syXweY9Rc1B>g8_6&^C{=RMz46L z8r}(Yv=;=*M|ege(wGI~22h09bkvGFrs0gFPK2Shyu9jx_hbcP(t0PddI?|y_#6cA z!BW|#381+Gg{k$12-`qB9f`n=lu*LfNZENiykdtBkq6b|3f{u@_SxRTxt`w{^*dy8 zH#J*Y6yS#8p`sD`HA9YhqVtTPw5TEqaR!}v-0CiMIA_S;iQ~>zq!OG-EX5|3jnX1% zyniJ1OKUb#vv{egqY$}DfLMX{RxngCi%YD@w0flqK{pi!eaPW_Fc+zsyQC&h9io6~ z6k9s*CJ`GZY$Aet&FL+vQ?b@AZterAKX2q8NS%@+|3DpsytyHyF6@!_ppI~Ct_O82 zyXHPnM;JBtfs}uB)9-rekCYI965t2|DCzHnW+G`@xC$Vxgw#xcQ|$m2sLZG0 z;#5;%!U7`?Qp9z*lmc!ILlk2pBQkEcQrTfri`t?-o9f__vt8YB)7rcZzmV>jS|8wQ zp!MdaBZYq~o{}LUlf#)7FEpqs4=64|3x#J?URQ~#RY4IfrvKDg8O_X)D1*8J*iZ1Z zq0+<>yJd;_ z`&A;GzJ^X8#~v}`WL{M#b)QvrCo%HWoI60bZ{Cel^|AK$bf#*JZJ_T4RsvXd6oT7S z@3jmpTq(vI?&tI-sZ$rkydUW6%R`&4`tnC>hvP;1Q9J*Hyd zpdJfzVK}|cDh0?q)~0-mXz!JboIU!yLRi&g^MkL@gQlI`qqE0PSm=d?fR0CAxfaH{ z-%Oq(>s(P&P1X<&+X?S)BN8KUO+5Un&Y*{08h5*HluAd@X+17=isNIe{-SjnOW zxt^sEG&BdSmIaDcN1(8&Qp>2()){h$gSXBQIfc6X`&_Y4makw+d{UCM&@c>}@Dml! z>nwD0qSLN3S7SL+3TH4V&x1OLBm>g06R3U~PhWyFT_;VBJPWMOn4AP$4`!SMD4OiS zkRFJ^Yh9-Y6uvNAQw>6V=>fbE%^E8$Ycnk?GcDhKEnj{u-+gtizUIzS=F6=m5S#o$ zozvLl7g}D)4C>dyC|Xvg)Rq-nwdD<|w!9&k3-HLW`H&>&irvJ_Og!v)-r%om}`4hQ*{YBjLr zz}l3tT#()G#9CcJXGuIM|3qI@rZ*MRtHr9nV4WYKB8lRj3th2*MThC z@mMk$@cW34#iEQk1>royh#m4N62_rQ@WxRF?eO7Hs*xgG6-6ti8y*J$0{Aw751Vs<#oUI~kf#ZDKTv@#X&DEzB{xw%dLI~P1MEsc@FjbO&m zd8BZ4fm79cONAvyFEG^QRoPlglLD~OepA(^m@E@;Z;wQix3}*ve-#Qw#c^;l&&M}P3S-r6H?6CS3pa{ zc`Gov!yi;^s!)W)4mCdvSe_EbkBU@SGVcAMgii&zolrTN!%zD1dwOIk-GMM5@;)^3 zNECzGx=Li$WD9f#RQjv3#;W){r1Lc+uN+Fk49Q?g0vxG(iW!i<1Kn7fkdZ;$lVOiV zKTKDpATn$)v0z9IQ$*a@_rvlc7Yawt5F`%dGs#UmU>l6Zd^i?F#%LAr(UNgwCx>S# z^aJ?@A5s`c{0HjCYO00aeMYfm5N%W#w+lz1 z1#P$QR>DyY8%@2|BWu*wNj=lZfa8$+e!%H&ZlqcCWn`^}x&j|67CXdzkQHaK=7vL6 zQ;+P(TBQV6pg=ytB?Et=p8;MQx0-s?hibK&<|#>XPhFIAB;X=*B{uXRs_KG#k^Dq| zQ7J02Aq0rRHz?1e1QZby`bLv$)4CTi_1BK}h%=w5p746pj;aVtL_@Vf&$trtQO_Zuo`?x!stz?_ra{&3?w~}=PBy}Jf<+$YEb&K6Fswe!CWuw z(4^FAAalla9#H?uObso(1DL^SS*9`V0mML|8=?ppP()_*H)GlZo2%Iol^$Hd+h-*J zow4nK9l%;@J6zlF6Qm~4nD#(ONEtUO1Sqq#26gx2p zl;iGP8fy_K6m}4V(NHT>_P4>w9GyLh7aS5|_#Hwdm1LF}`#mWbdtg|%1U(%j=uO-0 z^{lGqRE89nQqxLl?h6_8t>!1H%knI0iyDR3-6D zi<wbmJG3FwQz4M9Ihw^Sxr4TUbxUd1u}q_$(Gx~#Seo2&kWL=C^-&13 zc9uLcRBO%6U79e>SiHa_dzpL%)e6m&>#x#d3h@m*u+=>tz!4`MlGXoSK&+A}BkG;a z=C@VH8pwF)P%c!bZXCRnm00@_Q)rt>hHn-Be_D7w)p>}z$~`fJa#Yu8p~1@|v+ac+ zgN+nXzb{tN76B?5#3dVSq*3h~+uBtfxYE(z!$5(KS_+m?ZWDSM1CE*q3LXPu{e)k5 z$+lU;Y^Ks^04I;&7;-h#SPu6(g5XcXdn)X65?H~FK?${r|97E^tt z#29i94`SL(Na$)Y?HiuY6-AtjL?$Km`EVI7-m^=!cMwvsm#MT604YeT_AE2KvqKls zH!K22Q$jywuv%t%M^=q*!+8?Yx zHy0H?C`B1A5+ruvBJs~|Z%=1uE`$$Od_Jbku1Xn3s=-qjBQXnF`+PBfbd>9WouALU zdQ5>q_$hVGH$pvuBP5x3HneCtAYG~&!!cOw$jyT-jaPIX_0NC^8Xgo2MJtuamO>#G z3JVZ@F`;)h9Mcxs!+>wO(5!()7E>`-%)c0~BMSw<>x*VK1_`PHEicgzkG}q!8{2%PKt%VBIWS7&!U&_Zj>pA@(@}GheLG5R;YM?~6fG!ZT`t8W?l@X)3Ev%MH-H;@rl}-n zc$C`mJs{`;5<-<|%QHrGTp<-!H9c^M)(|-j5=lBrMnDAkWv)tUJk>+6y zb!qgww$+ALzeBM}&-C4ZFco;YMBokY8!i`l>L_gsOcdNf2nH6MZwj-?cK|G=@a4N>YBtxPgMN#{=(*CO-Uzc~zk#qf%d?Th!#Kt`#$A z4w?r-DhUuWt(|7E`7u;6J4L0`)T^VZHJ1jpOcdQnmt2%0N_?5a$rP{o;emT;@R|>d z9N9Q$zz`ECS6oYG+Dbi<3)_xKaxiUAq&$Sw`w1+E92ZcJRK#=Jv#6$te+cd&L$fTZ zr{P9%l|<8Q_=OBfRqG3QnKUga$efO|;R281-Z{W46r->z&vr>49t*DxWX=Ja66iYN z;gJ)NCf^^79D z!I2O*`-mCS8+^OHT}b7AdG-VEc0hPBRiSkqcP`g=a;;dYDq0oluLed`E4x);TB$jT zxwV46Vo6p|BIHT%-g2VQaIEao8ph11!%x?2_9`6Wz8W|`Xsa;GE4W>}m^fVKBWoyc zGu~&kqme2<8I5<%Pat}SGmj%KW7)(GTP$U&mF9sH8LnMz6oSyCQg#UP1x55G4y z$S`Ugic-r~5Q?JABN~*5+>)$BjY+5gl+@ij{NA`!`Ng~H!6P9Y`XlX40OA1-7;s29 zM>Kf2MmDI>=T-}Y$WW0wAXi8DnMff3sl%29D%v9mKElt$ATME6aKUtuhwr3wBVw(R z?`4V5DG#~JMKjetGLz_eQD6oFN>UqC^tK>Z(wr3bBSl&Dg2a2xr_qYEkMD;eTHZEtASd zAndFl4P&?Rc{BMuPLzB%-H{Ljm`?COm>#}%c551vm(ivnssx!bu}yOh@&e4D-Maya z2!~)lPH$C98pz3K8Hz~mSFq4@&w&?MX}TF***^&Sdh=0OyP?G-*E*K42}m!r1gJyXY6Oqv^c>Pox8g0rRiL*Fl8&0>kAU_X(sqXIM9ldCu$ctxt z-SedTbb1fItc7#gNqA5zb+E+xlO+sXIsqkV797Slhz`?s09rKJoNW$jPOfKrd##FG z-Pi){?O8Fn$?strqQ7!!4lKz{U~;A5ab*r z9Y20n4r{1(2f7xFd^cG2e3w;xgL>8}2Bf#F0& z;y3u*XD7d}zA_W=Rouk`GxNpXPEX=Ob^e0B2FDmZK)X(oYN zswL!LF4fV_$#?a2qUHDVQWpC1Qwifs`cU}p~j=y0+{CgPKV4wnFy zBm1b-DeI1Vpl24#7HVnGkQm#lWW$hmh5-4I3uK|9f+Qnh3aE>M6R)}X zTCB3v7;TfEsHiM8KEZ_P#ZoB!5ms+c9-G4|EEMNmGiEQ`hhIhBZ>5Tyq%DOqOyqQF zR0)q1gA8@-8_gK0v(>-l4n%ISg$mz34 z<_@ERC@-#>Lf+;C|4XhhpWExBA|ZbJtQB1q$-Nw){~qQ=K`>|J5rVc9_h4Ea2c4}8G#{j832iF{q*;c9PB zwiGEua!(;=hS*bsE!jF1%Yu-a;;;%t&^(hen5?y%LP;96{h0!V;rnmsVKq+N#V55I zeg~cO8eqP(hHh?7u;7OVMlT!MXF~|Nwh!iBb5xFAJbCJ^WSFr_f>MfK`M^DIenZ%1QuXrL; zH{^`P&-H`)q>fl|T@cB@3Fo5kQc88P*I!dD_KW;uj4zH1ozY2kwTUD{ z`Vo=^Sc!Br>I|7EL#)r>-Xy)OW($yqxxJm#_=sD0de2c}8B0C$^F8hDrF<7wVzD!d zr01MpL|3bS=r%Yd_#W9d7{Ru!R_a$Y>b5qR9H+0)35u+c5bl$1P0*AC4yx6}N<@xW zv#UeZf`KG9L#y?;G!t`$^;$k?aO1l073O$R?V5i}gND}A8_6!^a;yRP!YYOUU8j#QY z7Ng%jZ2G8Cka~tHT5zg3kKy<&I3A#$fHcm8SW`=+s-1*qsu(r|KP@2@vN{%DiG$+~ zeWZSHwBq#FS@Ku01q?yV!E8Ik^Yu6gs1FBc2DOQVm=oa?AzrDcRuQjO66jF%8J&3$ z0qJg1?OqC3fTZY*a^e*C$QU~uKOt~9fN{`P*r_61=c88gP5MNe7!;N$07E1Xa#ybO zG?lzYpDJM=V|F6((_R@u?(rc3=k@K#BBfu))=%!6TKyR6L#gG%r(75~%+LxII5+~9 zsNXy#&=O0~wm=L4S2g!Z9QyEM2*wdFY1c`prsO%OC^}eHy_tISnS$4w%EhD%$Drj5 zsahy6!kNi$#6n_l$iI~HM(H?_i4#(BK=+bNw9#+YgrZ2tXBb)rS>7oSX!M(fnZqM@ z7|;uei17TR29FiF0JQ}8*MOf$#NK6!I~+xDAVz{6B-8Y3T^!QdX#9yx&2HfnnVwzi z6AkoiB>@m8cMaMV`Y{@2FTWv`3?m&I3`H5_J%O;W9FSHDJlIA7u=@sUK)-Yfl` zlo4@{gcAV#u>=X8FEZ=1+AsaG6(vny$`P3S9?4<@MS?cZ5p|O!Ij@{t&}%x?H%%Cc z2s#J84y$(rmdmtM=sI!5X_-Ze9L9lT;;17>1AmTcOBSBN4a3G_)WTHv2WlI9b7JC6pZXH9HIjig>}gRV~1#I@K6WLu^(HIdYZaN<_zBZ)V`>q zZcKO>2fQV4gf>(;=x3=)4e@k6t@tMVH%-g8OvPA+ z#v|pM@GYZYx*F1lq_Vp zR0o9izj#0;fS^L3fhthJrGVTHAUw6X-uDEse$bcbBN#N z3UX{2TqoTpNDieF2m(8ZMA}W0>$FTug8wavLJhV-lWeE7gi6KToO#)W=b}3OiipBq6?aE7_Gt2X zy5krIJT~z7K%z!{*^~-wkRhEs?dMUrD%Thu0%FN$*N>l`KnD@F4m)79ATm zpL9A7o+Jm%e&%(d>WM~DDzysmX6S-+xH(~E4ci{5Zj~4d47?a1EUMD!BL@HSvrmo_QUep>FME{+$4H7G~(@ut;Dyc*)#~ z;vsef6}A=XeNuE!i9K>?hI^o@dmei}3Jm@%XmiQTNzj{QaaIEg2jyzCf}5=Iu`1l4 z%+V4DWe{j`q$E)AKEV`$yBo?)&r;L#PN8Ssg zo`0*kUYMgmc&exmh#Vb;3@o9l(uz>lk`NhEg&7Q2LG zCQ0OLMg9-O&G-NAeuOCx>?ZcuS?X9MF9R7zu5}@_ATNo|nM962ZG<*e0TW!PX4K%a zkpf)Jxk-eyqE~Spi@av>Gjp*b+3)Ti>SOKgwQhrfPy@)u1Zky%YOO*U+O(s@YF(CA z0MsKtxoSQ6ArR+g5)>0k=+N^t_E&JzItCmIvf{QNn&dF#TG)#kHSl1;CeQ~@ec&YE z=79)vRUvpPN>LDF7bc28S>w6Ic|j4uC;_50ct=zMr}`9-F&iTCAO+VAo0CP5(pegS zM(Sxgid(^p)!Hnq^zeyI6g?n7PDv5p#yRaa40(#JP-sxy31nh%@N_VO zZfJ-Q2s&~)s9;B}9Ex0MP6f0!)QkudQSguuRUC-XN}G|DBhs=FQql|&vlM!=v=Bpu z!UiHwLV;SQ0umdd0~Nqfvvoo|EIb#_txBBDH_}o)m9Jz8UTVs{+6Tu3o$@Hi4n2(z zuoChiqj_tu-gPSgK&fRi7_@$X%*99y2;|BTK$RrjJM#PHiP=k&y&cDa4M7K(LPZ5& z^3s}ZIo(~g2E?cn=Kuv*7Ql|u-af0)(y9Yh7W~T36MydWWFN>1^G!t5CtU zup;%Gea#J|LMt}%Ug-5S-zIxePort_6RmHpO4@Y`bJ6;WRA^vE-V3AklUm7{ZlM>g zAF~Q0Obfke-8wW{UsSX8Gh(*BsAlT}v06W=R=tz@Kl8;+Y#$=vXbe!ylQ09uhuWzo z$=M0|cr=u>zy!N(OPIbVj+i$<=u>MEESuJ_t@JS8zvF%jyRDjK>3K>+? zKD65#zS2&}BM2x%fX80Y^9I`m^ZMEqrM)12?b&`T8&#J^quSDFR9_m68cU;5b7?ec zEsaL)rO~LfG#Yi6LZcXRV=s~LI4*@omxe?F^tBX5x-=vbu&HdMBH6mo6_vd7PFAXJ z=H&Oue{o&Oe-R0;nj?OD_@v`^-)GkNapT&u|BY+gxoz>EvcGL>JK!thD}UHk{%+T{ z32iI1Ezj>)#=mmhiMKY#Y-akoG8i=TY&T=5_kd0>HYMS?PT0X^cuE0^E=%MX3& zV_QFW&?awOvF%!q@3gCU5T0mTMaQ5%HVI>@Q*LWpS9VZjY2_C76y_Iu$tcPR$5Q!U zPj7ryaMD+|`QvKO%r1NWq2dENTsfp%0lCDhYPq7NyT?ymW$X7h|M;~=N3{P3>)dkf zrsBac@F^?-I5WV>2U>{-?^@|s@pDfv|MX4w&Fx(Iwm+`()BVMR038)GgiOQM-GKZh z9z1K+!=~-`#CE^=?iwFleD>25|NM>p#Dge>!mDk<cE|Ji4WFA9zW3sJPhaui0pbk+(%>H{G-1Vx zt9UVQtXFILrQ5cA{+!iL-tpictaG|@&xdc#TW5jzf<@*yH7-4>oI4sRe|%w*Sh_GO zQCO_J;+0!olHbsI_ra&P+gH*3bV`Uu>S?6X_!=9QhE|xD@9NB#d$&30{0TpJcJ2lDJ-FHOv(A2AJZ;;uCwl*)MHip4&k?5{G2s%~d%^5PMwNlLn6l44yXxIZYprtax1KrkSF7E8 z$3q+JSf24t+c>_f+8WfH;B3g%f{&eUteB=>mc5NHpX8tV)cBXzcx$~&Pd(yN@nLG5 zQY3^;rNJYwL~Pf#yhtVC3~U7>^#~R>;s`MR%^Mq zdqMe(bJqCanN`2@+t;Jj-`sfNJrl&UBmk3$s|0xbO^9sd-jn6K%R8-c(jPDEdn$MH zY6m{@@BPYail>Q`z*9q7GihYDX^7QX9zIjA{FQC*+hniz|McX7?``zlowu(vS$|Rn{l_16%unYW@~_oiKTLL67Z@cgG!2MpNK56}sldyi zz$rlYD=V>-r|$T@ceQh`yZGhDZ=UkY>GxeP-V?h7OGNQwYGoU?IBu)w7FSofzs(PndGp8E21c|M0-;Cn$gH-5)#{9(e64dw=ThvtQo&u`}D+XvrmnMqWJ`vDlQl zm9^AMTm}z)J}Q>~{tM^GSL`!p?y~izkIpJ=@Ci98Ck7yh#377KX>+j$CyNg9+5$vX zp?vPla~6#|XZ^!3e0J_LYd-z3CtlLvd}1vl2!LXpdfvRW{Gy)uQTf+Xp84#XS0DGw zhrW0F77Gh2oFN|84cOgulVT`=XInzZwyjQeKA%)(z8}ScJvUz}U%v5zdv-Xz*z@5= z-`w-!U9Nsoycz@DR)auMssG_hHoO_^t)jcnItKIO(1!5k2 z_9g{yNug3Do_nfS&HxPk003>mbkwPf z#pa)yy^uBZ;D+yR_?2yX4me}}D;=Mie&?OCA?TP?v9S%ZfelAAG*QePq$~Nb{MFaa zoBF^OpSk<~o)7b1j(+osXo(mj5(>(79{~y@fOtdlc8JL+Z*b^!Z_fF{Dp%Zc>SO;} z@7W*iDBiGCO7_}7p&&~OxEFY1#Zta|5$=lePaiySjcx9|_kiENaf)^ReQU{uQAvKW zxg7%nRups>3$vma3qiQ@_V>Pe%x$|o?401-^w@Xan7@bkzD?e^VTG|CN0A-sV(e4W z=d+=&#Lc?qTmRVQ`6qsSi+l6eE)+vI0M~h9lW~`DV8uXI>?FCBxNiC2uYW36x?}qp zvv<4xl=k(meO)wTQq+Ny>B0kN*rdVp{2JApEZ5})g`Q%$bgy52@x-^jH0S&0^*wRd zhZE(#hR};`1C=sIAq>O@ohsg~B4{taAKws7dH-x>(wo|oC+~X5tD;RP>QpEeb?%)I zi6W$wY*Q{z!q_ZiOL^**Up?oEzwUhUKYsjHpuIBlD{|T`)AKA(a|C}KCzp5Ett{>0 zcXJ`M0OjY8-R72c)_QH{PksA~SMIjX?owYc$qWY^?fX>xqE@LmzuAD(!fV2@we?Qd-G0(ZH@_Zz@{P-rp7`3I_no=-|NZi;$Bw>h%loC`17QH- zB?`&;r4oo8^2$VBagsOIe)#u4UiX4u-hO%aIYQt$KX;D%_a`2hzvf<3|JEg^Kh`w^b^@r;1I>#yo|iMQSnwq?@b34n-s9>w z&Qb2YY_p?w{Nw|!cvl043tI-+#?bk|O~Jd96KVwtdJ66EgYMtI^WdqScRhK}Is4nk z-X;Z^1wUF$SeJ@Pg!D~uR4Om^mGYhCOEvGEXTJ3E^oei1pglEj=31g9m}d;`4s=RE zs-}uwPJ~S*CtfI)*FN#tXSUpY{{7EfyX6OayzlKM-tge_7wRW8H`VV&9zx&^!DL}r!6D&J~yPQz9XsYrOoN)8YpIiI2-m5QryZhc*8(#DI8+P77 zyu?TxGA?~jL06!hCNHfjMua>UU{`sk|nHT>>iW+!oe4XSh zO*ceIZL#g9W&;a4yzcI(v;4`ul{RJWS@++4$@+Wz@cLV)hz3I{aI@Rlfx5-qi1WF8 zu@kLl%iZ_<{EF+ePkB6d@YHcX`P4%3Fl-gnTMkv<(z(~91~VyZB;Qkh-@osqo7Q>k zA5UHJ{$YPUXV%8z6^f%NHaZE(%hU}q5K-e^oN(k-2cD{&_pNj9KW#mA^GCPP#Dk=| zdsaY+Lx9;T=mk2mTxZX`^1inockl9ChkcLv=C^

N z8d*vu!N*7oDmuVg;cl1=6Zj{YsAHzw<}_ zbDzF{_w~HG+THv9aq3j@q7y>{8dBxez#gI+2ut_!_}n!MKXb$%uX%ajr#8vW-r~D= z$`&-wqfmxLu@FOmSkRd7TItg#{q(I14tagm=f5*9xBqc-wiORztHnamaWt26>xkXG zTo)VX$7j6u!wbLn*8@I%_r?ouJ^$vj#j{8$IHfQ-;oU@fi48qjPJVXVtaiuQ*PZ+4 zuB-O=irfCxmv-~SLG@JA06Gq5kf1qp#f7+Hk@<{DT3LDGrK|QoDtLd3m5P@fdBa}v z0)+?F<-A!)#t@4_9PBlVq+ocRxsINm`JkNU<+-dEl~@1Qk;go^=0V0b7w+Eq>pORU zNc2!w3^x!qYV7JZL@d0#LI+$4h4OdKdga)U|8d?;TdcqScV0i`q20yPIQ7Bun~Yjh zB2^a({fekgflzL@x=+3L*7&v^fBewC%9}6#=2$s?68@tIf?28`c*z|!Iek7^vOn(f z+s{w=X6cjzCVuk#b3Z)hDDjdRLf|1N3#fIY%av%G*wZbna@gO>ADeXIMYq2<`TDPZ z`Rg}7IevwI$U)eYI3i;`bl}(zba60NDfKLj3OUd|3#imk-eI?wqFr|U#_6A&zSrUB zt$l%1^^u054fiCOM4WA@c#QAR%E!I7*;-#3|NgyCp7GnquXy8{^F#xpqzO!Cm~58# zpO~dd$vR50zUMzD|K-_JuPg2N!h~?a4J&UgUU4Y2g`f$Y$RzV27I(o)GT}ogD0kd? z&Rw(CyX^+M_g zmAAR}rmwEI*ZtT3x;XE;wWm+`k9Zj85`02{rO2njwIXivmDq1W3!Pv7?hPk?`JY{% z-sqv9^*N`Wy73|61uU#UAsYl52y&j}rkm95l~AX1CGNa`{AlCzH~RjMcUt}Qg&Y3v z=Os(NqKmX0k;vvcgo&iOhs5YE7CXyNeDL=4iOVhj+^7Gs=(3MTx-=&#;H+}h1sn|2 zAZf>~oIal`E-IFd89)2OUZ*PeU;6bc`t(x{`HpDAp?(TN5-}MB5yhn#$13P&5oal> z-d)~k>(zIB?&kL=?f%I-SA68tNA4uvGGHN85Y1KukrRdzZ>`zytz5CgBO9tbd7m$= zJbl~(`;u7?ZuR=jzr0Mmj9S8dL5>Salo&rk6i&&ynJT0|y6yV5KmG8hf8X)L2QPhO z<|(~GL~!0Uwuuhghp1mI?v9oGd@1hq<`v6F|LDw_Xa4ENGsi!&+~MoL|Gl$hCxIza zW=W$`O&~bPcwq&Jge$+g&7Y5)w%z9EUg$5s`Ifg${h4?g%f-R0K-^NV*^#S1Il;}P zM$d`gy8Za_j=wy%bHd6Gci;E=yHZIe4Jkm{!ndH4$0o$kD%nuD`TeN;@@rpu^wq6@ zxZl|e!voGc@9+N-O@(mxm>B#DT+M+dcjg4)onaenu;rUSdiO7zEceRu?;N#X`JBIq z$0LQ_w{=pc;~pUZ}zM6-h5HCfd)&S4=0gJmJBx`dL}H4{NDNb@{#**y~eNIjqdxz z4qtiY+4Jw4Cmy%`5OIr!1NALNh1e|16>(f$bH`pQU$*O08(+1@3(w?_zjlUrRtTn$ zZd2S$jUbxk+0_z~u7EnhU{{M2nJ=&UrDxyS_!k?lcIH;w&3NpPYvjNqfUh_&LQ1Z1 zyfmRGPrxfz!WFf(bI%Qv3eUXIrd@U6A7*t)P24rnyGVCMG8l0vCv~cH!QmoE>8r{U zw|!x~Lzg>gx0lyA!qe`1>qODP0JB}inp9OU2=J`X%;e;~gb}nH%)9=K;`tLce{!G0 zANtp~XKQBDe`}1p`I!TIPIBzI5jwrQoTKT>ZViSV` z_e1OzOXd6f&N~10=eD+Pz3iH!f(~77FH)P>VKz)+sC!(#$l!~Xvz<-8ciVBF{O+FL z+U?aJe$aNNTpK9GbsP^|Yc~E;F^UP&Q>v90KJ?NTpU^j7@%$$q-SUH<&6p@2*9-_1 zI7w(>03vPi_@pj4)N=Evr&BCXxcC<57i(O7=}uqR`-j(W^Le?33Z-ixA9F>HogXRU zI4v(;DgW-7V?Qx}i$7fO%F8d_bo|lIBjWo$x+x|E9ihx01e83yBDm4OL%hGa_l6HF z+_S?nKL3mGrhQ*{T0GB0`ZUfy_HMC$9E)S(Hn?%Mvz zYv$cI^H&R}ZN9sA`Rsi}$6}XthO7!2K~dOCNbOX|O6AB;_nm&-uHTIR^|>9l(RRM~ z)17j{5H=`qC{5_}aUf=Q)#O62x`*a}<9nSSK6=OcZ*95fKPSxjt<-@07;hS0Rm3TG zyC+^;A>Z2_mCAcwcj~pF{^ifQ`~CH%_5QH8yis7a)>J4^sr|zq48?Ju;Ik-}QI3sm z#s&9(WkS6EH$QvX@dy7v&anZ1mPXx2(=`m-XksXdFv%5qdP>Fe8>ib3Jh#ndQ!hK> ztrM&XJDn_tVsqEou?@SQ0olFi(L|}i$-DF?$K+04^@)Xl+hC2{8mG*;QQBuQt{*G{ zToM~_#ZqgnE*=(L0N| z-l!|4Y)+eo;K~B6CS$g%l4G{a_2*wiHA;cp$3ED$F{etDj2Z}9C~u9~sOdz=6G-0nX} zZJ0=kW3pKx7K}K`LPjj_7fq);{>RD>KJ(;ye>P6JeeU|NEhk;}1_bMtOI1i5brg}5 z*KhiLuB>?ludBSbdfMw7-}%Lr7QFx5Ex%muc}H~1gd30>g*XYkLa?aQ#zdU)J#k!Q zBmC$u4~;u@&&k(cv*^fGCY}FO>K}{>!-zatD+293a-FxeF#{`%*)SS^`6ZyI6k?B30Vjt z``8nP51KD)n~o@u`q=s#oLSs|+qTV)IK=6@?GwjJjnZdB!hajH#u)rk)~uRM^P=Jc zj{=loIk)+i=SQm_{NxqmE;wM^%}3rLI*HC|`dk~NNIF~|VkfPV&0n8CKU!4Y=Z019 z`O&%)?mq5|m+$$NnSc0sGBo_xBv(R~>}#g%<5c15@9M*7Of`(_p5488({`8L^!Hn| z)1UOdw7SqRh#ct}?1QeTuBb@sdIi6yQ0ypsYu@>@ci))y)ON@IXRVz!eQ>2@k?^~b zoB_Q&^c&KzGFd*IHL>FpA6#AfaJ$1F-13v}bU%2<5uyn{*10h7kHqv#(}bEiiIkMY zKU^$-;et<`cJu3}pT60~5AU_f?9c169S6^~&!tBBaf*pZCto@T2}@*>;#L0a1nbw< zX@{<{dhyr|p1<#+Q^mWG1VI->!h|CTT;%>+Eqxb`zOHqAtizxu!5uef0CbJks9 z;RkQ+d6E>dTnj!%D8!|xDU{Hpqbp@|SdMSCZais?V5^=Zd)B(;?3bn6LvgUrE$9X8 zm@F+vXn<3*HTFm`AP!J2Ejr}%Uv~#j@3!gHTX(!?j}u+QGK@p2BKY`DalVO$Rt@?J z3s87)E8sxujOLeL*lnwQe=+%h^G~>A(b|X1{>e8ZF;H z=U4Z=x7l)kd-vr1uAXzxRnn~Xp>o8>uE%&C@HdGoa+RR4sF#Fyw1O@)o#j5Z;NF!k z+V%OZ{mu)Xd-Kr56-I4#s9O=mK;?k4@zzA4ttHmw_paLX)@fJ1`mdQiAH4L?;WMST z!lD#>E@x#NIhoT@ZRU9K zJZBAc4Q>tto?b<3weJ>`Y#=l)h4DHG04;s7=ZqJ#A&WW>rrZ(kgFg0Qw& zetWYAPn>n^W{*9&#}!>2j~=kP=&C}cJREu86UiyErL%tJ81v9!UAx&pQ&u{5j(*i^ zdu{RJ+#`-$WBi)p9YQqB2YNF6b@=I|PLsWZzt;Nnmv{We(Z_Fi+6yOqdg?uoTqs_N zJY}Uen0LYjhhFsjW8y)G5Jh?vobcFer16LeNLvw~FQ0bu zD?9pM{P?-!uYd9T6Azp#Zy1q_hUw*E;8_@ltnIj0owW`;W5%}1u6sYT?)M+r_O-G! zAYe`UFA7F~bhwEedG;WLjNFP1@}?jS7iuz*7s1(zzl zSYDiz^4I-ueBb-)#p~yne`(gk>wV!VIWZAhBneQct@zMGq3o@k9IFlwM{N20AAW1b zqUaXmq`$XccGfP3t|#Y1*Mu%CAQoKNp14aV_4Y21-d@KlU%BOPZ{MSI%G6nR+*|n7 zo?raEctv%Y7@!Q?*>IFg1zpC;@C7a^AGX~Aciene@Y(n5w|Ch1x|ij&P~=MIuF_Nw zr5nmP+NfMq;rzs@R_+ZR`hMY_kKc0il)vn}=B4v@7o*3Y;Y8R`cyCn_{p98la^25U z`La~L_sJ=buGaR6&u#ST7N>3c%7fBL0R_5=TbA&=OLRh-YAcIZcs`oPp7=`m;O{s1 zdC$$eYV$YTP`_U4qMk1JPjy3K$qi>0Q*+)vX~xzY z-L~m*fLG;oU>89k=UNICzwx^B_Uh?Ip*}NqYfusv-|QzYIQjC|pJ<=-{)4~!#I}b> zMTuw_+##5{o~a;lqY+5D}_opAmEx zi&dG(4icGiBGBW^U-iXr0y6|=lk2fBlcjei~OFhiMRfCYlp7hwGa{4CB$3NuFFP|L#VEXo(9WeQrzTuyQArn=x7OB?aaG`^i%?4qy9`Mqru65XbQYb`1_?Qt07b=a1cp0)6#C-nem7}lPdg6~R`s(lc{NH`=c^Q_} z2?FToGSJm&eki@kt4bM%vrW=$=b|Iax30PW{CBPmj@!BG+;MxKGX4Y6HEt0D#vnp; zz^Mqi(bBr?s(UzHG%{2nUj!nQMgz$+ATx{>`TxBl{{Tm^2F**NynER zrYlc=`?;HrKJJ-ly+__U;LrC<>)XW{g=tTvSuSo^s(CFtw-nMYC6`FCT=@RyX59Gh zgI{>*#5=oB{Q92TiLMdz1EvK)E0nb5LeOS2n!JkVUJUEJK4;F$FMaXxzwUC-xfkBJ zr*!K2gygYvY$)W3(kbG|jQ1Cmr@XMi&v)&->&7pRJI0^=^j0^DW-K$%70tlMi0%^x za;=3dOO@>}k9TiSk2#~`AJ?98^K9ikLrBcf1usG{4mva&CxN*3v;EbH`$XhUmplZ8 z=w|t$E_LqK=l);kAGe+L@asR?cQw%_AU}iq0N*-buf&&@U3&%Lr{24C+n$G9cj_Y@ z5BvMxbj$B&ig!XE_#XEMHTk>%#j|=k1VaGaM|k^6<)X9h#~1wlx^WLLEX3=cb%#XY zpempT5&$6C8DxN%%FOafjD!t7xaWjIH!Hli{~GD->(cQflQ)hAyr=>H^Pl6Ly6hyW!n-s z;r#OFKmE5wZ-4F4eSSM<(~@%gU!E5&!+=fP55@#8iZDU4W%FB%f?h6<`6`nffSV|k zSDN$d)lXSZ@BHfRr)_!pe$THjK0w+=U|{Kbu>px{AOyfN(+( z_0G3%zx$-e#Y-rRFx4xXZv>GJiyAMjR{c_1S^q&iIQ6vLybZU6JF1OyeYiD%q@X|AX*{gm1 zjefMk^b@bV!jyd%@gP=-(0ZuG|Btr!fRCz(`iAGs-MgEz$pw;d69_#7LX#2*O^_-m zAX3DFU^+n{kbr;%X$dX#-dm{B1W^PdEL}PX2uKkHq$AQbf$x9j?k2(VKJWAUd;`08 zcIHe!bLO;}3yLjh=!<{MPJejwS<|N*zusR0Z=fLY@3hy|YwZHzP?YpaFj!IMwiG*;< zw`oBH1Jlp*HmgC8W4qGt*A45jcv8Q_p59+C~=B*fGPHvxlgjcTmT1!>JHACWYyzu5X|LbvN@ zPV8yUrPqiD35tW4L#^si`72#~VK-@o62y8Vh}-4i-+M~h7brX{Fo7&Uw?wW#GBS+n7t#QRGwPxvCm z^<~drrzx!#WC0jN;~{b-!1pDFYxHbm?rqxjY|z?DU*9;s^8Ak_x;a}Y|bx0IynEc`)x#fxZ-_|N=)?RjF^6~{I-)((#;ZV*6sS^5Ws1YGcW4SR$<#6Y6 zCHK=S6)bz~kA4$BI$C1?Nk!seQ-ZbwRmIc-U!A}#mAA51voz>x`)sM}^wC>UtJ808 z2)*-)GEoB@9(WL5s#UE484`#|m+F=YkDG$q8sOXppVvAy zpfOb3w>OVcGIov>*UlAf-p(og*(ukYrWecStnSJ=z@y?N@vuX{28HW9n6L2c+-~_4 z7UaIJ2RYTw+#fXZ{NN=o)}4@eq#I|&QmFwQEgU`)>cl~iL{>8wF_a+#Dp5B}(|t|Z z_h;XK*|&e2h;5yH8!7?;pCSl`wIdTS98mCa)fk7~Zh^Dsy};1flY^J_tPoQ3^%vth zbB%B%gV$#i76M2SjQz-AhyQPKuVhz+lZO+(@!!!k_2oeQ=h@XOFgTRk(KW#7#>CXY zf5qSVCq=_olwaP`^+UXa(KYc~pSPxowhe#JoPYk_?~TuJHZarh%)*Pyuv$UAxE2R^ zD_E_oyB=>ZP<-sYuIWE4xOQ>nnx9rOd@M+4Tn&&=h#kOgWr}3hLa9c=-#>bE-r7NH z&WE>;tx%?(GA?4vO{j{y7hy8Rda|rdo(vv_>EVx+XT^%7q!Q=(t9&EAxG_>JwYj&n<)BEefV+2I;yLGW8B zAXnyLcL{}nUS3n59r~)#H&@oJDm9@*?X#+jc#|1Co}n6zuf~c#Wb|gYw!XMkI@Q%6 z=EGeDwth1_`egn3+Mt&ga1Oi#6zX1ff2_`L#b8F#9-q{gRS5@woo&t-)iiK%mv&e7 z{Q8|TDnL5`#D$?C5?Vmm;sEX;j*3HrIFk(bsp!7lT(8W1^KE(R^CtUhT#g+ysg9B% z;Hd)!63do-!@klKYl!^2yD>k7E~p0YXdXLrY11U$l&M$!ITZK1NOkiUDwUE}d@3j$MeN{5aso#xZ@kE`uC zZvuD+z%nI*V92Uvn*GMr7K^qm`Fv1D`<^p4Eo;A0vCuW}9zeX62FfB(3HbS-QMr6y zFCdF+n|fUc)GE9wXMENjRL9_ z3sori4lvnDU#)5Yr+)vzoT|=3BfEEexMEk;?;CaJ20^b4r<_`RA|kpb?Br;W8s&rp zkN?w#kopU+U9Ws;!)wKk1c^)US&|3btgFW1^aXnmE4jvpyMbKMsXbjEpPjJq_uf@g z#tfZ1aLWLjKWC}N`b_v^!4EJVWDjgS{TiLwE#~I+yN7K<(hr|IJL2&oZV}{VxPpV_ zhF=zl0EP%oHW8l=dvE*R8YLc=I&;2$RFJaV;lkP&m?)U!;vK^ZtMq84uIp5$=i}wS z53Z25xz>e?`==D(VqxJ*fc_#b0i>xmoGei6wx(Zn9+&dz#eTcnymB{ZCk%=GQvmh!)OxfTiQ=+=k))AYZPAeSY}ni*LTW*7vJb zS(^h7*fo?9%&UvkKEPZDFY_NM8Y@~1qLn#Zw6AHTK3*C??aL2 zdUmI3!7C$2t!+`E(vmwT8f0*bpbv?{o30aZI;kofc+sLV?ycFQrm!qCDP7(7{_xv@ zQe7Kv^!#>lts<%I_D%nJPPv)ya#;zux+k($Jf8=t4mpu&tL;O$H@I5Qb`AeYe6;({ zk=Z}?eA%v;+&XysGu-HK<5qQ?>ZrzK-vg=`!#{_%{NbV+ zJbr^Q-eSt!Gi*;x`MsD(`~f z?!M($`>+bEA3T-S3*6k!OB<70PT%)x^QaGsUo%FK>tn7T$CP5=I)~FM)nV~c=;iE= zH*l*<1=-EH@r>YB)vrI)2d(M8-oAaUVie&~4R6w#Rb$|vj;=D2INTnzuB{t7`q(>_ zYgeZICv{g=e(*L|!dLlL0}YIZ_yKCoZ7$&PxQ!nWAKQ=R>uI4OAwGvbO#kH7Zl}(! z9{z@E9UL+6YLKeneE3KjQz(ylEU6ct!|IyayN9dgm_N_|{$R}Y{k~iKZNRvVx?6I8*QM<1n>NLrEwOR&j#nGm+N;f`Iz|+()HwczjS%lF zMMZ_&r=Ys_Op3!1xc+eAa@G5-<;3^9Upx6=+=zy|Y=LW48zGfIuE9|h?B6hlB5M%4 zQ?vIQJTURtDz2#f5lg=g=>+qFTyb!dF-k2Jy}m6CVT(U zde;la_WQu?@#PZV`J*Nk-k0@B+&i2XFL=Yz17w0xp0OrhV{zaWHo8<- zQ0j+AUppDLqe%3J*C%bPS%$OKz`+18qR`yI-fNv8D#)ifQsDsAv#ZB-{Ea#Zg?~CQ z@1=?@!m~F_e)9vB6ONxX>)_I6=#JQ35EUAEIV~T2-#wYtw`4RZ0Jowa25a9a-U*se zNE?ui;7Jc<1S6O)JjJ@OaP<7Qx06Ig13RDK? zI^E{Fu^d!ulyNa)FcX)Zi-jcVA?>hU_*lfj_litMsW+yV&v;)2-udd}0(T;yAdAgA}R*V-A>8q0NL(Z1$cnBkoVFbbV9I zscDg^DcnR%9Ndne9Eyh@0kroZ$&ZbC#o}Lm^2dp}hZ;AjH|WfiVGM{3EDl77)tB&Y zt;vcr+Xu;T6S&>z#GNMzBc2Q&bmKu-^M!X97*=37VM0L)l{J*yJXm^kYHU)HtKQCM zlZLNseR+?4cUqM(VVMkFEgteATsPo`9gEeg)-Lb7U=+vt9Niq2{`$Me-pUReJK0uO zH8}>xFEB|kovIIu6+RaAit#tvYzcGZQh71_B=b z(3|z>fwK)DWVJ^WO72(ZZlk!Xr{+z4f1{E!qxg_4HW8R=tK(42^JpEN%98KKnd>%; z%XWOCJ-hTvpV8Bfah*86!e@SgHnHH-*(W`B=>ki@b*H)(op2odX=u52CrbGDo>TUh z*_;i$Uo@XXtrZ(r6Xpos|Md81wpn#8abeQc>)F+pk2@4oYSH%A3=Q{%IM8yaq2V%E z%QA?w@TSh;DAngQuYN1`PMx-`h52}geNS`ZTzE$Tyb|N8LDhgAS@~@SK9?((wVk}F z-qTH^`kcA5ebm4QAFW{uh6CL-;T!-xA&zY0-phP5!8>tR)_JDjcuLfoS=DGaqfa!~?M5y;06YA-m-g( z84VZ4D6b$NIJxujObm=`{)(J(9ZvqT#uhMZ;_aT__vC64YSzK&1T5589Mr|xVKh?1 zu(*C$;L1$AuyRbzv#~GVFMdPeU`@CU!`TfULUVCk1 z$BQ#2sJ3IjgqM0;G+bTr_Db%#GAc3x_J|+g>RSEqNxvoq=YKu0|EP$P3(`4H6bz(b z7IEM;62&XeD=*LdxLp0yONjH6hcBNoV@tx1>7Q~2*7f7K1k_b9yv19Gb~ppx`-qJw zx`*qr|CY7w17ntrXxXm&NdGj&!ooO!S61Uyc3`%k15)A!{MF$@*cT_vC&qPacqr5F z(vOA4%!n@funAWKu?&1P4h;i4En}x#ZCl*uk19LH-`M$~Z^=K5nO|*ZKpaAYM==~< zVX4MzeRw4O*gFwd6L;;O6bHUCD7;EymzUnzH{_i<DZ_TGj=Ak>O5Ix-gf zp%*dm>WA}dLec=&+ugrfH=u5}oBPwY$-DL@4$c*YD}>^~OJdAoVTWeoVerk2N=In< z)VRKR!=Hu4dNNBkESU6luYcP%SM*+|^fRXMC<8i91lV7inXvFYUW8uaSR~7nf994xB1^9vr-qO0b zwOyZi2l?MAT(IHqQ!nqVU!b$WIbn9FQxgY~VRYpCotP&G{##BD$q4loAGPYd@7ezD zsZYI*O~HK6_HM2m zXjBXQI4feJa8m)}gol;Mb7XO~f4|~@;qh1AYvyj+8TQ1MbpOb?-C@-i1@zT8PXZjs;Tg(4Jm_={CQmjTRE=|0 z{%+m1Ve_K)#q`TOQETS+6B!sz4>&Ra&q}Bvpfh5$v&TXU2wGjF#l;od9yZwfYJ;B! zy6kCc!tk2t*qVGa4k9}kEZ&|oyvh!kx8%a+PQxy2I#sAy!JZ?zTpakQ28A=YDJVkW zB874tEMww~h^yFVP2V{8VX1N-wMZ-O+hOw`3=j8A_D_w1n>6e@3jO`DM43V4V?^wx z5;S>5VDL9FA*)6oEY;Gu@HuCLUnabR;30tns!;L(U8PHoD{`#Vh41!ee|$f|+k9z> z;wxBh0t-MiNMv+0xLveIi|w1@+WT(my$y4XnL`3T+E=Qb|2j1$(73a01Ab880@cYG zTy>BFe&4kxdt-9LiPv8q^h%k>ox2_US+xNgP8=ky4cA}13OSDV){s2hPfSVf*IW5) zq<}ETyLS21uM`szb7{i5T18uK@1eX(;%mSU2;Q*JA%IDW;$@)F8mHZ3Q+S_MyWn0w zNAp^((o#gDvzZ&3bx-BGQ7g{N;rv3?7?@3zAGJd3=W=?``m;L6lh2O5xW4hbn>W7l z>LZ6jYpgw(GoY9R=>@Zjs)JPHc^kxWoU}S+y|?OK7~88!+{#Vc56;>&yMr1j zoNK_*GPpTbgAcUQ8!D1xEqlHpCJv{A^Yy;vgL$?O2ZUBRb?4PNq9LV2 zF^d!SD5HofqsIpxa>oYa0*KtaD7;yTV)1QtmUZ}Y%%teI2A6ew-(yU; zT5q@&1A5VDR-(X4uTI+PI8KL+dO#h0b*Df7eB$3)}xxCV0o*!AjJvhFe&m`iI65 zu4PalyF>&|qQZ+H)m3RZxTw&Xbp^?5n&CD0>9c2s5V)mChRx;3VMcDGFbc&@uPeIH znh8{CzJp}w1PA>++Z2xcOSW+iN)!e1gx9WC<-=WFqzql(MgF~%FFEorrL6117aI{S zJi_%ZxVVTP!arAMq7*J*|1@1V-P#w+$6JsMS!^2NBk|GjvEifRW5>sVj~71PWFtX_ zT@>gQ-yiG|2mmw@I405;r6Rf@R$}r$#Ph8!xlnS0mjVugG-KTr@SHmk+CfA?cA4hj zpd`~1)F{Lgv{6w{P^V&^pq)y1f(|O>33^c(Ptcpnx`VpBj-Hg$Wx7=3;j2zJr^e$o zUMc8H1coC5!x4euh`?|}U^pT$91$3f2n|=XRLt5D7aGRhOc3S4m58>k; zO7?nJ5jv~WQn}6OP;0w<3b;19ppJ-YoqwiSc4sTJptd^QoC;{v=4{WoJN5=GRvmBW zC1g1kQ`_0;1jDqmD{T|c9{a9=*HbzGl~52&J9Yx>LW+T8-2gX(sFN2horcVvtmbsG ziy#O$%;Wz9xTJU7;P2SwNwgf}{A3bxcflld!6bCSBy_!8kNMOWikDd zdZ1hjyVS+`XaUgMCvPPoA`t~8qM$?+l!$^7F`J2~B@wfkh}lfUY$jqh6ET~Kn9W4Y zW+G-Y5wn?y*-XT2CSo=dF`J2)%|y&*B4#rYvzdt5OvG#^Vm1>on~A#cZr3}uoqBr% z>K;ZGj=AHTc-CMV*;zB@#y9l~u63YO++Gqi66rp?%5q^wxl2Ndnq-Cu$X$o*ho028 zCp#~x%yge;4=@UGRB3+&VPieK(PR4cf({Y6CXg;d`K>1<+q*4IESPl2bJ$ZbP6h;y zagkwh@d?p*O9gbfd~Px2`Q_}nSxC?nLar&ETmiiBty+~kWWQ8M4uYmL&~y(_0Yx2> zdV98LhM2_=vpf(sZare>y2oWMr_SZn1@13Wja1bsIf-R0RU;RcXorr(V^PD~0OPEy zka!?6-6dvnIUa1vorh%vbix<$m*g*vzd$d^hgPd;P3{Nj9R;mnP#gKuI?UNc;O*yD zgp)S7BW${yNP;$Eo)pd_py*=+%HM>@hqIB&fkPbFOkToXu16BA2PmC?Im_kO$Z{N- z%i`B=&R zNbZo-yOHHi$%DAlljPGLlVN2=^lpys0@}UT-OVoOP8W>Ce*AubCEkT}I*9NiP~R?S z?O}x1gWey($S+iJ4myUo5uklt$P43ZEi0}?(Ww)jAvuZEU2{ng2fpV3C#hlM01rbU zFIihqfcg$p-*2n$chz@X?l%#KC5>EVdq*)?$LSaV?8G2 zdl1dHeoeI=Gx9x%W~*N(NL~#g4E;v1I~&3AOk}o4d`T9r3h@;wWChQ`*DMP0WBScW zP%iI#CKoyZAo+nb82{PoqisKqf1YDN^{f&a;L9_tI!;KB#F5YPu9&SP{+C$u{6* z8qLTDGgHCLlENDVFfRTT*qU5G+BBM-4`_}8nk%t&!Z8DSPIqBC;O6Cno3G#&NKqgk z1$D#P0lP3C>>>rb7;Tp`!xs#jQ9GX^y@UifOXnGMj%Sm)GgbT3{j3 zhgNZ$PKt{Hee-huFmcO`Gi!%!*p=4=Hx^wCwx!Y4V8)_r!NSNRc)3H7M%RP$Q0hi7 zOnlZB-5aK_csCenX>>DK*jV%D0`{fRtzbC|xD7CvqHmI`+X zjBuf z#t!QZf9dolVt8AEp z8XhE^Eqg)xkQCRl7tA9r(E4;r%LkVp#9bc|B>dVWH;w0uR+{4wK%9%9+dwrVRWYN2 zgjZW!K9CF(i3=M@I*ra(#25vWfd=vHHHpSOFM#p})YyDb<5WfCgM@#Fc#?obJ7~WiQld%?_5gO8t#QA$Mx4 zWOz8mb?DER$Ef+iT30Z?lQ7&cm`HbjStQJ&dkWw_iNfe_A`TD#4UTWg&7ubi?jZ@Y zWv^5m2TY1h0#Df-BbN#+ZjKXT#7h}8LIFM|5$K)=cYz)#zJxc6o+zk4NEB$)BL#}a zfv7ze*9yQW3GRa-{!|dzBnmd>Gr+9Q%WFH&RTkx-lUei>g`iEIqegBd@{(Efj4brX zqQO$$wYH8d8iK2YvuG#?a1&ho(4<>*QZGzU)A;z_m_t?WFa?3jgbQOq;Kr~-o;l@e z=jjB`U>2n*I7o^C&v&&Yn2`Z4g7*=CMkt_>s4lOR=%gNOJ_BRQ5Tg{tXeo-gi*e5c zDr=@Z4Osm|ehPMsg3XY^XzxA%+uTzaoQhBwwoUX7+h(CA7Vq5}{ewB5k<>-dPylAU zf|(#iuzPMACu8I5|60GkkmO)KfoB}?eaTrgQ9(|UBD7O-zaDYT2EfP~*E)KDnvy24 z8@FO1&qW0lGY^RhYW$17>#YF)M zZn}b-Aw}`$Yj%U>t25>OsGnhF*>JDPxn=p zr6`(j>@dr3z%rR{phFe#3I)9KUkAEFa^L74?tw0*a(t%Ph*eSqHtpBD2OH<&^Q~7G z6-T#L=W-TVv<8$3ZT>rz;SRW{1i;ryIOSR51~kRI+7v;}qIIfupG#2+?YHQmyR)f0 zmhEwF*g|3^G$mE@)~hTVq$uqkr+?1o?ouh0=L?l*Bf12E-dc#tPT2;_gG(;0puR*$ z%DNYG?n>?u-xCW1M}m3`L|%3e;fsB!40`pIq>W#J)m51{sVcsfBB*1pnCKq7e&h0S zj4ldOV4D@#7AZ`3MNM$nHNHhsU+%xPILiW%%M>Ex{^%*UemysR3VwoLODo1qd^-~D z1Wld>VycM_tlc32ossBBUvV4<-=HI&pqpV^e986G*F$cM9tjAPrL;OEPJm|Xq6LW- z@Mqw1Y@#LfR8}FcKQGVLljr zaS=^MI#(^WqfW7dXd#kR#7=(hBHD%s-s8k>j@U!=BO-V+Q&8eY*7QYL*Op#>Q4Pg5 zuZ)DXY2J8zJDUN380@2J6ROt4Bd9 z#Z=!Rq%+T6RQ)KXzDua@QtG>m`Yx-!-@$jgO9&wmupnJ&5ec66K^65Vx3bkrfyMTbP^9HeJHm71_=2KHUp3!$)p zEKXxHsq7?4qcOTt*rm?+ZLZfbwzR;gbl4lAyOXVlH_3oF~3~8Jc1Y@k0J() z0n(1;$ubH+T;6ec*W%S9m%eAUz?gw1+QDzZ+`d={Zj=!x$Z1Dqh`Ps3Bw5thiozK& zgz+67ngk&J8{_3T7Y9rzqpc{@->L^~@p}BpNm)XT8F&ix&l)pm-~WTg1H+82JQHfr zZJt42*og;y#wVjO>Nef*5;lhct^qCvc@t(7hq0C;9Kwizi;Y!;U2MZLD*s6)M%W<@ zFAO93$qSuuU%MSsZG=c86jP)t-U@>O9!_`KQABlVTt$LMkB=l^h-2dpGM-_n@yHnC zk#56XoN-75hiK!(#VEm8jtHQP@qy61K3R^Mb#Ak+q0PF3#3w8A5aSDsyD^U^*$dM@ z7-Fa#_J}8YID%MCn5Hy@+}Z(|uF^&zW`aV5k$Gv>1kL$k_^H!}b21zf+dN8~@)R}` z{vtW`sZ{C=)WzHxq`Cz^KmGpLnDmcuR;CoP|G5o3a0LXMc3nPugYXe@I@%!RkWO;1 z56K}N@MCBvq2byLm-W*lmTf*a?bNOBzdyvBs~zQ}py?QTVO9a9a@udWP_9`Q>q15D zQ?&rg5P1?`95OE;0O3y-HP<3!A*P&RH?#N`a$+Y?BcjO>ySW&1l$3Lk7r%yE>EUlC|HW@VYcS(mCJe_{7I&ukVp0+pAK`-Va|`%AQAj^_6BW^ zBC%MeyspCT0~G}?r?CAT;)3g+MToek#wS)!Hh3{sT0LP6lEJ&D>WR@7sr(Gc2p)oH*H$wsmJLu5fwlwn=Zrw-)pDzpgE_$viFYj^!4(+`xCo}txyWP0ag_UysKZ?@K#dg- zI3oeshB$I(KLE48+g{ItAzoY^&gNEmj6+uWEXN^)Dy!r#-xhY&%RRZ63v2NJN-Z9d zeZcEQRj{wjT{-9gR?bLopdqGqJf3be1P#hw=+#TXYu3WaLebX3S%Hv+d&yRVuv}Q= zv04jz#Ue1v?)D@#B4l3Z7S^f6U=R*@TjtG9i5@u!okhO8zr zb_y4wqk+DXmBy+tY;5G0X_XEPE4I_ADq@|2sz~WM#l$sq?f|E7_pICs0(&F*U9qxo z?!i`&brvf3#U(u67nV`ak({FC=H{lcQJwszXG803Sv(R^{M2Yx=9};AFe&DR?31df8#OfT-NkI83 zLU$pg5XSUJMkc=IpQsbqcloL{#c01Uev~{4yr)Sq>IedpxgH?!wiRSFRo!8f$F`EU zq#R*uo&SztdpJ#Nxm5p^b*Az!V?!c)vh!asjO%f^J;$RikG%V2rQ^ z4((SA;eJ3G$<~k!#=iF>HgM0*GaP9=Q6luFuV(>eS;Jwh;JLConoGuwZqIl0N56mX z=six;jB9ya99^8?XLYeu9&XH7ZgueysxsTT(E>Uv zbE}ru$8|^)fE1xK5VDBGCU+k*|EZ5j&-Zbx@$Y?H!fBd$FyA~f601($_5YVnevM4I z^SFμ#HOI=R(hcSgz zFK2>;dwQuT8YAov1^=a&^N}gHmrJ<>Yc9jk%g+ja#K>SCv*k|Zb$2Jn1JZ=iTXhmz zPqVi@uakSxNC8L@x&a}plV7{1a>+kU*Zq%fugOU=Mnl} zP9)!;6=0dsIezGlw}zl&u*b<7wNBpYD;s>4oe= zjvh!BIav*oCNMvTLXY$jMor)v9oz!u{w{C5ndi~AE7m3q9|&)QW=V`B!#B5i_jm$hf?cj`O3?Sy8 zClfwJsMX1iW86TnqV~wgEN^Ss(|y1p2%8OoAso;V=!T~q&-!>ej!%aY-{wV-IURB* z|G-EGp23)+G}62@F!lDH3pYqTP}&T`8)9%Cr@IAxZY#fDm377d`NzBzz!Z z!&1dQJJ5Fp{tU(`IyN@GH@vYZkPX*?zaXj`tRBjcW<_0s);tz2^QpMSEF}r%6{Sz~ zWVnnBxL&+#YOf?u)D<)c~T<+q3<+5^3Wn5qk2G^5%Rf>YWaSH%E#crlP+jqTm_eHct&X2YRtcft(}0?xnSELh)x zp17N6ckdLuye~et@3$mQ2f($IZ?tFM%K^E-x6vcqIiG|Jg!=N~;-uKzq&p}F=O^&m zD;PShcCcCdFO9zo(TeXJ#!DA4kRHI_u{?R~*e8td`cl^tKM!&bHN$0^FCXU7Qs)cZ z)!gSKjKx1BJwS&!T3sLJ27d_ZgE&v!@M9^cJP6&Ts#74I#K*7+abndv>}RZO&bb+3 z-wo!pYM3D0rHM~@mCq9XW9A$wN^<7vNX6x? zaMFkVn-4qohk6JdNab5V-2?elim>Nl^I`Nqz(0ec+=7SycyIMu1`Enl;9yMzS^zwq z39xkHByPS6hiD?iN@vXOs!$v4M8Ej_fxA^hHEUX`EA)2*{RIn$X`<-g3hLjDZ&u+I z=P7EqCj6}9ws3)D%aSJ{4LZ19$#LXOIb@=}ftw4^a!4GC?0Cjz`j)GY7H8aDwFm&!s$-R*M9 z=UkdBp!`ouru2?2Y57y5S`=D9=-ESj4)HEk$nX}nK*L|y zOuy@?PF=GV$a$8UP8=$Dafp6%uO0yTxe)I}tFiv^N7D4g*#cILs#!yE@??3!2iG9L z4jY{i--O>mgNDje<%MpY%pmz|S%wFa(~e@M%e^DuP+H^(8HJwyW`oRXiu9h{I3c;Y<5t5Hg9OUqM7X!^k#@MrCd8-K7H z>SwECmpoKM*!sugPEGgk!!_s|2m&h6J-)Q)_TD*{KfiRcplSiZz-)S92+4;x=3%0k za|)a~b>ED&c-Wj53#ow#hRPNLa}mT7e;Ams05vfDi~n*5hECriYdq*CLjO7zw(Jv5 zn6hks*%zJl@bs@UONXoG0$D`(qoxIN0kbOCNwFYr$9T_#q z?yZK;Tg^A3* zC{P$dP7#Pff&-ON!AB2zH>Y)X8DuMLcm;{V0v4q}arqJDTyI?x(ISA60+p+h(K{Gx z{6@7wie5Np`Rfr*-BhBUKD7ph1%wJTXj=o~59zK3!v1oPWLVD8ef(L*oS`drAOHE{ zs(Uv%PD2IKY+)j^E~gbG{*auGrPvnl?Sn70<$b}q+4Vt)i$6S@@?hGTRgX!vNSebr z?{|;MFNV)E3HSv9taVn2m~qioR5D92(aXN?y&1b6 zLODCv%Rzb|qfX#bO$^_GEiz|8%2Ew98*%y%H56qv2iir>mDHa=($N~yo($19?A2of zVCMm%e1$FM+`PV=ma}Jvtu2-+OaMZjE6*Fn#3A|v-j7H(YUP0+RN%%7FdKUSjR)_Fbo}l^QatIfRSZ0 zjLG;2eGAmUjgtoeQ>6Z_jRjAA0Z>-oYJ=OD6&9igqkz}QFQ+a)H6?A=6_n)e!@=){ zaua=XhP>X0D{!KiDX8FKHU-_|MS!FOuT|qDKO{}Gl8Vhww~{vfs9i2J%AGj7uo{+6 zrdWw)WMLjLr7UyWxjvfph-!Xi4cV&Uwuap$@shq4z*ceqm_L~mkn^b3Y(fgAUycY+ z$hzd{a2v4b7SC_ks!_WltY5agKi0 zN-$o_E$GQC{jpX;RbspXry;8hqbZdz8mOPhXw;z+Ig6W(r%1FH%VKAgqW$JWhsc>5 zoUjm)r4c>uJz;+3pwdsWZSFxRgW?uq5PBX7W}q^x)(bP+@hGJn7IrpV<~3#aESTu`iD8BgJ_Z>oGq}U>N9G{oxW~% zY-SC}>=prZxua&)kbAJqnR|1Sec_rtVe5m8VGoxAahde;S~fq1L6sRsa}Wamv7w$T zVO_U*l*W%rp7jI|a*H25DH}fz2`iQB!N6s7kRYqTIM&8&_*0Yw` z#}fbpP4`&4J|B{TGKNe?z-ecdmN4fatTR_hinWyQp%VEsW}iO5_Ib3Odr+8uUcY^4 z?Y`e9uEDNu&So+Veu9{%kiP@JH2N$`i4ru8?RKl8gdJC~s?!8k%<3q`39BETfj+Zw z%hLTDC;rjWVoS_PD31@LQ;U%2(!9V(N$sAKtN{!fs~XWW4Og@@N?5} zL_OEyT~F>^*|72KEli&orRPjt5{YJJ*O_^H<&r{KM8xRe7zsY>wl?$(X{vo@|c=AtaFZp{l zjH6XXu-@4EF{hGSEob28U&ad4edGN3%<3^I(f# z^ym2bKOC6xYg^>$&2QNR7A*5NA)6u*ox`cDU&x%oKUq5pmlm7319ThQi7@YZlkB+O zFHdoL_W~J^f|L>!VeD(8E|R$~P|UeW=EXp90*||aV%RM*DM&2*gUt85SVd~~^d^;g6tWK-TZm}jxI)6#rk@gkQTM>{U|k1JKwM*}K!Hy*aAF~k$QxL;pBoB7SE!P}|`bqFdDgNhBE2UT<0S;r2yf@2wA{)Ye_t~fql z^1zzo8HMmusY7f~flQNA;-PLYL$mkIl>_<}2tqW7nx*lXZRP$}@E(51l9LDj@@~Q>pkpIbbo8Ml(-Bo4gzK9yI3g?n-+@Xscmr5ICdg*M!*&DO0qu&{r_<1Ww~H8= zPfH5{y9)|~g`EvQ!|=n$C=0^zGcRL{t*|6l)HJEVmnQZsr9?c>F!aM&Pc zIK-yEH89j+2_KudfpRe#n7!D1K{z0WY=Cfy2FgD{AvKmkT1aOW$K_KyX*MH3n$yFq zVbkUAM^cx2;ED%&00+FQKv?|A?^Mh_#9U(nf|&g(<^W=vqh>@LR1t>|(G2K{h{G!4 z2qJK9gvCy)tgCZ2-n%nz@!{PhGPaol`=MQf-(mI!vjl`+=TY=k_szazRuNt{r{U#g z^NXAojIh7q@XDQQHKloT?FEGZdohwx+sh%RJhD1263}hCsDH;~>Au5gXa@X+(Hdff zL(4&pkIZm1(|8|BOrBzh{&P@~?oX(_u0TPp=E3LRBgpYWhInGk^2{>RX7bXqN$bpT z)5pYqd=74V5&9!J$iChqDJf@pB=6Q{1Tb;0&xdJgws|q?kqnF84f2@hbY|BWYyVBPDJ_F@|Dkn0M{3z zHW)mo_7J6Vs<-nFK*f4B01%GV62Tiuq&ip0BCSgp0YRPB|jPloR zllCz~k#iMSQ-ll`GDhxjXFOmB_Z@Vu0O12N*Fu>N+whf*p#MSVE&X)RCQv&MUp4!{ zx-mM=}Y0RG~5M^t>lNQNIeQYS%@nR zRNzC=yy05#WUiO~XyhiVkx$z&I-ne&eQ_|?vKShvT|?ccQM7p;Wq^+H22SP;l@SI` z?%mhiJLHp8OqgKVOTZa26!WTGMcyDL2%G%%VrB`=Uw{xG#jJoEE2t!9h_ql6C!5G@ zSOLxQGA{b-p=JvJDmTs}T(En;HoIv4y2Fgax0l%+--g*6-v!MN@Eu@&tocjkL4aB# zG=J>oW*LygQYbo&;!YPk7m-H=_sEEGjt!K z(rOMuixn15fGg4*W_bIEFcfU?zxEI?@?0?YS z8`aARDxqB_ttqFF*9gfq2}l4|W0TOJ|9X<;?@$o&Knt6Q^Ub*Fd1C~<(lFk;)L;9EH2#9K;X|J8UDFbxJ5J3qU;5s)lpMK1_*<% ztpX!J#ilA;i7N+#|Bnc;0+N8F@jRrJgi*DkpfcLen0^&+wDJ|$CGDc3aIWLdSAsV$ znr8G+6LP@hO=?CU@ka#B3=}@rWg$&q%*H~cpjmvVn}QBO#p{s*@8_(zHTUV+E!b-J zEdxQTAdL0$=0-GwkM>$}Wib3C>f??uc)0NO*?g9yfs2A6VbsU6?*}`6-+>$f>7xF? zq^v0_`;v zdQ?ukNSaX}9%~uJ%ZMP`3r#bM<5A6U1c_>Yo98K<=#cfNLgT{NG@F-tH849>1(nw> zkk*P*$T=5adNndS0628M1sntyO+9E?0O5oE!eT?-i0)yTn1YsD`)km4meUks#-VLE-MW zdvX!PnQDm6NQ@LzQ9B1D=QJ{2C@g9UyuF1!K8lP)c#Ri!%}O=6lH-UGwNObUR|0+j z=N5L*@wFvz)F}!znBZu)l)$XV<{Yc>!WX9n=z)TZ?APxWkpyH5{g>D;xnxm!UZ*3OMC80I>Xr+Kh52 z4A;*ISqFtYk&hoFBOa z)f3L6C_}GD**8m!!mY@YbjA!kD}~-#o^t?Q$fz{rGP_` zlzq3@F*x5~pzTILp#H-B)1~k$-$KEWjC{YO^I<8~FU8JEZQ&4_){z2w!Ij_K@K%A ze1Zk;Mue1z`7IR;x`>Sic<>l>aSP5R>y6Koy)l$_)c7Z$?Q01MAd2{Fe37Gm=GI&7 z{DpsC!g$gmBd&6*xq*#YkZydPXcE_g2v3Vwq-SlPb$-T> z2|x#GAdJtXYZx6xYXRXQuJf1U&@n!{@i~dlulPK~$L6$O!7*y1+KYl}YNx??+-JOf z5=?{`Asf{acJEGmeGJa`#BcYOK^LnM!5f=p`hA;7s_ST7=nf& zM#z`y2ro1&y$m<3G3wJB8Ah=F66S1LnK6>5s>zcy`ms!94mLG>gKf=ArqPAcBG~rw zOKG%%{U%!cjcyucxE19ImPbGN*&A$aW4?)6fONhrsIGPbEq__a0%>%ai)y(yjW%#m zujDTZy8=9bxTJE>m7=5-swBkHD`2-;V!dg{Q4sWOXwy*Sx4nus9pZvohHoYpSzIIHtNjL5Ui{{Yn=_5 zoeFG)CBgcWe6TL>m(1Q+8lEQqGbTa->IEwMTyBArNX>+~hnfm{QTra;_A&GaQ@k#$ z4Nq$ux;Tt3a)TWbxXB@fXRP{oO;7{vC`P6<1f}Z1qK)uHo1di9m?C8vOg8AA1ozY! zzI6n5zu{fW@#+S_u5jmaznr9Q-RJMltXr48?%Y@Mp-&BjXn-cmCnIQc*neCo+K+y& z4SNlp6SxfDjt)SUkycNq0qs>!H-J)DD*47Z7R?`O42M;xC3!4vF0_?r3LGa z%{};TWFEx#OR#Iy<|H!v*+6ih(5S;dnFf8P3Tw!Py;y#{oE;_tZEZgu!;jaSPUJ^B z!x4x}4m{jh?(zx5ehoMtux3M|u_?9#!Fyd$6YUW21C=>vBD>y>j7|VGIy0bKx6mv- zf$+f&)V_zhI!4H5BNCK?q1oN{NHiOn0Ow48%c6@^glB!-UVnMq!@=2Cfw}a$FqX9y z)Koi+>NZ2)Fka5*3SVD7L2~khFJRf2krX2EmKICX&`4!`*~+Li z4ag^v!+eM64RC4g1--28N8a}VW2_I+JDB}YKqs*KC~Gi<5Oq@AOv@I9g}3p2h~D0u z27te77*8o{+a9Ka`d;Izi{|1=VX=|E3+^WVK(-M07=e6b%aOj0H>H`3nUIFKS7(xY~*Aa z!F*KD7YkmRqwuq$IUe5?$aL1{NH61cF76E!m%Xm+3lL5^<5?chch9avRkkio)uSuR zDjtUGZ{lZHROU&v#LxN=N``-3RxOjjO)M{Tg%Y@npx3lLP~C9~Irnj2x{}ccz#R@) zz;Z8qYS9NJyi*rpq`wO!*7icAW(a6nI8zrg)*w^ZX?LcHAyx()Ys3L*VeIHE=ymNo zDEt`0<~+}t-pyWBHWFJJgnrnWpk{(vk%eMD3yB7H7S0O{*4dn8@VJ^)Ui4)J06Et} z0N3M)d#?aHors}I4fh(gB>d4cUDG4 z50Fn%f-s?v?k0@+@q*sawju8=z!+bJ>Ivo}6p$o*kYdV$(5NRVdhli^EK%cBs2*Pdzp3d{hs*}zN5|N_>M7K6%19BKqs?P!BEyX7J*A?cT9JD zE)AHqOPX~EHIVrd`MTG>H3V;IyLh`Jb6!E7`OJc9Bv^fiOhnxUbTkzNHi5SRsF^zp z0`$9rzT$o1gGlpuK?v;ctA4!G8FUTMtm5fuc=?K+C^nkgz{)$!u@PEIyob1+!uci7 zVNd5*{D|R|9(`bMxF~At6{a4&4M$PYn>X?I1hqPV6l^mN)w261Fv^TD%t%mgY)rEL zK`41}4TtjiNBKH-AEX*)GHye~eUE~-EU!tDD`j^zt5K|^V1G2O8OJvpilJPDIsI-Z50J+&z#p6b)q6ex=!CKL_z?j78 zXx~J@qE#?ua7TtfFRtSvN8C|}FWh|(k7ISqiN{tCw=udCNSW|FB9TVF1zLAMdUo@S z8yVlPp1b1a2_#dBFn)z-9m~}jcoU*?E4MEN*Ps*?{e%yavi}TkCNMz#6e7jP6&C)X zKi9&@%!T%#sF=&ds}Ez+1guOx4w`+tRyxk<*yeHQI*yas=F^k$kX|y-?g-lg{_(I( zZw@b{knuD!jDw5l$wXQdR-VI)$#6#4mQaC-bUX_Ams0k_s4567=RjEmR#4d3+IW73 zHbjWeFm)C>PDEt>i9w1HA?r`7{m(OlW1Sd8Z2_R_3fu5AJmDYkOn;7ENw}?mb3~_% zkfP!PPdAkc<=FulHnzMdZR<~Gr{GEA1Heg}e42(!_4$wf%nfPX5<#raUa0}KdVf%m zH2MJ+Q#G@JrNuBv_t{^(@Gc6QKsWEbfagRCQ_m^rU1>2Tw|9?_n7?;O;od!d;h%dq z8NK^hTLGXtsNzCIM-)Ba=ClfU3=C6`j}1p@fj8S&gEtE)`HTNpVfE|^|6KYq99YEyUW6bA9>uE8f$ZOzG zQsR}GHjb~mQ`xVV7lqVquQ-C0d$psxpc~~yP)dC79?;P6z2=srre61gte%CrZr1L- z>7z&Pt^=GKD9jZ!Ku{0vx`{hzq;mt0@j%>^Q(Al?e2|uXI^rFm9(|%#X0M*`Mh`t( z5wrU#PwS@`tO5Dg<-(ClDOFYsX5==aY}huemd;TtZ7 zDjY;cGRlSnM=+@_`6JfavhKGp&1qTCkQKa$8G(Ha}; zAi8-50_7UrfrP?%6DyihkO|BqH*yRb$x%WMNQItfw9@m0>*-uA=(tfZTpvytdrQ?5 zZW}>QGAvzBxNRgTVYqEHmCT@Hl|;C03!#;cUORO#=d1ojMNw_|SjMQ*3N)-tRGKO%O>9{!?W#-e1 z@Feh`r5DNlC9~&Ns>{>!KWXS-JI>XMcyhB|1T`D?N220>8t$1lo7UR7h~1< zqYs2@P^`|nbtA_%!!OBf*b>Ob8jdk;4F^WdtSF`VCKCRl;uvkII8dbVo-_w?PUtvB zD;)Uya36(rG9HDla(Fe`Y=`I5IQ@)vM8IotQ9&zs;VqX+dmZ_ zX$S_LlpOO)zmN_|}VcXNE5H%fK_4y478(a@;lrnNiRp6xj+xEgn*iSTU^4Q(c zvd#|PU`8>lwZR~L74kznPJ;lZ)#o$-j$=UV$*YRn1AvjZd757WnA#&5+eS=$H<W>({@Y@zoMkN~qcV-2q)U zeaiKl@bQw)3FxIhk<38s{ZrvK$;sJkUWjE`MY)2W61S`E~Gy5bV1^T17@ z`~?5(qUtc4KhJSEuUE%N19&KD%aKJ6zlQ2q&JSvQq6oxcE=AWk0K0 z3$|-dJAkPe4kg%rf#wVFieyYHtxpF5o~wTPWp9uCjYJvS3_|D#hi1~MAvN)wg}#;% zv$(Yu!?iPuqi3sVi)n+9#1#mmNExB-s0JYW@PyrC$Tql>{@ zCS1ue*vLhIa89fx%IGSCjtczC=(Eto*<~R2ud=ug$#Oqm2&3eFlw_=(fxN?^1%c?# zK)UmDE@UQUe;fG#9r-umAK9Gi8FB_W_twJv_XiiMe?W#`Q85Ao2%O#`vo?cA&SCx+qCHVD9)ZG3?Q zG(zQQs-T>UxuzBLcp@pDTP#yliNVbAT$nl4mwdS}%MQTB;hh$+ye|a^ZjzaYx;Me; z4b1x~X5Lp(@I?9+g^JaxBnS*-gff?23io8@mZO>k2&3{U0E{BOmCtAb-C1F0gur4^ zyOt!b1OVO>={pu1^i`lL5&BXxUj$gDs(@FP*~-aHZRaE(t|H$S28F)*v$ilsM*f4F z_=+f)V*lqYOw8W|XJfoqMVRZHi&52R(&nPeSFhXCBV|5Yw5|)%sBfWxH$jFOw zkm0h*ya;IVo*(Kw%2Jk9rsm+X{t-UjpXnTU(o)*l?V?9t)MAG=l{FB-Ytey;r17$Ch84Dj zYg>ovd!xLtEY1aC`wVLh0NEF{uR(@Mq|HK)Rq}z)kR`95fM*%rt21EFy zZBZ8E$gK4L(e@qyRu#ztcAs0G-mBi~kw@>`}r)|)&Q6nq~Hbj+d>Ob4wewTHEY zg8-0&1A{=C;&6i|v&BM4li0m`NU`1JgU*n2zU@HHW3;qhvY(sK{Qt@1&R5_IWX+fdil8n10FWfw@{h;oJl_IC@| z+R|y*)j!;)Jo$G*VYS98qOtzwN&T!+PgygJ{)arc-Haz&C1vagYi-!eMao>06R|(6 z>AqAOW|k*s#Qy2?bwr*9YZ-?}HNd{b$|;ml(G9_jNBaAlac#m9Q`>lMt=6lJhwrk?~nahPwHZSQaf}yL;V=} z2j7YC|8advLrtt_6F@KQ`c#5ESXYlN+}YC;3yxE+{+rh2>Vb^wqsZ7K-Sjh=*pAdqwIVc-H;;A0;T;7(|ivg zIb7e;JZCh~Guwai?JKkR_F=+`{5-jZu)RH5iT!OYL$`7}#CF7w8+!=ZLm? zvp~9ziR~M)*Yo6{jC~U^#gnnviOJ3lJ979ZV(0d%Cx5|?p#2%xzgK%h?8Tn!*E;R# z9RMbhA9#2KkG`#~ga@|%&n3LI6_UBse@w31sjaqoe=c*#U!zE8{UOrMxLQZF<7SB` zKShyH^+O^E_NK<>I_?BftA>9d1`cjmO$_WiHpl&02(!31&Os)K1J8a-`ZFe}cZRW_u8C+)KnUNsrR;VP=beI97>Wiaf-RY-AUuItHBY-pijoRj0TjgAP$ zp=VI@Y|vR1ibzq$ehbopECmozavvZe+N5j|=$JAdITr$01a$dp2XhmCnlCRVnaiaz z*JkV^#~F#`C*Dvo#LPh*4P#gNJYFeuVQG{F>q|409P*?JY2E6paOeBMoQPH`%Av@a zdL*@e=ld6EJ>kPc5IeHQ8JvlZzjtLk>NU>YolHuT+2uhX5@q>*=~SWn zAro+RP69n5=UOAMm$v2em_!i1ezD06c zhXOqmg`^|pv$3E^MT)v>lzM!#r7_=T(u{9Q*_Ur?*`M#>a#eY~-4SoXGQg!|FkV?Q zjBmD#;X6T&<~va)@jXVmw`s6D%7Iu$Xq(OKjy@Qf+dYHZ(7kS9)X>+O*V1Y)P6ypp zcxjzsCZZzbk?uH2PB*QA)anL;aGSon+1~07rlDNEyPhY=w(e|vxJKU1jBeey59g$B zH{`LM9N3KuimvLXx|_=ME}W~ny54%4L!oEuU8dV>0$tOQ+l)>+wdYQVlg@3`TY9zC zOGUCHvi;VUyI!v9o`$H5L@3`?-P>qBmqTF*RqbrFl61JmS@m4wXX)Y+XChDKvjYT; z2q0UVn$fJOij`FT+H7NyB_UJy)0CuLV-AL?XhXBrYRK&xHkgrZbwjU=IBz!pu7Hag zKo_)l45%FFqkRTNz+3yyB!8TgofzfX4FAX4&WHok_&FY+rV?160 zCaaUW>&A$7^;mM+^+Yc-SMY4U>5c59hYfuriDa_HzO7m#8!lfoZjf9B{e!WRG5K@j zyi`2y_3Yjc5Vq##LRnrq`wBbTHDY^sqdac1266+eFSC9hhe5x0sfhZ$WI~>blgmMs+NGaX6eGf(E#E->(4{*t=+eJckldL> z7$WEL9VF-T9Vi>xX_r37w-5BMr9)A!sK|BANHDjv_E%}gw5vynnqo%%)w*M*KAk&S zfA#9PM}O7VIog*I9cklxxr{?+-P$3SGjM3s4%%5O`IgJWeCez=Cgi#XUP7{(?b%t< zER#!B}n_hHQ`(D;r-FofOS=<}a5Qq1ov+fP8vsQ-* z*O+YAVb<)dmk|$&ka1I}o%KPeowYU8&iaD4)GA3y?r#=XI9jpt0~KvSDMK?BtZIZ~ zy~=0a@euQIXx9VS7l0|mlkfM8-$09pb8h7y;y0*J=VORgTY(GvMmTb1U&pN+9IgdG z#DO8(*QGqBCB2f)L*rbvk<|pwkw^IE$`gF^U3?+M5xGP^Zh>U?(*z6n=1MW&JgLt&lrp~cq>^tRX~nm%wBtKay6_z& zz4#81{(M2hLoh(fVHnpybz)o#o=qf!gv*l?vFFHCzPU1kZ=U>0Wt?aFTDENC%3G5 zdG4!pS&A}T-Jg>rinX<$%IxihlNKd(r9A@7KB;y;z&Ug1e}LUVJ_Ng}m5{%HKTD7& zkWu{t75s8CxL+a)I`x30$I9R?eghp3v=90oNU4+vA1*|9cm+U^a3iilM*+SlTfq1F zzRr7nKB>Ie$Jv_H7c7+qAUMQiRL=WpB`Z{>^~@U_$Y40m!_dbgOyYh6~bTo`3spFC84t zZFzG3n-{Hmhax>dGJ)0R`njH|F92XrP&wd-&#`T!`t!cJyUd{$E@jr*j%FBcQ8 z2@&)fwLHtsjcOoSyb^q039=RNw(|_$$lI;l$uC}&(g)>=7trg)tL<_0$dbW~9k*?I z;jT+I-|~%)<&X?6T|{$N1GRAB3jSB>TTFqrt8X(L-@h8562MBfjRJ8k&B^`%R_N`$ z;v(ku$~ROyi?B(RU-bQrmjpEAYk=?$Xvx=2-HpyV&VK_xl(FLSIxUHd{+zpL{^rN# zt$pjAuW__Cd%==>`A61!J|M^8Cr(+fiM@&~XFU3_O&9Tci(jEhBtCdy!`-V_JiV&G z^M1LWvW9(K1k}v{O#mK;s+M(>-hgK^Ko7jMSNivL&I<5huL8xG&oTjyB7maKQ>68YK z;5x4Aq6Qx`e_G7z8|+|#%Z&~d={7O*HV|KGG3J#ul;b*^pN!d`Q-{s z(p}WBifxOk4tA4PaI?~S?V?V5X@Yq3E^2ccIWhIs*-X=IhIq?4&@?j)nRqH)m#p(4 zdVEirIPE0vK7y`wJ}Pio9ANW0FL%|=v`~0__dh-6qmw)>hXrz}N*}<`6f8=^v;Zw?H?NvbQ7%m^B?L&~B1hL|G z=*k;}d-sk$he2EsUCtHJ_kVpb#jT>0R=SVl;=V$0bxwY&t0+>g#u@98T;GgvQ5HllR3}=q zcC|w>-@U%$Ce8iGRuyZk30)Mi)YZvEUuEu($&)dEX47d z5T^p@;Qaw~N63XI;o2+SZ_;<}_<*T>Pd^?JyeW}JUH={2Qm39c*-$fj!0ufh!rKBJ zX|LJ6hh;Ny)skt2jn}*||HUOY{dP7>FmKdQ22OK%sIDW=(kt)*z)}T1?WmQ>Mo?!zGcF&<+QCyZk1n8?YVMD|{|41xJcOxz9+u}p z0<)Y?;K1GmH+!Zz-g)81M>j28^~?%pc_ozOX6pa7=6(;rHwxT9Zy2te+$l!s8My4U zFt`}78W-)keni5&i)%p6)7wAtHf65{w1V<(#-&XM_IX756^FgECTVJi&~HgyjiM#V zTd zFJ30bs{mS>O|kzj9WhYmWO-m%BDq2{72C(I+3c!e@Tl%8v za<7v>mh{gomRu)*4&*vLyc;NaDAH=c$`NE-Htip+NzIIC-5ZpIWj)=J`*Yp)<5Lv% zZXz16Dg&$ou-=+O+Zk|426!7U?Y0m5IcM44+OC22+dY{8zYswCEr^NetJ}u(!;-dn z8t_(H$moZA@vz1l7PUv!la(9U5$OQlcYh|8s~9;a5XOL}8JFGwEb<>#uGFx5c@;w< zUB!BwJW3(0Z0i850K+mRS)Flt4S<$d_9mNeM@*huYg6ht@_n-|&!D|k*F%tPQ(c!F zaLTFrFbaVXe0>`cDJ~(`b&ZElo>KE&=fipCkZCF|+Zst`x7Qb@oWe*|4!z!|0`QC0NT51*GA{KpVLAfPZv8)kd*Min1+G=Or$EKc`{HCBFuQfR&1@ang4!Z^p)Hcl zv`WWtQQX$Q@c_2|b!#23kO!!04dw^Lf-J;p01I(jt2o4c0E(Xb;$tgh_CC)0L|4jD;X|C(%PT_6yFck z_Y53uMLLpfZIxI!nB>&LV(xrrp=~vCBX{Ru6=0~sUg$8MQQ+GflD)hAb@5r#qC>0 z{aPC@BTTNZq^wGq+yY<}3YP+F_AAAX|6~x!oVSw94+og1z*v&8e#Ir)EWXFUk9Lg! zmghvg_Hu8KZqyqOXf+RpH;6JZSKjf-_=uGJZkHov?X z;&!V@)5Fn#G5~9%=bE>SM#EKYDx)EEL)*&8>#^Q-BbSl=>PDNj2M6UTmS0UV# z?03ZGrExlU#Ob$<&3p)Yjklb5##S0RI$m9m1_>P0ca1GPNw(%8?272zWgAP#|R^ISkCj@*$Q%qllhI3i;FYJ&y4+PUX_hrl-J>t$1IO+5;2BiGfNK6NVGzA0x=QsesQ zyF}5}SYEEJ*+-!{4}(@m0x?nmCmU;1n%FN;0!uY0pHVvLbjyH=6LJsQMOqI<4Zkq$jLvf`B9 zYEsyZ)2Rp5LRD6GD`O?q#A>NNi^=+Y6fcLFVq$rqbGbtdiu8DpM;3H$>JWm8ZDTt? z>~B;X7rr!*~g!B{rY%rJnYlu@413?)wwbY8zTq{x0)+Ok8) zSjdz=FCR>nY+4^glymDOby}7obr7Hkq(Pk=umC2lG)r8k(;P@}(6B z#Xd`B_bql%?lP0Br91jRh>jS{GH$XBMLa6s3-joZIGXz|9kJ~ z-wnODciG`!!K3U|vS*d4%@_g_ZF zM8+>n@DH&AmRWe6e+|He0LFuz4`5Aj9e`r>GSV~tYQGT$=FlJEU)%Q#K}6X$gxSM5 z>2tDTXw33_fDp#=d;}L`eXIc>#OsH}A>KGF4)H!N7UCTMLd-u@@yf{p%HrYAoPtZl|H-&?!o_$#3K%`zdQePHH##sTnoAFiIVr7~MvSGR zfYoF_fERC}$_D~mdn>?D0Aps11F)_=7C>9$q=8YNWcg!i)vjsK7A*wrM{J zz=}5=K#O|`OeZSQwIOPvwwFZL|=KD~$7%@KF8*ewu(u}H78q8dZ~HwYr6Mdk41gF{Lp&N*Ed(&En#+lRaY!!%P^`+q z$2N6I9Bh9EH$2*(p_ezlv5gC1qK!*!0^2ZB7n{(o>JY~&#On>++yF$C zsmk1DTs`LFsr*jGDawl)fE^X)DHI z0Cti(CId{&0Ds8<(~g01iHPB|0Zk|lVtCtlU=NO@CRBrT-Li+fk;O*E?it?5Vk2nl zPNb|5xVoH6_X!Y}9+a>qnshZu;;s`QiCM!fvGx;)q4chj#N#I744JF6fNXE5&ebU- zz1_6%mkkM|gsjq{Z#T@@Go1CP5)twUqO5x)p(L+T7V>CANRgU}R};K{X$Z3I_Nhtr zUV0Q%FCr&O^*%jLsov_+)gXPhjDz%T5)q7_jE3}u_EUQC<}r}IP<~3x$e>cCd8?zx zgs)M!GlxU&vPU*ci{T8uPO;_XVUW8FB%>5Rt_!iNR5gY9_+TY=You09@&0yj{fKtH z{gD8fY^dD{QIzx`C3dT$)S!4P2SM@vB`Uu^0D|}AsQkAMD08NundOBed`;RN?N#z_-&TuO%tZt2y&tRL@YE%N1r@$Q1f z(8A;0HjHq*yWtvN8jW{buSG~|yt@&?x7T?03dW)1-H+G%GIG4T=U=`YIbLZd@s6?w zV~UP&YnJ+Q*aU}eU>P}%MHeM;6Wm2N`|_7@?yg%X#2E8Cb&T5pwSLYRx9|>MHjZ*X zV@x0AZoLz2OQYPkclmO~NR|m-I*oK+--FQH2!~!r88+OZBS2aXGuvUq-13z?CNb3Q z!Wcf(J+aD{!lCZf)xNA9>bS2in-6o`wHNc zs;j$<9O5>tC&(eX;L0(FxI3O8u|wRO7-fgJi#PbP-y!aIjOAn9_NRPVHP+qsv@eg0 z)n!;NILPgK#+Nt7I@Ht1vO!k&kH)%tpZDd3LFV|xK!=hI`FNn)h4KABbL>69j1&5s zQ7bZDKfpqE>F?&g=F6b|R@;61S=~8`*Or*l*Dc({wxo~y4CB#0R@;@mt+t!`C=*CN z>=|X-(-Qlnzx$kR*N*dWz6b?OngCpUaXzYnzNe;a6tp$Blm7rxZ(;|zMEY_LVRVzLUj$fC(+ z>l3B&_pTOiVHYzl>}3(&7;Fu>@nGwYj}JA>I%2$G)+rH!O^=L!9%YGrIoaaHCC ztZB3nEJiX^H-h&dy(+#d{v;*a$47g?E@jbP@Up{r9Dp4izt@f_kS7kWCtZ(hkei$Pdsg)ChODVmZwUC8 z;6zf6>du4%4+fTSz^F&y+uuh|3nou0n?AK{(&TA8AkXvF|Cn4h?C=B1Y=>W#;g{&{ z-(zChhseI%s&W0YBXIMXF3s&>bwlqOqH_Fjk{8JjUrLV@-P;JK>x}|PNj~WJg5{29 z#1Y&9VP*_fo#OeE>>dQPKXQAk9|=a~#YyDffS)cgAV}Ez&`Yw(kL&cwDqD z+;FZg8j^pH#6>e6{z%AdUfBWy<=Zn5xcr1NqO!)cw2tbnQT+K`sZe3wfoU9pHqwR*nX0f(Al5Kis zx#HGPjnw}-rbg-sFe*;ni1ztJv$ng=qOfHiL)+b6BQZ@$YbkY)j3(#LtdgGG*48{D{`454+0J^RMPb+-O;%HCB&LBO(sb4s1T~=(-1_FxtZ{L3n>CJT z9?cpDH;-nGk1KQCMehYtJ}H_qPO6BejK_x;yIXKyci7&XE6Qs-;kjGkkw*FbxB}Te z0-^N@|9P&+_F7!&b)jo`6<)_G&x&(RkLJ-?D47W0{Nvcvh+mWtaq)XUCKPV?zcd;V z2G~|E?Bk<0!1r_Ykh0&5DLh|Klw2AJ1PXPI;OUJ}-NL_U{Hdz>{L)WIgt%w=;W@-D z7&LkMh!aokdu*f&im;HN1sebQIR4EV{|=4Mh1=cn*ZSc);@2jAl=ZaeIf2R32oF(O zThrJQr}3FfF1eCJP>-j)ctc%rfcXlJF?_jyQFomz!zTL9Sfz?*;F&<99zt4F6dFC{ z9(x>2*w5pM1?fmC+6?b$Gr-DoG6>u|1V=x0z>H};3{0lX=X j`95P4D~r>^7Ip? zPTK7gUWTl2xWF6&xq#T&S9(2Q)FpZNIfFq(^FK; z^6uWi35~L0=RFUg9N1M)0=z@5829oK4rwh4FiCh+MBn;R$Mv5FI4Y|Ki50d?1%xL< zt=^)PG*BB`CyeaqG+=z&^}@Vm5-rkQ6H7XJQwI8G42g^pJkDo)+<~!jk6+;IcjLOUdTl{dWxiwJo1;!R|N6ds{IGt zpl~_r&Q_}?&UjlFKN+0hC$jug3^2sdmo8{<{rQN1x4u<_AOzm=9t9{&ic!%8RgCjJ zFeeFq&G!zh?&BB0I%z>ooV2k%R)oVUAP13u{d_|(lH}Og`j7FZg+2lpXBMt!aJ~AhOJi&GVxqFQXCEnLUb`H{h*Up^rgDKrsOA1$Nk>0O82@rCdWeJTz81 z#*RrRPCFKE{zqC^`cT~`o__rP<74+|}c0T>6(X1%9DIXU3c*jaIC>bcMxrj6x=pXe+WjU2tEYePya7v4(x*$cg)xTR1J zLW4$=3^Ld$X{as5n@wiyW7x85W8&qPy<^Ett^T%|oM%uRlqtJkf7$MhQV)90{|MH7 zis!x6kBR2jHSc<()sJnt|3*}WqaL=(Q{)^IPq>I|3}F`lq*KIXl3D_+$ax#4GVAWu z{>0RyDnrr}D2GmLtuKw6QbXyTMBgPq*v*8aA+)UP3gm0G8Nzxud>zQIS~Kv?un{qJ zFH-XebA>DU6F>5^jc<|^dZ$xavP_;^9tI_c_G6~BF7B;i+zA=`~yvz3*R9%G}6vuj%h8TryGhY^{T7 zC%x{gs`>b17Sc9NUs;GhJf+2$@k(_8)vMYNzM(A(|BOyyOlUOk_eEMT)cSdsF9tfE zl;(N%BD29dMeuj$^S7=4{??1H{Q&QZHRSJR{}i|m=P8t2;$NBN>4)}42W9lc^8r(* z9CzaJ>q#4}*jcXd*r}(Sa^iH;0Et3L^`gO-_`DC+)a<99G9EeVDbpq%JDq3k&?Ct^ zG!suAKmEj0Ci9Yz2Da%+%W~t!U0>dO!2?jG9Trgl?^cR}UUJsIns3Da51O1hMK5Fj zPHr^0Hc9v~S&}yYd8Rr%4V$5@9I8&f`}M~_+W7u8y8?CAsE`svaSA9@?d#Al=#cd0HG zRhP9HXPNM3$Q?lf!n#wyQeFpg(F$l;tlT=NEP=Q9uxlUeW0)orP2^y zX4E1sT?6f=t>+b(xP!wP+Ej64P4ann%(+7~7X6-1{YG}u3#TD2mvze%mOjrL!rZQG zf|PgcF%u@Hpd2O=WUwU}UQB#e9yG04+1#O8T}m0!-8$CQ?orYO-*-cyUm~Pqn2@0b zX@Je$Dt(^^PB(XB+R<5PHsl9$4*`gIcp+`f&TQpD$d$h$J;JCKpP7R1i)@7vFi^(OsRGu*tirJ2gsrVJ>TN z$Q4Uy?dAQgq`E(ugg2EAf+GV}>lL;QGPOi+<9Fjdeq?u$3Y}0*|HtwAbiM!dc*^(F zc$AJ$nKT}ehLb0AeI|0<0jKFl%Ar9r1zr8td%vu?^3(5nL;EP!D5>l1e9ODM`-{3} zGa|y<60God>-w$gvEqjIZ=cEh{RH%2_>2|&{sEq+ZmiVd+f1j);D{jnNSEaV^iQr5 zs^8)Z%}JHAv)DFxMGs7((~?In=uS>?x*)8Uf>lbD4zhT8ZqB)ho$q)rc5g?c<+OOu z+eNb^a;skKzAt88#f#cXhiNbGMgblYgQTe1*u6sMntW4}W?Sr0AXLjNjrzgpcVPMh4R!+N?--5D^1UmUx4>;g8L`!(jy8;6O5RT9dY zaiOn|fG+f}M^Avd+BK9(>lunVr|93EmtXYw+YdbOi7vaG0W#guie8DwX!p3}DJ4D< zCAoC5w502^-}8P2J(77l-v@#A2T@`qNjy3S;)0-ZxUa802QtRbN~GmzzWFiP+F5=li0yB&qdl%+k^8N=|Uw>XA%@mqU=7tnMr|Oa(1N>B?&VoyN zV3dSR6%3b@?^&6ci?8`T*!h8XbB|VdOV!Oi_QkAwq_=+{}JpPXDKS_$`$CXdFmsjbFmqofg<<$gl zr-r9nW9kc@y3o$Qhz2ck;rR%Q6l-h#q|r?-fS82{xcbAV*f{tsHBdh^fBN+ zG~!#A(1^Szt&LcZa-qu@eT1)SBb1~!sv)2h`kQFW6m6LZ8{iYxSNF!aOL2+?!4n-Q zFdbw)b9aS24c~4IzR}3lFnZMby3My3D^?vV0gPOCryXMMJ zse!({GRugZ6@}IwJmYu7=+Y@L8$zYI3wu@ad~k4Z5ONBdbH8`HCWR`k@Fb$`f4_Gp zcI$Xmy-IoXjLGvVT{yFu^BM++1byQ$*+gDpkt+{c;k{PCLgWr+j8rJa?C&h{_#uY_ zQNT*{bCG`)1jN@xSbiyrNCmaTq(b85XP#X6an)87kb285Q<}*Cp|;1*`5TDu`9IaR z`0v-=9p%U07p!>u%c~Z!owO)t|~*@OExK2tn3v{J=c>MLn`3u zDjAinuUrqx=DBL=l-*EY7CtPfTG6VP8;57sL}R+LS1oEr`VOIna@FbG&_75L-B&+Z`Cl6$A-a z6!I$6wM1{_a`BK`atb{j<<;4%Sq1Ft@U=p;r>rHwe_aqa<`nX*_gguIy8Kb#52+1F zRuwvq#Jm>Os~=6sBRZsmwn#6CR==o{mBB%Tgd)_oYU6TSW4XT9Bz>q5jYX89MRS;( z4ZfsN6K$0!)MJ*`n(*bcgJYT+{CgkY-fL}(!zIhu8eY<8s$WN6Z3W|6@=)BeYl-dj zD99o{qw6tUT=hWjN}gdqM3;FUcA}BB-*w`nrwHz)H)%X1vchBah1=Y=6p9R#1BXgp z&nbNrowY*iDm(N5c>B6qEdUV2Wm>k0@hcFW zUD(`Tzbf+xgl?jBb6OYVyVdvV`rd3yyS`VcVmNHXlx$?>f10WLh7 zehg=q=sUDju2UTV}&NwaE;#KylLkZ8$=9VOQ zMYa|Ny&!U=wECt42fnR?zWRKu7q%&3T_GZF;aIKG(U~fBMR7i_(uRk_6mJvsb>ZK& zP-jsn9GuThuxtu7m$wT`lHJKG*)0r9l3i)J=pBcWM2}q$M$b5uBzlHd(O}hPD&V%*@L`jloM@y1@ z!uw022Vs$=3)g9>Ho*O$R5dhc>z+XW{-{B_$Ev=JvTDx6&DSKnyZGJDZwenCkR+MK{Rq( z*Z*4_s^`y`6T|$8C-1qYcWN?&(sTQ<9=1gTxK5=^s#o>n5VHocHa=ii0h6j0WTEU| z3r2w#R_qa?d%!8WFGsL($SgtRz?z~N9l}M1BB$#Q1nb#F%27exHBH2sLrHQ#RLMS^ zt9GEy{iGY;K9OTDA`I1#yTgo8UrxRDa6AcXZ_XgKiLJ@d*dzlJ+PH)Hc9UUznVF$&&0|KJ3D)i74{&FN}vDzKc@IAbXs#wF>r@ax|gw5%Km(tp*K3P z_ldbDOZ2yMlvdgt5fyVA!khbFvaFS0H6rjp<;Wc5yuqCMNZ(xQHIV!(qCyS9IudJn zWIdE1O|dqSJicX-<6$_y1&67zywA5$;uwf3IYCRo|?wY70MTONqZv!`BGzw~_P#bz3xnSczY)JnYMy)6Jn$N0gpCmrV@}t14 zK1dI|Dumm))icIEjxJ0?CAq3q-L|kmlAd&`qfD%-d%NGQhk!tjcE16Llw?)08FOpH zctP5xmf23NWeU@Z3e8r((3F(*3AIo%D1<@8MeE46G=x#)WGVU%F&@r??SfvP-u>)c zs_N6;H&9H?dU4-DK6?RM0wR5#2qSAfQFnYrUGC=d@(YFL?ML_?9yShi6NzG}3pYSY z(}l@V(uD6w5F#B!iX9^|*bma$NWIbl$Wos4Gk(g92?9!r=EbCsU$3O{))O)?=`-^T z#x|GyeHo>Pm0A>;fZIHC`%AUkbVAzDjO~p&=S6E zDoUoa-!X=b4vRjuk*I*XabRs2U~(wmI%!zD$z(Ba5TxbPI*DX0`I>Km{J=L~ey$Uw z<@Y+MF$`M-s(yIKo|VcDXkt(DQ&h_El!-;qjGIizRU8DOWRL1-B6@}dhr$M&$m(z=8GC}o`TTR z0vU@nA>;XWmC1a&$w_=i%4vK@v5XK*F$*EOR@iH+LE(HO2Qwo&_RWP7F9M(t0vZPfl++eYo-MP?ga zWTSR;l=Nw#j#^n2SVj*-#(lbV=LU4(flKaY-PWUKk8OCK9)oc~1kf%s9fp{Pp1ZZG zK6RVKnHz7m!ZLbb4aZuR>gM`z#i{Bf4!R;)g6HZvJ(fWqL+mA^0L*1(ea;BU?hcYx z^Kv})iq1eduiV-swRB2Pgt(Ik{K`rkzXzaTG656SC&z;|7TB+!P&TmZ|2Pa-3b8lU z@+ntU)0X~Z3eVcfeeh10Nl;FMOEsXaD?>6aZR;kjQKsUscdnFL){k0pf9^`@z4IvQ z4k8-BxQc)r07DIwr$oTV8K43$ZDz)mGWMPPR#)|CN)lwSC<6$fT|OiZ_%jyT2_-d> z)PTw+HhU3^o;BWs61B(m_!y&-Ze0q@z8{sCH0a*#H09!2(w~usQquA%fZ>X|SdktD z&|02O;R)~LpCu_R{JE6I>=)r-iEPHh5_!6iM~+~0@#sVizv7#ljD|Pph_HVFcWjTN~ zj1&ik_i6Z&dk62W;g7K7{v6(~Ur50g5Yd3^Gr%nXhQyB-$H4O$U_D-n5zjVs&a&NF zT&NiFWhTIf1W>&HJPNpB5y##Uip(ww4B?hNsZP2{l-G-*rZ@(1;Y-)!@GQJ?JgaW) zGXkE3X7n6ezRlNB%rQlEqN{}M0W^m%kZLtOJ*!MlPaR!qSP!Fnn!nYK?`gh=_^ye3 zZ^MNU^Dyit=iE$)e`G?;2GE4_@G(6-tHSt7XCW>R|BFKG%lcwK2Y^S^r6>4qmmfP4 z+kjpGroLqmvFsLPAAod9Yr$P;e0M!Y#K9Tg2Ii}`B+*xj@73$^ZGod*bFNz}R@yU- zi*j~l^h^L#+H(R~tIV2op)dyY#l{tXucX5ylCI+$dv$seaqR)e1kOQH(}zZaEg z!z{!DP2=1+&bNf!as_SKq%5A` z_GcGsc-;*^FNgN4P)epmm7fd&j1*mzR=ldBHkz1c1cCQ*71D<)C!kKY`Xdrpsgj~h zG1W3L7Ob6$`q0m=cJF|MqOTxt#EELMrnC-B&}Z zXT7X#0-+T9>yayx43;4GEY{0QD&_%wqn8|KHD>1%2ei|7)#!0mV+vlO0n&1|UIc9k z%w@|;bo#^ZH}|0p*j^}08TZ>8K>T-6cdjGU1&u7hXp3U{KK@-7934&#i>IA<{FI42 zraXE4F^D5{>@uF$lh?~%gb~a23cKF8QYhOvEX!`=87P4QL!gFd&1Gi^@B}>c-sAd! z{yT=Q+t>{9{xT-Y%-s$}LIR~&Kjdl(Pn*d_h!xRH@?KMf#?DR1yR;u9hRiHWIwn~8 zTRoK-QQK%tX3E&Q{3DrWx%hAktaq1@e-ktCOlV0)+wld2^$BJpOB@mwX{ z?g20wZZ&{nas}qRRrp+oT#8Xq*VY8CUX9n?xNK8k6@Za1>i{gvX8<&rSEz{5C^t6A zGKaa1V_M|0#>t5G=s?@)7^+u>MB+oFRv%!k0$Bhy(Wd}3wX++=w7|SZsc2$DW)nYrnP_%Dn(5PK^+kvXJpTl( zaW?IvdCtYO$*&P;W{uE>!$NDG&Hy_3^~N+DJrKYMw4oVb9Dq@R$LeemO^{OnmD|JA z2eLTQ@SH}kF-P+HQw{gbM0pr@Gm!p_Lhm_SPROV684Nm7<=A|Ms>9WoA)ju}q_^9L zF4KXdqgpmq>f~4*i7lU&+j|nP&(gc6#_K9{YOE2gdVXA0!TiWHr}N{#%9&!Ay>uQN z*p&IvCf2l^)`W_I8S4IQ6Xr*Vew`n;G}QUAI@KDJ_|U;ybm+tQpn`YjL5-nzW>beCT1h2 zv~;tX5hu2EvzQRSZsFFfn=&iJ{4}wr3uNea62zc$XQL? z^2-x)Srd2e{Dhp>+`WbId~$-%D;vvfG6H;30zQ&kdYL}1O*0;;YmzL_bTUypNqitQqav2oadeyb0k8f;#gX_Ad zZ%N2s%gi>eu2pP7rP)rXYs&{Bv${6hBJwW1rzyV@MvF-KKG7o5q$Ps~(m%yz2YC*p z688H#SEP8>Ql4x4|9?r5;ixE1wBkZ4ze8GP$qy}duPDmjo(lHFcT;%-{H#(KpgL^$ zDG}$(W$NOU;iTgRC+&a!IA~IS&^^j@fi0mtQ?>JOwR%QG-Sc3Ik)^L&6!i9%TEc`N z<4ATgyiA^~rXu0sKifWYnZLu9?Kl*;z{u zWNc_lcSDe0m+Oo7javGmeG=}v*Auc|i=?|9v$DybXxrska5h?_jG5o9`((-C`|NI8 zj{Pq_V1I2(hd}tAf|@LU-u-hE-b4Jf6%&sfpiETS*_q^O)%E?B=t7_ksSEAS&%NvW zO~FCu#TK70N=$QCCPkR=Y8;gj%an;U zL8_Ie#s!VhHuoWbLo(!3b=3h)C=V}^_^~hodvMdjLcTCajdkhcmi?Kxmf|Oa@F~qb z5>X@zUE?tj|9Kx|A!8(iNe&!g9Ke%r#Lm_bfWpK`hs+wKv}RCIS?Q}4+WDEM4XGeM zgdJoIW_)E%CTYTUXU?~@r)!bP<4nTn1TK1?L;uUA>XTs)YODIP6c0V1=gVsox=`Iu za(Q?{$Uh2bE7a5Y+k(^*7iC0zxtRJ!oTZO4fxZOLW$Xvd%LPiq>&*uSEK5|y8`@#C z8(x|ci`ESKMGI(G!Zd#?B@XcCFD7{|?7+X&So|RoYSh(G5-{qDn+j3cjwOVZ?Md=C zs%i#aS`g&+BLZwLLG%_RCAvb>Q)_8>C6KO}N~2X5O0N!Dq1FIs={1ng*tK$ni=5m} zsqWTP^e=L~2bLjA|4+q}&-1RR&waEj*kIjv0|oZa^XAugSzLjc zt`DnFf%Cit^}R2@is}Md@b|Cp?t1_G=YHA1g;xkb6Rs(yoRBH;q9& zdMgx0wr7uv6S>u!7p_fIP)suCA~Ba7<6dyCp)Z`i=~@pGtN6piWG1KJRNv(?t@1o2 z9|R%kPtLc!2Br1$cufebM+#IE49|~xtW;}9!NQ9@R~l~^wQNp3JfId|d(REiYZFz! z4ef=Q{Na4Hrt}s?it&vEyp?L#+DHPPD}TGz#S-v-A{*Ew;Qd5SnCB;Qk$~sAg-O6e z0qhnxD5F&R_ut6BBfReib^LIcONFESL^?czlNgR8@*HQiyB>?gF#SaSvkHc1_=$q9 zkC_;zp9sTTs;sM2jXENRNl|7+p_yAVVwhTerYFQO;rs+a?MMvsF%!e|dG(ANw}@dr zmJ!2*=ui>x@UKXKCxW7&Z|swu^Oy-=`pJTW)|v37@1T}lnsN3Oaojyu@PQ5v8{ttc z5Sj0C)|o)0&rwZJ`dyDx(rA$aUwbcU%E_JEz2Alog)WJ^(%ZU~aQv4$ zSirK8ELp(@x)u`m0S{I_iW?%TtYbBT^T3+ke>I7F$`y$&k_>f3ufVrHe5stERv^DH z2E;LcLL)P7JV^%{t#%{?Z=#FD@;TU%N}U73YhnH524Nr_2@>r1 z$6KtUImk~#!RyH)D_kOcC*X+g1OjFjObSAqV3o6jfMd5gf$DNm3I0oiK-a1S{Qybs z)!Hq?_+A2$5)$H3Q$#6h)V3gC$nz$w3)AZUAAm^l!X%;($$%R=kiqaS+BKI z{^&#>kxQAmr}eTZudDXVtDY_up0wrwKa37eixAt$!CD}1l7GIersqtcpRwx+&pOhe z&ntdFDeL(cZNkQ}Sc%aO^+5F#V#UXhh%(AgSaYM4O9=83)*M;IH#>3^9M8p?B`QE+ z0tq_0paiidqcHUdgAz&_<6oSwQfDL&ZUe%3ITED_`JNm1(KN{e)4=S)ptHHZ;L9tS z6Ingt)5Q>c{*pxIK)ITUa`YF9J~Ua zCnqS9uK0V>14_nIQP&{IN$1n+oV6#*X-x!7JgJ3f1z4b)RviL)!|^LSD0Quk9vi|;mZvKn9CtvY$0ib27uHtQ%jyUgRcjJ7 z>9Z}NZ6d%ZBN#Rj_vb0RjF0mmfN_6T0T}n^egNbCXmkdpY>3SlFpV4ZMkd7j0G7%* z0LBeE3*fwu$ns18%llqt2&E?T*ubkfly2QiXDiGRvc!`6b7w16+laV{hz5L^0lomR zMm?4}-GGxbK#KO({wScibYe{Vg4aP~Cna47 z#Dy?i=tJ|Z2X;bd$l6q(`sHd8{a4 z8F{K&W1UkeM3Mk|1Z`LnFrHJgbzh=|r9hcoI7 zk++kdq1Td}8h|l2m*QebIUm4K8%g>IwJ!xQ)P`Xlp|VCdm)ij>*1-UV$_D}%Dh~p% z@~gh)HQ!JkbVf(G(N19@lrot9v{zp*@a^M%|;^qvMVmKGvFg zDlvfv$8~X)wP~ijJmXY7mFs^0kjHa#jmLCyuJM>Y$#vI&3U%|``xq_q+)vwJ9pt&Y zKS@ZZJWWqlW}C4#+ZaLjGXwCaJRcCp@aZm{%vdQPd?I$v`yA5zSHzOB;MGjXz&ZS` z%!~2LQuvw_cJ4r2hNFl75b;VPK18HP_&py-WMB5q@B?-9C^zD||I2+DT$XrSbsdda z&EmL;Bh+{+bq(%Si-%vR*hAYuM(tUk^L8b?cli;QdU}h8_a&eXffnC+tA}g%f_ODq zAA@nwr1Y=Y4?jmE0FbUK>D1hxxfNK&3JgU?Fug&iq&{e+yQCtdBYF9`0ns_X1rx(# z4V9cKL(n{1{NODbfml_dYU}WJn90|-5656Lq|7+m3|TFXyhuYq1T$+z6t)(I<+3x1 zl`1}`)ESzZ_A#1zE9s1l1| z-So6JSwv5(drVJ<_fyLN;xv2`YWfH7I!!gX^G9#%a8<5=Rty^-E2{{`|L_a#p&-6kj#M@tk@(j-A^GXb_?|H0NHjrs;{Y~9T;ebKf&%xuvP zi=r7NO)OO&gzPb6F67n|yNbL(PA5osk5YMO5}jwV@sN4QRkA6fSAv{uC=aFUD1IV* z6GBjKHdKm8Tna*KkSTh7{A5D7e(clpP}0xq1$Q4>)8}1mZZ1|+(u9}B1ZEFZ$vw*& zwapE{q#%8xwp>CsSXWn5(w2=!TJj#9rr4##tD+YBa>^gko?P_Piqy1T6y=4Y#+rGl zRul+Qw3|T7GC@SNESxKPSh3Av9YFT!P_ z0n-$o{2C}Js~ZVy{8v(zGXZ==6(dN)Y9A$K_0U0AQ3h~Ax@cSO{K?b#Lq{2#AtToi zJdG2Bh&_rxjbbA9L>hn#Z@Y=ue?VG_%;byg;ykcEvmh%1L`3ZMP^+GBj=($)Pny~$ zvVZbucB4gEVEB(@sBTj*pQp4m%0`QH9g#Rllw}$z>}V0X$HeOoaRe|tB3?(t#A`m) zRN|Ef5+Ghn`6i?Z-x5LRT|zu*LjY|k>5QHFL{f!JCiotVAI+ex01XS~V~n(uJKoY( z0_P-#bDmB-PW}pL%lJ7&(mAY^&S0L7IXQxas{vc$i*d09eKLS8&7(765F@m-p{9(c zT!hEop(z!OJ z)QFgX#F(euri2;d24sXJ-XU?> z41a`ep|s`tm99L_FZ9;UfvNHL{{gkW1w51cGPL;`<~u`=?itKkNM#Lk6flIj3cwKN zd;rV$A%IKIqX3TsSPwl9U~Tm}fVS?tG?2Ao5rsA%_GQ+Jt(9`qLUe-qXAo+0_SHQb zGYgH!EUpa(Gm9|QP5QRZ4{?)DX4NnD^n^WVCys-OK6$G;t0Sj{_?mw<+9zE#8WYlHLUuCp8tf^IZS-5p%So6?t0h z^d4n8wKqt*?DC#eSP`b}&)(Y#!#sedYNkyLcH3h}VRLMt9RE=$9O{WXMGIVb9{yTJ z{oCKyQybS5P+K~kdW7szrs!O`%WX<9t~B9OuCu68Ty6JjQ-Iw5aRg{W93G>$Vl|CM zpJGo~h^r2S*c@l~ie?9KxId#c88iGUMcvThRGlXXiR|08Bc}1VN>0`w6qx zd!K0uOruU>=da$JQPA~hcdnW<>H-CFTm0_5I0_&S7gc|h-Y`e4`Pu?{a0@zn4uxN# z==FNY2&R?)jjDoA7(^uSXH*qflsvvJye?pFqFWk!uE%mMXMvVe>8Tn>*Wp3+3Du`2 z-ooUJ@Rsv=4)(dyZZltmNx#w?6?cq^_5uH9?$qp1aT&mBS6YJegj4kh;s|!eIYD`F zmxc|}kCIbTb4nJ3>41A(%)QEy9;t+1ydn6r{DuGRMLFnW=dZqmujfCghQ4)Ss`Wrf zyFtg!^DAh2IO9zNyCYK;D8nLd9RH~WEcFDH<_N>7UY`9R+G|Ni zzJ;h_RmC#81E~?*lVPeq5(Pfi1knzJWSD;7ki9GQxTDAB2u=OfLlcI)x0rSv#Lsn+Sz`wS%UpyQP2dz3_P=c^)AsET;=}^h3S~R+h1I$vCf1}u6lcP zg;fvq>4Y82pjLy5Kz6V#2xn^U=aGB%EdSy$&=7H-*=od%V3KA{YhW9ca^-X-t6m!2 zg<>`cvlEGiVSWN)^^bj+a1FE%Z~Q|aBFrE6Azk2k4PAQUXijPydenR>2eN*Tr=mJr zA8MUdV@%YCHPU+Ey0{NZowWDR1`=LLmFfodgQ}-S_l5FE&mBXu4Y*U6EM=>`N0qi^ zs36Av(|U1kQtQuiJS*cmxT1;Y4bPD~pN(XoVyv5N8ZM z+>Ee#R~rO62x}9pgA$BN4V-jkSV!$?os5<7a&lsi@uFfZggsIbOQUk0$$7_E^v{Gc zo^OFn=4&@*nU>f|-j!gYl8bAG_fZr^_o66_{*4l87L_{Sqyil(V4a;uL1>kLdVpH9nPmvLYp5giD6`2DSTeLD+x|O%D1=Pq zI&q9^I$TjN4W@ZASNHJMI7p0rTk#yr2f4cA-O4vdzTlfH-}23qTe6ZdL52b|U_I** z&MaXL@GM|d0%IE>I*3oD`Ji4e_F=m7ks~y=!4i(Pm46M}V3u#>G>9MHo(}vD)nK)FT!m!o!yF&R+y`N8 zH~z)3FtX_B;w*~N)bMauRFo$uN;Wq|pSPmCYDLKl;-YX-C(fY}=Yh&Dfz_Qu=&6`B zi*gQAX;hR85)|c9EebnqEy^|IuRLzK34jLoK=zoq!dBbq4oM(L06D*7lLq$-h97`3 z%%n7*5agxQbEu4)Y-vN_KsxYEOE4CEWiV7|44$43+8GKOzcP8~HRP3#2h zbYH|+VbcK4{1ZQ34FYX3P{WSN1fU2b2!JVK49+!U0Ll=ttwe16{!~M7trK_skj)aLd+6n+B z30b3~)uokJ^CY0_$-Goru}*jQnzv_IZ?7DGn{hHcv4`D$&N$fvaqxJq4k%P-q#M^v?Ml&icSJRy~ z$1DcG-X&x21^~v7#d!HvQaA-nuu*gpfDP|GfR}C~%*lA!T<{`TX_&hfz=r%Hye_?+ zFiQb!2;TuN=mEl=xlE$;tmNQJRYa#ZX(jWSN_5e8dJLy zTtT|;X*_hh?p9h0aM-4-=%TI1vg1zwKkU5+Kvl=KKfKq5L&u|nZVSevVvB&ip-C)g zG}b5@H5x=fMQNdEOcW{7#8}W+G4`%W>vP-)7DzEW+q(_+DH;ayERx?q#@|qC7_{|vFH+#iwW@&vz&DL2jmay zPt1*3KZITFCJPaYo!suS6Q`@+to4B%=v()VY8JUH62xd|-!kvV(KiHeCa}~|cP{f% zD6_ahLQ;Ofh%A!jLOA1+_~CrHy|_2a2r|d_2Z0oq9>J^%<_LA@Um%v`u(H(lIs4%t zbV2oj?6M$?Lx4PT`E3}4lWamLRT^Q|l1t?P#%wW!p*aJOO#;B#I3+<8qhsJ8F|ENd znh~~?}NfByK zA+S1_Gy`gRFT2}ub`l8uRYUPD4aM)7QOw2pW7Ixn8nFnqX~j@W+0bCBXze=%TK3jf zza+}@1_d$lO!Ec>;;oxBk3DSY$L&pYn+XTfZV(pKpz~&$ij@?m7U1)#1F?Zt@*Zw5 z>lHmRDAG3)B3Iri3sh{T=?-!Mhe3PA$*>NRJzv|P`3qOESc!bzxSX|h(u150_0Uc? zQ#{9s2V7SR+^%8Kop@KT1@xrippzUVTRs+kMD$3bnw%N%;gsy}jdxEz4iJEE*uxhF za&yyOD&rG0+&?BHx>p1Xi=&Wb_};R|`2%Jctgj*&goKYRhAd00<@@i<$auKs z?sOm!?Z){iSAljy-T7=??GyYB!pi}i-XiYo;P){CG%(E{JQKBT?F`FAyvzK0fR?(~ zgWj}tS?Fe3m+yUmu0zwy+9l|0m0-D&wLx!JNivAtFtQ%P8%Tdv;WRC5|0rX{Eg7ST z7(97D2s2cWIKSvm_(}2{WK5Rh-{Z=a<9+dw@SeClKzx`{pLJ>Wxre7t9Vb9x{Z>nTGw_KZ>ctSGN~}TTTQr1wYbmXWL}X& z6q{;G&KEhnu6FYk0#4mscT;GT>}Fl3@KLDyD7hM_E*pD}h$4`_nwwNdvayAuBSz7} zGb!YOz*0>MT(|;k9mzR9mBHxh=m%8R)pcIWz;(55WmM+Ox_`QW-;z6nHb`YKbOBNS zoG`v3;}c`jU&1HS<=ewBul9zZt_GLlVIh!=!3|ScO^MvK6H7t6&8|xPBY93$TrGm? zzyoDoJlD>?nDyiA^XvI!U?&@3!1*Q@Pv@?;tE{V8xUFKA6_?h9!T)XsPgFy4{$7Nu z;e3M|lgD(d>0dS-9*mjSU1$W)WAu-m1$L;8$c7}`SSg1s>IRv{d~ z%IOJ5a~!;H2pYCn7AbL_F(+g%Ih`1SiUq}R5^r=&Y!u>8X3-Fd^f=THFVl+wUqimd zBZV8Rv>Gt=flxWUP~0yN&SBm&8jQhVDyDlh9nbMsXs{k{@k z1pW!F&dLdAnOQsERYPF=I?l{BAK?5~7soLFoN~Y^?5CkdyqUgnpwE|KNWr{z#=(4a z&t^I+JkL2uE?vXM;Ktg(e$m5Q70uv04SriJ_<0fhLQ(Jz;o%`g!DR%$SSp%io#%jDqSlE^11+d!$GRzQ*_I2`>=66!=wAg zL_~x~MspKl77Mh42nz|beP3L~+dUX}RT)`w46ob53+!OUzD&1<1qAiLwUS-@#{_lP z$P@0)o9R1|xw{U0g(WdXanF($wTZ^BNZfL0S@Q7@#e$>fQ?AK!)|K=)?z^(SOgV5@ zyx{_>e)_67vAlxt7nAs`YP{gLvea_Q%)>e+BzZ|pqU7T`ZI>GTbWDdcg|X6uBNEUb zt@Oc?tMd`H*6(tyERp+Vk*5#p^$E#b|vqd=gNrk?D7JKk=cT~Lcp;;1&+x#qh zxMC5`-j&zdWR@HvDGeKpiK@~!`$QlM^5LI*LZ@L0%Vy4(gg=g+hdw({2Jxk?3RcvB zFS|(saZvWa0Li%G`!Nt%8Q_E)hn(k6Lh2P*OAP~?c??3fLYK2gMeEmGS`JsNtFtLC zA7D-vm=&C?#1%THi=Z(T&_nLAY ziUrjaXl1L*P|PAaIUg7EsICF#QQhnI`{|INSIWY6SlG%d?_dxu1K`YOa<@fwOUP#( z>n3bUO*q|Bxdr(MR}0hKg!Rdg+d8@?PV0xDL6{Y=udwtfa48Lu!Dv zRo(CPENkQ9JQlGq4q5tA2sp??a-OGR!h;GyWb^@*fqOKku$vfAPIa>ux0Et&%b8(K zIjf_&_&Mv&;pP|PVWp>wG8IXLO}F^E7ks0rBNUU z)kroJlkq6a$5@CVABXh-+7KT31Y9KfBwWBo!0&6=wDaNAaq`yQTl<%7NL@Kp+$V{f zi)*5isKQn?4NnP&H)D)sItYv4l3W3z#cHQi&xXZ_q=vwR?84&5bE>CTv6x;Q(-k)s zIp1W@T2fh!wS7?4S(U*Xdj1L`dm7;@ApN435bPOe~NA23t^D$0cT zU_Fr%L|{t0a?-8YJk)^pq6#jFILsW##&meynkp1dt}-+jWkv;<*(y-nToce?KuxgVt+v!u9L%)*Aod-B z??79^w$%Cj0Zd6gE7*p@<4_97<#m7SLZ^8uRYnWYf9uMfnPO0O{cB*OPf1ESaEd4d z&Yi?OD3DYe;ziVg)Haog8=&sNI`BmV{wolzCJ>SYL2CzfhzZtsW~&q$A?bp{B4R)- zr_c~?S0g2zKeK!mhhRw;Ffu4$wB}&u^iG@3&f2hN>9&*Rb|@*l+#_;w92S;DE1(^@ z{)I*4t@3_K<*8gf4XiAdRyJ&e5WX@jU$UhpB8bz#s=|Us`Xv_7Q4&uvZ0OZ;Iyvek zfr9SNdKG%Qqn;^f9OMZvk%O-t$}^#bWj*`yOg2eMl)dKi+^&L}xks=Fp*ZLq+Jc>< zN{S24VrHR@EPoFH02S+PDvn_T>$9kS*Vp zGtjDYuv{%$gN~nt<+xo9n$MPVu%M4BM{H|~_k8W0r@bGPttsYO=hI@YG^4i;NON17 zenY2RVnz@X1pfE$!%n3NLrVtQ}QcF#;Jk>6;Jb;4cHf(O8e+1UUjfl7FERdJY_{i$k%{6;E+$ZHjAgx6-$bzxo;lG)3GcR z9dK|(C}t}IU^*!MVLB?l6?IVA=~Gb$!W>zJxD-~FYpKFyjtZG);$l@=6vy;$Q(CV;bjbj%R+k!=efQ%*jSYz3%Q$EFM{?KfK>7Y!h!20wE zUrY{*t%a$4;J=cL+b8UlzCbV5wj_*ctXFTpPsm^;Y_{W5bcF6dI{Tywc3=*KJm}&T zpqwni0?;C5+6IJ#NAVe>ql3c&-!$SoyRMPhIGJ3S~6`+<=g|#{f zJzH4=2f@l06Vif&7KH;B{0yBRY71vv?XAlzr(jmV1pxNgo^}N$Zv22*Nx2WRvU1wh z0jjdldqe}f>WbMPq6!v@0pHdvUqCMhhuqx4eVI8XXjm&BB0H|6ggM(oX?PUW@d-WIij})> zlI)1is{9BqMZ+So7i32y+q2hGcvaM5y>NmT1|&&_R8dx*KtYm^4Z&_< z=5~}v_=cF@yxy#_I(&}IeE{Jse24c-A!Js;=b81JD~jOK|PNlrO%QpuXVf~?UF zIqiZ0OprD2!Xn6;L8t~n*7Swt)C0iyp{h)aZo@LZs+Bs?e*()tH_>w*l(mQ^Ci*h4 z@SuoV+E!JkPV^J2+ED&Ogt}{Mqt5c*SGH4U`D3t%S^hvJdv%uITGn2j<#S=d^r&po ztD28-+Ixle{<@NbnB|q*w$KJfd%3Pt&@NC1Jd=xwxGYaV41+b_mGMwhD?ac3ah+-N zuC-_wZ>TRHYw6GfonojaCRQib(Za(ME6z?tOK{`^Bk|ROn=J&qk-?B`f9zjks}aI! z6RR==k&sPwro_!K+Dy4p%#=$oYQd8*e1a52MeStEbP+{Tpz_Y%ctF9Gc#sYJ;jxnU z@#>@aW=zOAJP=|4+*bw*3q{U)cZ?MJ`uYZ2*gqN?yVmtT7_o|$qw`6Db~>rE*cV4r2Stil z#=##VMlxN4x(~;2pr4l0q;%A=)h>FVMRAnMVDURFiskBRtmxHhh({ctms?gdB<<0T5((lx-(yuZ32J!cn z;a2)N4`QwKsYe##*6EN*xZ_;k&vb)cx6*g^UCLU1Jf3O~xQVjm%DcFlHd}SFnv})9 zr5-Dg`;bsF+rfVz0`c(M8B?pg+0G>(fDz>q8esayx{cM8i%@$m{a7LPD_~%`w5m(R zKmo!KXnLgcuxk4w6Okn!v;ye@$*pia5~t2q&e7i@Oe+E@B(auKLNbGyN|Y4(=vCdH z>#&o;#$e@sloiNIKAgXcMfqbZ=T8OAU(7TWA&{KD#%3`A8Wd?&_fs}jrWD(^tkzG( zHndU?gT7P*nyr6Z(Pw;7tX9csIi#B+Q<&MSy05UcdS>GMlx!~*O-t;6gyr0eN*LLoL6OlN->!7%G9-T-&5uf0OBTDbEWW}Oa@pT01Ya@RijP&^qwyP ztZDj1?`7rAYJR03d4slL34m${PkuW~HC2G0hL|RmGrR=Q-L$S;4J-FA%KZVrdqn_i zX#i^hpt}k%GSsxTeC?M2)-jzaU&qS*Tb$=t`jOGD%|))Q0fZ6_v|Clid7H25{0)TNI+v^z(Z zulSO?h@Yz?ZtPlb77Ztuq4YKEo;!J2aGkpl03RLTg&8E{){L@4()jjDaWN>r`PkCVr04T5{~u$+yoyzxJJdJM}RRz9M`t zX};ccZl&z|1a4GeF6KIp(MEC#z;bVRs9z9IpvJ%@%v&T8BsuK;2Bja7qm6K*BzmO9 zd6SZslg|}6Vw$}M7K}r-lU(~m1oR2Q1Q`|;Bql*0|7d^X^1Eudvs$?JH1})y=2TP} zAl`(^2S@H8>7qh{f+CC_yW!#3Dc)ao?ip91zS37sMCN!Ub*md!{2+13Aj_oA|nw`5Vl0>v0c|{?Pi>D2wEa zqk=5Y(QFhHN98We$SU0R#lz3}i+^3;>DK+`K5MBNegtH6;ZX4DB0Wuz2jhS_H~dO^ zKnA-0XKTq9zmguyl4Mhc?k&k91H@ekSm%@E@h{*gNwp0ApjgJLHKQQ=?3^MfV)7=mpWr=}L4?|2;jDJYTI0NL32Bypm zty;Bi?P2hbG6aVq6T59%ar~}^nj@p5BfJ|nM8^F?Muta4dvm~=UIMV1u3;o%`5OXN z4NC)yDZ^u;4dKHLO&cL=IKntEiVId~(_M1=h8I^$KA>lpUnZ_6{_BDM{@^o`dWmWh zZ+1nQv@r=`B_|yIhe!9MG46rHx6egejBY)}2d%Pqc_&<7Qye|4res=b|26}^g$oIv z?Z(~{fub91ksAJUDB^h7-fCH{Ot*2$0)WTUZG3jw zON%ZO=lVt*?YKcM599Q1di4}|P9bL#ZzK!c34uU;j!!FboOoZh2@?x|Sty1iExT#F zx-4bAf+`Y#TNa`a(;|;o7Vqj>a(#3gYq*?ft44~tY zSB$=t+!Os2D5R90EMca5-V8?7etkIa;GOGf$L_^S7qiMpQ}8PZ1{gVVUMNm;qgD$r z0I`YhvcZD_3>@To1&0P$n|>?PS8^-lz$G3AC~ur;!)4_^tQ_IN8`Tc=2(=*e&1d8h zuSW%yZ7HpP#Jh${JOIMDxeNkQ=)0;`faE#@CuadnPS|#!0v}`s4tg*Rj%#zQe5RF? zOy|qh1Z>eu)dJxpQAA-=6ljR+m2xQ0EL?o$j_a^WKO!Sniildaaz?aVyf0F9O2^uy z^gfD+1r)W2$i?*X()b3Le%m(Hfgh5u*|^!mS9iJ|Ngu%CM{9Ojxf@tRb6ic;$zRg- z_Ya8)GJ4d(s>8S`*e1duhxtHNw(SuYRx8#w);HC^rZ<=_5~3C#eZUd~niAz!ipjEz5 z9hp{P#~41G-e(USQC=KaFC53vtmf`l;f6&%;ETh3MESp3P5PC?B~vm)IP5r1s?aaE zSXRZNAuIW>Uk4$v)n|gD4>W%6f3*t@`2UHZ4 z{EdMt;4LU0jysW7d`7Oa0st@4mrJ6g^MXsi|VXKHLos*-hHe>SZ9HtH>Ye4GhxL-H3LU2VaoIk zibm}Mx2l{eCJ{%_az<`hg6MnuM@B(;6LqYHnXu}q8s?rQjLwg1$mlu0Ds^Cv1B07d zKu0*^Hab=Rc*y3_s<*S*8`v)%AoND08la3hfRh>kfw=mEwvJK#v6V-KZ?F1~4jO0d zk@|`1iDeQkan%#rw;1JzEJlM9nFITx`j;){?-zw&#-z+NEf8h{HBh+{fr26fgN&bU zLDLeTu$=b?p@IbK^XbiLS}5>2A{54kYU|3WF|*ATN!fSF^F=+?HOK5KA1YfryP4{U zgCVt4tb@abhZ}33X|Hy)WFC03`z>rDPJ>?D{VWr9wLgNh?|DC!<; zgG{)G4%6g^?4R>1K3nUitiWwU4Ro`1;8jg$IwiLh@LaKcq%+-?YsreE&NSVsk*wUa zHsxDwhx!?kyN2y#*u@L0M-sAh%DUMCyt1uxcHs4;b>=sCEw%Q2WX+-1$Lr+ollf>r zOfO*ACt<)6|7>CF;S?JuoD1%_o% z8M;O@e}p}428@uQ{*mJheZbm-6T*lz94$+5Nl@{Q9LKzye^{Ua4K6H-XIy-X6ghHO zQ1saF$kBkj-KGyiu4EV<86IlD1uj96Vg4b29zH^xPG*!YPG;4AF40Q1NWH;^AP@Kt zMVYaO!2q6c9IzA~6$CcTl15Z`2sl4W;Z=_)sHKPaM;b(TG(?Y!2oem}THC%1y02ki zc#I(c(W04k6y?;gZ;lAOa{>A?aR1WK*(We~`0$`e=oADQh6VAQEt#I%_Gjo`B4$yB zGz|n5oh51kvyRBtH+GG+qNmt1gr0%}({jYw92Nxj6c`YN9`#bA02V(Q2gWjzxn|~H z{bP{DuxM@oVw;UA-Tqw$?Ds0b%;h43;ev5S>l3?9qYN=&#ULSl4J$9_0P)8Lg@gbJ zm+XgWW!de(Nxo<39TEgJ3bb4_=;)DVbfbj^M~5Pl20=n_@(7_8QwtLs&i)qF43s`3 zgi+xi$m%GPX`jO&PNAtG1noT1fFtj?01?<+G<=+Blfao;x1|yjNMGdG0*$TvH7G2b zpM5`Dv31?y)yAi*rYvBQ7Y`{?GIU!^PaK=b&7PpQf-*{CSN4PDukI+}jH*~{#*U$!HBNFf{7NS{{THj~{Z7a=20@Vx7|3}VrPCDpl%_&oaXQVSIW(UZ zLa7n5+>aSeT?|EXlHy~9=#Xe*B?U0trOl4&sM0Y!Y<@35e;Lx*_0mJvf_jaNj_WIZaH7UqYapgCt`T3WF>W67;pGhqQ-@p*-- zeo;9N##O(!94s_*s*PkiT#ip1mny$fIA)Y?rb0zn#9PA_>7C+3(Vvi)p$&19v<>G6hBJ?QQX_&m~KAX{+UM zAJijoldyrocpF&W7X^V|V0b{3mzZt*y^wgrKqiaBBhacFszY^D!%U;dm>L@b zgBXP)Lkw@cvNDkLSpr(kari;iH;G&1s14I${L511~Ooz7HNNs0V zl-<@q)2;L)L#$k^XRx>EBF<7eqOP)c+fY$9EqtxFoVge`ZIyhWWow1#*}oOQGZ*1wwhvmO*Y-A{TAoH=|5=r8c`vpmSCO-Rf#UQngl}&t)_MvxMZR~>^E?K zpvPNmq?-vfH2-C6ky^gg?qAicOSWYswXTLYLul~NHS2pdytE7~tO*O{ZbOG%QPbS| zQfjf|delesG`4b^TPoZ{9j#?6WbA5#i;52P_U6KSd;7#h3gQAS;Mq12{v2SKzO5yi zQKNs@j5LXPsdlu{y(y|M5`@l zW_@$Z`B7lMo!Xu)L#tL?L#Y2arqxt(jQdQW7z&FfXAl5lOh-b6^*eGl-^Sn$LM{{o zS(IU9_*h^sJTg3H#7L0)>ez{GsF(sQtOiJkP-aVz&REd9hOz$GkS<8^{ja~n5PbwS z92^~`=86@`neG6EEGUJs!5Bn^#yw(*prWp{U|xo02C0j3apADq#Ak~bLW6*o zK;|a=Icvu}x^UJSfu~~fC^#C(0zWV&I1q#~Mv9J>n(3$!a2|$`;L$;dy1-L(xMm1d zY_!%;z=xHn3>{{amuMkw9;ZB8%D%I`{;<8?ENZW8<@SmpxkP(i!Uz%V6>>AQ*QH*v z>5JAAxG=4tjXex>7cZg>iwO%15dzCg1 z!B1r{g_npQ9tQlQJt7=uOpwCJm8szy45WiWYzNm`p-QuA1>_t=#0(1wjvC3eEF!B# z*O;!*pwI~H3kR^=MuG(GY3PiGTr40{88KYc5&n^URt&crct;w7!DInGkcS9p(H@2o zkgKW*V=CuZOmvu18w)P6mYKRnIpCwQoy8Ig4rEMUZd^yhbebRl3}*TTO)(%SG9nsH zRG`+QF~%mM3s{2H%_^bd;U13!WSeT#apI-%E#8W$BE6k2?^0g1t(AYQ45l#*Kba7xuJu-H(<;NBcI7-zLQAE`>FsS80sAnr$a-i2r1S*YlhE~v0 zka&)kfc1f@=tm;9t#F(G2j6(XER_`w;3Psqf&!vN{bWvOA8tvjMG%#;DI(cXEyV_E zFs}9bcIwl=Qy)JlFnEEQ3Lgs$*Q+lY$XBg+9Moz!Qq!dYfFfvKOnGRdK)pI@1E}xi z&yy%O>&LBH%Y(C9BR3@<;?>1l7}W8)jhD8z$u2z1t81I=@r?<)%y4Y#MO;sToT!m_ z3Q*%o8BD#1DS&9%e3E8}K=2h7rxV=3uV8tmT36-FA9014Z6FoYG4Ja}AR_)?&{fEC>DXHtE z+ox=lY3rnv(>BWNbIOPwOKW`gSRjaaQh(mD9|P}OEOCQ>Byu>?ze)2Jtk^UX#JS4D1cUnc zs0d_~q2AaarYxA=@E^`1S%1OZbP#k5&l=}^goM1iN|ULStRWyK5^{8=TLlGWCSG~H z%S^DpOwtrlBLKU(Q!mc6z9f}{;>=3v%pNSBWHJ3n|1rU!fItqG67#Ec0*{RvdCkS> z3wjfzQDjixA`0pA&O$s1M7%;M1j$cB_NxT|7G#^N7g>GKnTIvBe7CiNrFfs2jH1FY zS*l6GhhsJs1RMK;_BS(*CFtK^jm%UjMbwTEqN~In&q$lz{(uoM2-10t1UB$}FM_pE z6JWYi3tub{rwK+N8Vfa8^eL){;IM#@7(rWdh^P?39evh?Swd-u0do7XBZJY**i&0X z08@q)9Dn9UkP;>$s3WN26b_^|ag@4V6sQXXV8;?AG_UiZFh6%0%IWxtbVcam?3&hz zybSG`?FJGf!m(WCfyM~(J}N3Elz9hUeqda_lmrlI?g>cgVpm?o03RY+B$|!7ju7P^ zsumhZ3?0Vp8#(@?JOISrcg%c9BFoApU(p8tAh6o!&3#=R4_*96el_Mv z99wA!f{;EalJSt;!_1A`W>GLb!ZpOEM?Gr6&b@7RPj*~-5RRYsWDbEHpRuF#x*&p! zC@Bz0uh8*ivdGlalOxp=ku1%Z<5)gw7Nf;D$``$u$m9es^EgGjk0TeidkOlin}GAj z^cjYb(o9;tI`3PO@xoGQ7zq0z#fY|*y?e@;$>JX6;`14{T9Nb}CSAPl;-%4S>{3Lt zu}20jS;qZq>a4}yuxW9mxv=6d6{W{y=7j6H#fP&r2ZgJu!F@X$RbB*j@A_KWZz$LpYC(egr{*7Bs4eHjfU9!B^*RF_7av9$zo#tzbgk`;)XDzyp( z@r?@X^r13!Ea2daL#J{g2%x^;_^Nw+^FeYI)ewru)s3{2i(}a?D(8p0sGJA*M&-aR zDhF2+Dlf)L_wL##HXlg|_iPmBkE9H|Tt5<-P)>b>_{AULtX57Y*9QK%a`=i+wsYlV z7OR}hVwICwta38VmBSXqMA>kgC+^E!iK+S1gmaW{VK7D3sJ%~U~Ukot!(q-IB-M<_lr|E2 z>1ZXYN~>^PPy2A*d_PmoMmBmM)4&ck(4tuWp^d&xW(wKpJzf0#FyYDTtzcoh#73E7 znikua(HCU)EKy*@Bk565jj|P?|IQt$46-b6Ab(dGWnz?(v;p6+*^QeASqpzTOJ8tH zQS+$f^uH?7##a;x{ayMViQ@HGeLcZTYh3KX1yn^o?Ejb5*%`V;o&77dWcu?Y!Rjn+ z)QTlJ`uV9W33yCnQ8{h>wW_oAcY$4EgOv%*wS>HGAvm(T0B!aVj$6>)}z>;}A^q!}-T^A^AbZw4}8co59Ww+h{wP z&dAlR+MXA%wyJnxMRMuBkuoP+iFEH|lFLdz{6k^NBwM*pWoPZ2N7aIDz7OVN2R-jM z=Y;sd2Bw{qMY&|kaeY_H%!7BShkMMAK!r92vXyr|na98#A~)o8iuWwy!&%xX#=z6A zQgoWDlRi)jBsv42XPcJ~E}l4%4>461-Jpp|Jcap690<*w z7lo2JuM$d)(Co*0z!;3#L0CBuN`+4mPylec#3h%-4l$18ax>Xk%Hm*ZAT=3`0mo9r zHv0Q1OhC9iPtmv5w?Sb3e?6%<-Z&;hP^afz+91u-^Db?W=IMEtHYM})yi1#sd3xTZ zP02hB?jl=}Sz!@CrCsTA&V|-se_EGH5{aU;KNYnAwsNV=i`(WFaJ@Aki58G6TELCg zQsyw6hTuDz@uohgYqs3qHD~FryDM+udZgX7hxXDw+D`{4pV2KzMkI)5FXJ7P<$mmN zz}YG6+iX1G>2(N|r@|B#09}qv4bAW?<>Q14=VmQ|v$dWjsih+6tKcfgQqN0)qIdqK z=)On)Qgo%$QJ^1FoznBD^6pWbAkzP+#OGz0vyHMJBxUqbB@6-0j_RA|g`ZJZc>SWj zp!aPaFWG}DL!B4c|1Xc14Bawb7KqG{T?TRb_;QvGa;xxY#XFr8w`0l|hqaPzKdfXO zM#=IHOSMauO!?Xz=E7m+GKabGQkWy8{Bl_N9RW+0p1JAYI7cM?j+Zt~uuD;~*@M5h zUqKgL%koTm3z6{UEFIx2cYllIV-Cs(M--PsT9(}oDb)`lJMM?1IwiAwjFi?Q6b_i` za7gKdZO2^?Dc#{D8RR@$NqLXs4L+p!u~Uf$OxzkeTS4#bH2tLQpPd-*h5m?lKDD8%FIK`?3WW|JQX4-yq@Ew;fY;}@WdW*xB^nk z%5h*zULs2;ktOjjEOws}wp~ic#R#XeD~Ka04yZSrl|PV3d{#c}ES*46@c~M?C&_tb z6wkv-qr*y54yZm#nS&apm4ix^gD6q;gHpYcCBn|`W(Sp)2xyL_z8Q@#kYNptY~_;h zkN>{b@Hm@%5fER_(kam}eaSF~-bWDbZhA*O_OIeJeBLc?h7S;#bFeJ~A@=E>eGXF8 zTE>k#RSoS`(V5th%n||K-OQ>WEDpc{Kq)wn%?p=^s}bEW5Q~UB6X2)EImkGNj$xXN z^tO#&C*xpmpW@23hG14X6aoez$b%#~C^AH-^$Q`XNEq^di%xiSxTdxv(VSGIJ^+_m zYe}TZ?`TQ9&5~ZReLqTQ{3D84m!5Yp2na0b7Lr1Bi$O3ePK+zAiz1Y0CHjq1d0*0h zpq25o{K_((lN)LoD520h6k41CP*;Q6TG8^Sw|5`&h6%>x?`cS-9d-fYFfIcQYd|w} z6KdJ0Q(}v#Th_oeR~cN+(6@A+RMWK4DxRl7k}umw6i}*_4dw+&@8F)rS80}fSdIlU z1@q5BoacswQ2h`k{2S3Ja!EP`Rx07JLB1WGU9^Cz5Blpt+~>;YE1kugcauH?2HWX7DBbx|bklb0rZ$;b)-R)y zYa|YmMy*e>m7$wyNaUPTayn*hBdXC^`W7(|0x2H1w%PZ+wT;^kuK*ig1eUD~)=Zd~ z!Tw|cd)@-}XKNd!UKez3<<#43`UtcA8*DeWWpim8m`<~BE%}x}*VW>s?B-EbsmRlm zVtS4JAGQ{|qB>P$r|=5wl>4r5%64I=cgnL_qb!?y#9Y4Bu=du z$|mzaaOvyF=6m*RcClr%r!WV8!}e9o6)PKrSwWcbI(A7B<`rwUzss4&F?uldYxV1u zuc|AXt1FkwE7!^^zf@CxucqIi|5B+_QK?^18SScsx$1ko7nF*+#|aw{0l-9C5llX; zBsG<)TKc1^xFVF!G|f#T>JS@fQI%fBLTSq+#dSwYtEw3hrQAy*bAXfdrCg236gC!f z0~XtgMK&dU(K?7&IpI(*=5m{A@v0@jf2u*@ zGjH1Bk21wD0-X?!{#r?=mym+umn|xoy1;^XjAAao*r9xS26xdfX4s;{DH&`o*U%9_cMz7^(e;hs5*eE|~gNCaVi6(NxnT#yAd zDTFE3MvxvHkRE~n{|JJlU?LF}JbaN9Oe79>Bmxr&!UT9GMiC9=cKa_T0@)6s%Dof_ zh?d3a7)U`)f7Wbm9FFIt3bhi|yz8?KVXN-7=3@Ti!n$WyAymnzH075R}OA5!FJ zioDuKo>y7^tTOid$WtoIX_e)S%JQ_za#A%py_!6=nmnVLe4(m*xvG4ls(iplF7%PN z`pD~j(P!|?0e1YKDX(E*X|p8`#wrgW_J!8o?1WX-nsjy z>$$ugkx=EQ0~4-Xy80+4=0=j&hfZ(o@|gKe_M-2uJ)GKm!^NrncAbA(q2*7X4A!4q zTP^eW^`Ht{tIcnd7c*qW@ciap*M@AjtGeT~+lFbk@2>dtYKJ+`Ce@$m?rrE%x8;{L z<!g} z@BMtG_nuC-cWiP_S+cGF@>=J9>0QS5b>}{IomTdL^8DoYC*L1Y-xM*gS5&)#JJnK} z{5Hya#aF=>>$GdMxZ&rMuMV#@@X)bEGsAn`J$C#>=Cz=TeS8NFo_l9R?O$K?8yaZ8 zefzoin|lsAjJBO?XtU_uFNQzsGp26Jz3kUR^LK_O z6+R#K+DO}A>FoW0eygXfiWqoJlABH4U2ejX(7EgS+t(eUbKEkjOu_QB`|MH18~2qzUH57So!1-hA79%(J-zSNihG|9$T}K0bmg-T%6-fs!$jLwbMC#hwnAujFTZVDW?xF(Gs!A{ztwAR{Z=;Lu4!)ty}4l5kgUY$bDm??yz5n|*T4k#=q6)aPc)*%?VgU? z{p?|I=qG;P)9+R{obI=}6JIgx`-SVeZF;fr?bWlRd;U7#X`AZ;{~eDOOr2*eHhA)Nj~54Y?j9fCZ#6EV zb>|i3!xlUr6?(PfdH1&x0*5S}-ZAaND&6lcAN9iOoxRgKo%{JlJ4fe---cxW)PDZ0 z3Ad)F=^DP6e9hy>!K?b@A?=M{dDW? z8s8q`oz$o5<4t2ntb6MD-S>58w@Fztpu^dL_8YgwhA)5KEbEzTcGsHiuDYzryMEd+ z`%a+K@w4kUZ+zV0@YfS-kM2A+Fnmk>`c1NipR~Ok*tSojpU#vYQ(@7FvN8EX8rpw< zdZKgNH?xB7Y&9KO?XX3^t3sJ_YbIy? zUpBpYX~}4t>)SFuh&kBiX1^cbd)MaPxo-Y5brpY<>mK(xSmrJJk#z^n+Hhx6o8CQ_ zKee*=IdgT-j8Vt8R2V6(?Uk`JGXxDsq&c&ls0?Z`aP4KH%2!-AxY9 z*;GS%w6QWRzi@TJteEQqu91hQU;M#~hsL>guXFDEfS*deW;7l zpnuA4*GdlCJ*$PCc3qTGbDZtex!>M89of!q+&V89d|*k2wWr(ZbKSayM_;OBt8`oO`y7RSmFQR{r^KsBkTe79C|AA2ler?)oWdB)j zjZEJ(blfk2AOF_4*~ACCk8bF3_q&*|heskST;7=Y!R#N_J6x!@XX7;g8e?vckLnfq z?yA|@fljL??)^UV?H}U2_H6I{&W9^9L&LVV%Zv;kS8#V>&f)z&ao-%i_Crqg?F9!H zr2J}|*6ZDav)9d>Rn7KvjjLU!46OU*-HIVwEn2LK|$*yD;5?uu28Z1@O`ybt)BQn!1eKg?yaUh zv)$Qs*N3*-L+_N&yBs$v=*2r7?^b`3_w|h*y_Q7JTv9l8*K4Ooeqw*-fO0zQ>tXFL zZ2D?Y{!jK!BUgQU;;o=t@|aI5uUv&<6n$Z z+f)zIzdL`4ZJFzhhsE@les5w`xUkQ@?>62GmwNSG;#uF@C9c)w;Ed}hAA7CNc9nCR zR%_PoaUoN<|9Sp{f&YUT2(nrO9@FxCZMC-eXTH^@;-A4*TZ(^*SngKaUUIX5`;X;6 z82I0ffi)%jhqKkX;;r4*YIE_=<$usW0{+uK{`*?MG%6@wAAcg@>Hl<$KLPZAPmqlN zpA~=VKV9A#9ODNX|5CfEV>jU?xBnFtKc+(B|IUp6-PrxnYVw~)L_*Uke?IWvozwpV z@Ql_wUdA65_dt9?w2uO^Y5x0fDz8W!X`26GQ*)xGuhPY;DKc1;EjX%q#g-Tx8fyu| zcQa#HsK!Q7=s#<#C&fxQSrSGv8wc44mL@{QmyH2ZoJ3)4tY#yZjbGW&OYstQW5b_~ zOg1*L@sJHGDM6w)+3;m!8XGIvxXQ*)Y&4S0BSM(P_Gk0_-xkhRN|vYv8@<>V$wmSj z3xF-UZVf}^rMgwBX1gGnZPleTiQ2J|!p34YMBsyLDc|ZHkWM=EuW@8<(5UO(0XE*IgD$ zG>#VG-VEo(5^XgsEnb)d(i(|cN^3Q@*Ci0Z3#yr^V0Q@w@MmPEf{hXw#HP~L;sD|# zFo=)YXe(`(D2bxN_@7VrDVax=KarR5R{uW3$e+mWzg>_#`bWdazc9PD=5ga+ zn1%(kzg3A5#Nz({YH6hdmGR2RBPmYv-C?oWQ@rN(zQwlQVk@-RdSZT7AuqDn9$Rd$ zO!D8!!^=Wel*-iw*-USg@+fCzrY%Z&75+i)c95P<;6e3 zSJmq)RdUl?>l9r*{zI14Tsz`r13&ivXP(F7HB7lopqdkkVXX*%C2aj-XFh)fA0Nl&NnzHEXM40T_Y1RP0=tY5<_=-nCsMOSc8n4xEdPqfIhnkZsc$lcK*=zf zliQxcW?U+p*MwOsjeKyLbsD?ixtK;ZCTsR}lj#SuUG;?-na;j#r_d);v|tvmzizpO zL!2b3?i}hjhYnyHza-7!g8`(ine;T1d=}CEMHI7?d{-AG-EFOAx8I~$?y6h-a1xES z!LBG@ncL~{b}d-0y4|VBlWk$x^Cq75S(>GOHpw~EFoy;PQk}2cS02JB&EJRDxKN+D|c=`T#k|&Vu1ah1}RVL7b3G{dZ{XBt8=w7j88%s{H zR4$g3SgICF?y>YnEXBvtzE}#JNO=>3DhfrCMVG11iFwwPZG!@kv>SI(TVhS67@`?zDYD7i9Sf8z$6-#L=j08lSH2+ zQG61mCegGcnv+DIC(*JbT9ZUyCehX;%1xquNpv`gP9)KpB)XVHHuI@AK-@63>uw5Q5p1c2E}JkY6eZupxGJpc?PY_pf59MYX)UykP-6x3_6}cXELC< zOS5OvvYFI<4&~0FZ|9J1E>)jT9`or!Ce>a@G0+WPOkXV}(`vF`LwnayleIKsE!AB| zv)9p>O;lquP2Wt7wovXC^4v-%x6?SuO;qsq#MmlMvj(aG0583Rc z3VW%|UP|9fU+ksO{bW2q`w!6J15_)YKF+7Od`ixzDfyI^L$#7PwVq(Q$Fp; zr`&wnpHGML>0~~g%cslvbTgms<+ITAlCw_Qb2|Rs#8E71=OT~ zS{2Zn1>{pe?-Wq)0_tBtg9~U_0gWu6kOGPB1AxAg?FpFm|NQ1uD) zXaYT(K)+3(=M%^}mK{C2Pn+WD`*^ZSpmqu5n?N%XXhi~DPoSR?s8J#fO{9oK>Xt;klc--3 zy`Mz>Ni-sfLX#*mi9SlA*d$6yqA9pnC5h%I(c&apnMCW8Xj2kpCy_CU3X=Go>a?2i}E8S`w@bSs@IIpL&jr%T((Ps}sfJE-zbs=kwI@1zDhsqs$g zx|0U)B&#fP%c6!^bU%x%aj$7MJmxS}tABr6zgw zP9BZOqX~JmGLLfd=vE&6o=44g)7!hLjFFlcsgse6M*7)E1NTtK9N#rsdOT`LrOPmgdu%eEKqKxuP}c~p9!Zc)sk2|08)hxYH% z`e0%%9nGZ&x%6fp4alRYJer$FoAT&v9zDsUio5BJ-E?C&j`pE8Mw)G;Lq=-0hlcH; zV|%FlUTU_N#_y#yd#Trc3O%5~)aTRif07XM1oaY2t7GXM-1#?=yyIv{9DN!`8{+6v z96gUCuXySmPjT_IB%V&j(+}}fGl4oLP*eiVN}zoSbSr@>BvSK48ul-4kY$poZ8G&s zrm$p6O{Npcv@eCqrPB0NI+jW|MT4xJMxE2>(==Kk8sxn+>NuIkh^Bb(r3TqEogSrA zr76_oU(+COXVCnaRBsNwH-`%5(DgaAY97^^Pez zXzW`0Y%R53M}0TZC!470W^&y^&9=~qEi`^BeY2HrY^7=2=*2ebww2_rk1GV9E3{z;}zotRzX7WJMXbuIsx87 zpd1Rf(%o&;d^^Q&rz6{`vuKK&|ENLw?xdeYgRGlHM@56wXVZ>sa?GJOb7*u9P0XPa zIrPBXAX9Vc>s)%2OC9rQNFIIk|Fw4=a7`s!|IUOGiiD;#QG_UF%*rsK!^vuYacIB-O+6^bzs!*8lu;{J^=`dH`-hgvg zsK#sUy5igXMwP`_Mvl0j zBk(F|Ux0>a&bcXbkmj75-ZmxY+?=Y%*)(7Up}nZO7fl0Jkt6Q=#A~D3R31RkOyX@I z-dW=PLA*NTbel$t(;#}=l_}DQgSRNZ%uBD>9$nR<(=o>Kh|f=9jx&bcdDz6^C4 zj~0(d*Ted(`o>>>P^+;jd+4|}iH>MB zGTc-kzIr(OK@GGy)9Ds$$FDQ4X=kLuixv^l6)Z)smZH#nRGg27uS8wwxTa!=+{iYc zv3d*kfqGFathyow{$;z+3-uPPD!Pt8gpO-K45H&2fTr|&T^hC(`_U_{E!b6bX{-sY z4&n;g;&r84u*P&m%c4FoN6|qIz*6-V?7d>-_vgp8u<>Zxcywkw8ax3VrwW-yRq-(O zt*8YLQuO;$)FvMlF~#dq29XR>+12(cG#EIpGj#;)B%xNPV$dA%#>S z-%)?aVOC26)e5OlE9Avu)a=hFVBD2D@+Z4dCnr?D*`6JA^t_`1JJKl zI}-d^w>p98lF0m=#CWTf?HC13sJ^M9@~FPOp#HB^>kd(^TTQiY8r6Z%X7W`6k5jE{ z`~^b$D%t<}L|1*#jT8QnN&CbSGu+W-s(UV;XhRF4PAR_VydMGELr`ECt6&CkXis-! zO|`BpgAjwpvO#P@>WjR$8mX_Z`>Ij3>raoWk*X2GsLBC(64kd0)aR&GE?y0)#rq%O z?=FFRO<5K4qec&kyNwz>0Dpv3YFD?oO8hUZl7-r)eR-N|5}4RT=3)}lT5Yw8DR9-Y zTISSVy`=tc)M^z{tF?w&t=#{R)jC0~R+Il8tF^kC)e?SW($!W=>5hJ(R?F8DZKPIf zt1r4htyXCW3Q}9Gu5svOcVtJc)&pv_f@`r_QN4Aw;7#pTYtv(0=IZz1YO9q^?bXlJ z*Has--fB=85neGvh^hXslH+rT#A6+#qQ23hsza+^fk~A&Tr2;pi0XvMRh=wNUy~b4 zr#Z1qT46LdRr1yS>P4xELWQDAhm?se5lO8k?kY6GO&w6#vZ+N=8JRMXdP9)P*QB9} zOsM1skI`v8-^Mb*Gj%|${!f#}X90<)NeGfxVJ)gUwE7j8h@-{UsvR(D6_OO0O_owM zxv_Mb6U(F(Rz0`BLdn2zdb68&z0d@Bmy38(l*KmSG7Wm9LH=kW8#+saZfj60%^L#Q z8gx;E8l!AB?q4bE-zSct=FH{*R-fa1LFo`Vv+0Gwt7QKDAD`o3tbS{t$A8y5MizK6 zTh)sQj&SPXWeiHj`SAH_1l~pj=QvNX`W&ZHB-1rVIFvR(bA&^0n`w@4=Jo@Lrq!qZYHss5@F#hgKkNV1-2P4RzTucv&uJZ}S#{$78%h~%N2rdb znk%c;_gC^K5h|P^6A5K0^&e5+pPq5fr2Z}Ht8!2MnnxFg-&85;sj9bEs~%k}r_YwDN;OP< z*!f5eRCEzN@3f-lox{J{sb?el0uhn%a&pSU*A97FI zUqzm(^4vOzTGG?aBGb~?^9pzznT7+ zeO7;-9YntiONHga=R!k~y{Li6S=2<-ROBgYC2A|`Ao3RliNZuZMVX>((KOLo(MHiW z(N58RQK6_rbV_tVbXjy=bX)X?=%MI^=#A);2#bxx=3*PMyVyhQC2k{bFYYJ~6o-mM z;z)6nxU;yMxTm;}I7!@JJXkzToGBh99w(kC&JiobdE(jP`Qk<5W#Sd$?czP+Lh*U= zb@6TSAL6HC!w6o4b40TU?+8gmVnj;B(1;Ncb0fZu$d6bXu{mOUL_x&fh=UP_BTht| ziMSu}CgOdBGJ+#9l$c0(5-W*~#6i+f;v#XCG?TQDcuU$zd?f*rU`emo~$4VDd)jgpO%O_V8Qd9wMk zMY0vL4YD6(J7s%hCuKj&uF3An9?M?KKFF|~D>su{%kAY(@+NW*d26|^JV-8*%jL21 zUh*XQAbGlcw0xp`s(hw=fqa>KwS1F&yL^wlP+lTGE59VaCci6xAb%!*D_6=5qUuCh zM>#|}N4aaB2KoDRs((#M+&^nkO#iMUQt;o*qBwrmqCiub(HT%(>N`@uG4-poBHhdV z4{jrq&0lsOnB6Z{Z$^`1YC-_Aoa)lkAoVsf%;yk0r&EXj^VcFg7XJPb@s5!X>Q#C) z>0_F&V-;&qi3T0lpc5K&QiD!u&}j`iqe1_C$^VlnoYj1Muo8Vic__0^44vDWQaP{5 z?L29ynppmxw4XJ_y+o>TiQN7|kdCKQdKy|u`v(sf{`_ra zdaCxVp+J=_SjqeaNGDq5ZB2-#R~hgH$$tfwdB^{Y)U!(czyGf-xvCnbr~X?dU!@uT zck@q4V7$wz|E2-rpQ`KEi2R_@|K#^IbLUO0C9JQ0OKQ)KO4~TH0Pr@| zL^_d@>GMm>9u?`J>atgL$x~fcsV=#y%M8`Uo<_E&elqw-e|2k&6ps)(@s@DljRxQ^ z(T6$xI8uGM+5urQLbL4|`urMDy0Rgv?Rg-W0Lu}COEBY(nQzgz2;bFX8US$`jTZ{2 zfFk-91Vk9hrXYrp{Rr)8!SEo%aS#np1Wx#L8k7L zZkSns7SOzGftF2kplfsBie;Hp#|c0P0G2H@EBas_Q0U`ta2?CC(pNh$&Vg4xRTr^_;mb&SDeS|hsya;owhWfg1T*vC-BXf{6w)fB_3Fn4lGdF_Qy?OX!AnP^9r0$Oa?425PGCdm!;x_BfEoBk9Ze<(c(&7I z;#ekApd6!=G?wCondxXcWe>;9ZnT?1dPWF;IaYOA1F4Q=+4-26gXT~k_`|7C6fTp* z28~x;@qvTzcW#&JFC~SOVdf}0O4;o({H5I-3hC3F5ZaB6IT=btwUhjTTm(rr1OoIy z=ssb9c2P8pO@2F3@DD_is;w0OE|{5(X49k-*_5K$E5pDadZs^2Ga=-vjstYlPrjHi zA&j^1aH%<2oHLB%(R$v{6MjnyKA4T0{lq#ycpm^=Bu z0|sk8`?q-G;|C4tM}Ga1(ux?{ib?2{T~idqoLN5{e2jv4C_qGA_92KjKhHrG+q7!zhFxRdF1+``kE72p4SN_ORn4o^Mwz`u96RMf zBT^d&JFr5e-qq`3V-{y{{>g(mgw1Nng<80lE~>k2+3$)~@MPc793!Sdg@Uaf?`92k z`(@!F(~3c>;k*;SB(mJzBN;Qx*18~lX!trQ{ZljI2WO^d#Al`_6)~2B`uFWKXwZ;^ zc%UbxrS=(=UWAdp0n*pg5|@avX}sIx^dws0t6QOGi6yH~R;WU01F71JZ}2YTCbuF{;>y=9@I)jbbjXJ!UkycBY4bDybRybfhE!Pr$ zO;yY&+Ulq5b;Luhg}=msQM365+8w=~VuZe#YE)g#6wgdd2mXBIFzC>DP@(NP%(#mm zku{0)V5$*QFL`iAd`i-wp-E}!@ySEd;uDk7`VUV6eZ{L|5ncrYtEPkBJh1rat%x!A zpqh^AYR1PWjT|~8Eu%vRh&;GYMtq;Ne(6PwX~i+LlJAD}nPd5jaWaNMz7EMryF=i5 z2wQ6<-^+^ePBA%AMmt1XFnZNhb<~))3Ae9pY(r&qGPNB?el2So`65{)$rzfT9G`CyTLhR{u)WPzngWuEUZtYl8b7%WzpMKFj$DYX1%3w8Z z%j#AqW!{V3C$Ehf0u5P~2O3>5lT|&NF`##7=?v%Ns0! zjWg(5{NnxCs7Oe2Ul|C-=2cz|l3Vh6zI%g$u&1QVHpf5KQf8m-QI8YHts4WXIhN7m z!wY?xi^i;kKB?-J7OGwtpD<`hYEpc{kfEbUhlG(6f3Vl;F>ANvc+GcRIE4dGG+ND2 z)=(PLhd&-1Ae}Z`WidD(rnWl=dStW505Yo8WH`-9PFiv(u?Ou!!#~r7=6$f}*0bAV zQ;^7En3dVM%wRrl>mX#7kxsD;&m|s=;2HxmCBDZe>+Pe+0-;_tRqoJXcv3Z~m-C&hGlqyL%FruW^5^5a)d!J9?s<}4$a z%4D-W#KxIJy01?6IN5X8>=Avoz&w?*hr;9~*Pe7Jo2Z)Dhm_9RDVdzNiuR`WZ)<3U zvZc%2gL*ICK{?Vl)WDH{BKSke?FcVwF}5|S$@oie%ueTcU2|tk)u3XUx)P-|mFl_u z_Aw2nJRbn;#Jok89bnDd1cMsPo0r7Sb8MTBC+H}FZMd@;ns0GJuOA*zEd&(?zOcFqWB+X`JRCZQT3#^6b!W#%x(osLOe&G;e1%o zJe*w{9?`#tv=R=}mQebp5WI z>99@V&o$aMNv%G!^lQ*I^Q7jhB3dfWe#X968Cr>bzv|*a)Umr^ZT9VXlu6ni>%EO> zZ7g5`TD>+#SHIurzBjX-N<7TVErBqXfK@z9zI0_{m%ICybAEApBsHrDYSVOPOgm3` zG?hAw4^fj5r?S*Fj%N84maB$FuWPB%V)*X3s&D;3^isDgc0a4%WK`a>5MbZ9z=)Al z9Au4yjicUYOhe?Fts#QaRzlFCeeXf&l0}%qd@R*(OV+R$<)Y&p@U%_S@%e_AJ(j=v zk&efCv7Z@_UtKyp&3l;X3MyLf8fVli-yYd~qGR__P(qkY=-JriF_}MiTm+>-q(?zD zbGjis85WTm)A+tHq+4S0lN^%2&9zd}UJ$#6C7t{Gl8tYRx69R9o#$LiqWnVVrMe9l zf3AhY;5#l|NLg(R*3_T{?Ypj@G-mt!9mGx(9U=K5yv?NQ+~Z-dwA7)cDjUmcDKf52OW$1H+0@R`3cfu<*I>lZs+O2G31&nObrzTp z&*shbXqbAR*5f!K5@X7ic1x|L&B%&7 z-oEbSaqMW9F%_g?^Mq(^4MSc1w;M9o_OgCTO46|J=LRRIiQoPfVLUjE*2-*s4YgVl z8PcOu?hV-Az_1&pXVZ8VlXM{wmVv67m=QZ!NE${Lfv@yHzs~Ef0|g-p>$KNLFOysx zeyCAvho`nQT736;U8;f$9#B=NQ3Y3iDt+``@;!W2gAOf*6`R?mjm=e4kcRHUX61zU zk@qgXnLx5`c$Qz2Es_r%*SMQwv)Qnf0(uDBD6sx#Hq%Win4&RTDI&Wku!R7-hY~=r z2@1#t&?LIa5&`G{rNLAZHdx3O444gOCq;pPU_*5eyeNt`9Dx0wrR!n!khj2CwG?x% zx)ghFKl9Q~QzuB0RxqGq3tA^~Cu@WKb!w=feSBX*!l30DEW5a3znZD0kq(PrC>15=!UbL)B|rf$VlHf>%H;11GF_>ZnXde-;u;mX!QP_Y#)Yak|7-a@*f zZks-HY(HSEVaZjNJ)+`(n*Byi?1MsYJs85gbYTm_t=OS1Oj%8ZnZDkRGjnUxrtD(t z+AOf%HiL;Qbyr#@`NKEN7aFDtVsHhFUw_j11^nqKe=>*vhwPKIYhJ78HnQoah`w_X8)II$j|^B97OmX0&xzFI5GfV^v8b$;^;v9g8(-a;7tM8 zOr6?&0q!Wkm+7r<5Z)Y!O#<;i8gXs_KJAZh1>!b=cqgSS3BdINaNQuB7>FMWuvCDL zs?(Vph^+$gH~}sVz^elAUVmH=h&^a?U;)kwz}NioQ?2$=N!K+9PYcA?1vpfIZ-A`S zsr}Qk|6cX1g@m{TP5F zg798BmUYH&#P|*z0aDk$6W$@kD`W6^A?_E3ZwKRhQFxXN7fJ9vIBQkAfpR=Q5-$>C zk51St6c+_yP86;q#rY9*6Wy`nKsjyptRFL7m3 z>LmZ%^>H*l7lRLX!mbf`M>uxsjP-+YyD01@#b+aM4Ofq%@FJeqof=kp%k7FPY%Vw!8kbz&z9nk5qJw60#j!hjStK4O9?g++ldPjmAnDZc3YGOgMfMf?LMmjdFaMQk;c&X(;Xz zj7LV{)l$rp;39QnHIK&EWY{ngHxlEn;rLt#z7dVP)5ahJKQ}bFGwRpP|A?`MaQwjOuKDJI<^B*BcZ>JfVyMTqf8{4p$MBp( zYHfti8NaBzxN>D4C=u-2dlI+l#u5mX9EC;OZM)ceC!sCx8 zuH-41tE>BoJg3%M)erET6l(*|<}S_)wVA&Vcbo96PV4cJ5nF)2=j`N?HlDY8!Z~-X z&b@R4gh;7(43TUZ791SrC?(Jk^~%9(2%J z5s>7+8!BlPL{NGP`zt^!Cq21pcM7ybp{XTgH9= znYd{6)m!7{W!_n>!?S#ShYu6v1#cM8d4V$HO;(7p{z>4uTiW|()(rjV+kktx_wb$Q zAGiG;;1l)*rPZvpr?-T)<0u6t9@0=TZLv;8pKht(`OLQ2UpFZ*0r%wcz>p#yv%GNUTK+qmU%1K<&~ zT;AflX}6Nyboh5~uQO#uL6_CeK=(h;d-}>5A3fnoBWCu*ma!|od)m|w@I#wLmMeU= zHiG9l7`p z*tEcUNuS<;9VSgu?pko5{d~aM?%w03$M)fVvyN#K{{r@Y*r2>f-sv%UfON-#>r)R; z=9I+zg>tBBPZs+|SfNOKb+d^jlwp!nBKy3_PNWWjUChu0zw=eB<_^+=RXmF=sPOs@eUq7K& z!kw{+{4&6^m=Bh}pY5?S0dV6vv%20}UD#?R;7M2O?z%VnZ4o@6^hNGqySRZ5zFG0C z18|Seno&}ID@4y2us*-}=yIP?lgP8Qh0mG=KN{-0H=2;h>QEsUOA zoKPnRFuy~-?bF5bNH|Jn%KpeqeRMjl?m57xH!!lN{?_f3fMa&nJMyCI-ZPPaYjf?F z+s=G_{GMo^4nywt-lN_oj(&GWhpv5VXcMvKy}$LKL)yfDA&!57-gEAnmXjx~?U!xb zqgV8k|52Uv3sz@^7_=XeH&Tb*oN0c7>#(Q637`*NxT%YgYfm`6{qxS{%3HaaVbeM; z5Os!c!z5nR;uW<$PfJoa+%>q=^3aW}^3P<|`M_^4>b845#`-fne}|whclC>0;)iG5 zgu)EI75p1NU{c}`z(J=jOlUkXY{W#s``_!QHvZN3az5bXm(jyrr##r_1vtOC{uusz z*~1?Je~H^LZSU*m@%*tz`Vp<$~^juT5Rg^LTb^$w$DoxjUVV=eORno4!eKsO{OSZPJ&;_6O$mZ+s(Lmn8D; z0N&!a^Jcqa1KOtOB+@~V<$DV3+ z1Co^D;If9#9sO6XPCYiaJ%-2&q6xKogEJN6?Q!ra>6WNX054wS-`eeLz+w8 zpRC^y*sa3u&WkLKn7LRd>OhknMzTecg{DCNA_9enyLFe0554H z*&qF_eToS17}*^`)E@cRM8M5o^;j2uX#ey~z$F7G#L3!s@E-v-4@?i`@E+v1D|iq1B10DPKXM>4?M=l24@O$V3k8JzR+ zQ!Bter4#F=K3TS@7vP*@`&tY+k~}g1aQm<|mZ?iV4M+t%Y|YZasXGNrF9E(kHeHq$ zwQj)$z^+@$>J8dCar0HcwYjtb@gc*lqVBJ#jX{S#{c$tb(RCy(>+8_JRFP+h+D@H2nN$c(j8|J0560_tL(6OCTDhxW>)

+E!Z3e(SpVm3L;DG)B zG2r}qqth2StcmIiIJ#4}9t%tRHEsr2A&WY(VAI@rzXDFGyVG&8@1e|kfcM>Ba$?Dp z3d1Xa%g&xtF1?*puPNZ=rF&m2s1vIE9k8}@>2~sL{@fulcOdR97Ol_k$v-0meA#k% z-TZ#$nUewUew;sRbZWOH6{;Y zXgkl2-Op_d%*~Z(69Ffhp8MtdAGbZt(xE@Om}9?r;0bd_9s0Wg9oB5^f31nD4!yQp zfoicZx1LdGF>Xa0fMJ>WCyHiX+Y<)ZtM!D3g=c<!=XDDP4<;e0K9K@smX=FgxiO8;%eXa+?$CWxNocHwzso~v<(F8{`>00+reeB1%S1kEM0KC)Nx9yCP4J_-j!Af}c{}mH0}fDg5dU>zLF_ITTPJ zHk5d`QCdY=kg&#{N~K6?r5vNwS2F&DqU-={E+YV>_a?WkmCZXC>MNDqmC6KVnsu+3 z!7Va-72};-G4yZYlNQso8%8^PgNL{IPCMo)W z$5l3v_h^#VSeZ%^>@^;;NmC}IrbCl;@>0^4Y@XoktPi=ml=hbCu|x1JJ{Mkb}TAg@4qqzz5*NEp;VDK(=-dRhXd0SVr0prn+H zjG^)ANf05;GY#Gways9xl>^^Bsh;5ch$A5ZTYYrYj$u{?{DzQ;scT)sh8)zuoM-HA z&T+JKZqb}$i{g>3vxP$_M(&m_+>TM69Sx8Rx1F@1t8;TZ4->?*c5c?w*Z?DYQKLo} z)sN#@wQOx{fc%>St+8Dj=PtegcurlL86Yd3qf27}633zzJjYh;Z5sQ#)psyQUSVx4 zgF6eO+eJAyu&;+&*UykPM9qR5SVo#5VY7J8zzN@Eb{Hk`Z0g!$#wuTO4Rt~7+Xpz? zH>wvNDXeePz{<=MvTR@nIn^<>M9sbB^~0?VkY^iuWp*Ek8N9J?cy8Q`KOP?0{5>&g zjQ?MeY+BN=%%t=Tl~gC6yz)FIW$ltCYppsBJAaEz4yw9ErtOd!YKXk+HMX@j$H*nX zxlOQNYZKG}%4r$yXx^}{o1+O^W>c4Tq3v5CU$MxqtpT&Th2TYGB1sr6DY)u>5`MGc$V>un$B1g+0 zM>{JH^7YaSi>a^IDYlhfbb?;@b~Zka7+J`<(kQWeN2^BWye8Jr4t#FMM%?H?ZeOky z*R*T9rlw6o43L=H8wd~(*%rtFUE2jj#@agv0=qAv26(I3UAp>s3QWW7eIg*Ft+PD| z?#mU*B;MZKNFP6Mc!5H|4Gj`^X~uQqc5w^g)^lp%&GoM@a&76-#ENIj75F#cwR4JV zDvL38>h5P1Ze=XDmo{l=+1k?143hNbc{c^08`r&)jnto;&^M`{fZHQw5KWHTswGzt z(}dU1Bisr!SQu!4VvXGld{BLB7pso$G6U4HDKuBSK?B^Ri%S&GN6xEjYzQsevyKhF zUbkk3s4Z#|jI5fp5+DHz@dM`zKR3|)MgrvKfik^O=Oh&G*u<(q9b^;fXb)F^6we0+ zcL8c^+Z{z9=X%XO8}`r5ZRXd)q$!KtJjS=@8!(GLest{mHuv32ubl2-oHkLU<%0i; zR;Ua`d{SE45Y|M9nj9N_hTrP?z>%XG96QaWv#~0QF~fQsvIwy3!f`<@QGF|`#>mVL zdYgpDw*;{U@%UCmx(y7FD~K+Ph^dh)&jG?PYSN77&_D$mRlQ~D?w%}Y*@gu!ZY*%~ zU;%UX$eZul^ziEDk$&;PW{x492Q>Sl%EOz(D&^l0*FWN*eJh{(-`ux+cGa3!rGn(f z7IrMB2yw?cAL|sN{?ZC68SJW*A-|RAn1=c17Gv&WmOKcI!qOdtQB6 zE!#wWRIjduHPh%`s|_U^XU;m8c)}D_i|Dw4{#Cf>Uq&Td@HTUi0&nJWuEGT!Mzi%f3VaxWw*(R) zKh^;Q13w5S9wb3g35hscA726wmM$F51>m}fUhBadR(b#!&Ot=MUP^(q5TpZ(YNWoZ z)29KDEQB0{l95OCRY9D~G|5T&06st}0H99rE7ZdZTnLmodYlrd+EsK3ZfNrQkTd+% zS}q5w4Ap+ifk#FRILm=(c8kMVr@zIMGZVeyf%gOF2M))uBv4(9G=Gl)e&{ArTox+c^9l@<$Ftv>@urZ2 zRAF8n!YEA8nD;L%Ld6wf_EER)fxV6h^Xig}gn1!+SE1sKI%A zN-WHyZK#O@nJ87!3Hw$=axR}t()-$uw3d@l@s?L$raX~dVaS_u0J2mUEWvb|5S>@v z<`qcMR3R#cknE#Q-H!-)2c<}ubAqRs1l(n0S)MD^E0+m#rQC86@r4sBh~A_n2^A8R z0I)hy+Aet+d_$q)h`QEAM3RaK?lv?P+L~m++a<;7M4*6dBB;EpkatLm%k_i_Qav_2 zy#tiZ>x4R{CLamO0$SoMWJI+yyg}KAIAb-t$F^4JZ1I8scOs_yMTL*!X+~Ky7Ij?zB2SG$h?s#+FWb&YdFqdYY3>*-wALGY`{y!HX*-oySSVR18JPhC2=qK7a+KFc0B7@hn34;X*|zm1C#57%p!FB`&WoObF8}yG;rV9UKHbH5ir6fwHP@v9KhV8cd-g*t~4Cst(Z8rMAMN z+Xf&H(o1NAyYXTRNk%OpBO&OE6U{Blk8i-sSwiauy`;>Gq`*5EhRTP549uwvQh)|B z;PP@le1h#3`XyqCqEw>zBvCwPYsKM^E-X>1PnGz%)x^f?HDTcZGSk|0~J z!m>1)J1~Jh6_o`Pb1>0eTA>Y)4k?E)H`P{H0yP0SFa)@fN)ynMQgR;gCX*NOBzcMa zKuO*pJ`xt)(=Tr$$}V;i<^sD!Q2_$cC*l_H%q4s|&qBgA=UM1+MamM1Vl0Ry``9gL zK2jD^x7SoWyaGMGp8;?3L&zmCHxhoGIf05!eDF;9!dwZT8^|*cc~Jfc-i+M^`bI^tP_P(P5Jx)(=12{1;STg zz!-Q!fq3S6d{St0o;xYIJIMzsuz4{@57OqAU57x}YCuf7TTz*5)`?qCSw#`4_w9hJ6IoLw ze8kor2Ob2KW6IkUm04z;c*^pbR`OMihS_MGz=P2Fv^r@G-E%uIh!iD4#eJay+Fe(D z$58bxZv#4OUTzG1)u_A<(O=TOT(~t*TSHYJ5~%76zR#W(xEzPZ~4F z^|yd7zA?~WVa$9mI0Aj)kP&aXF>}@^5FW-fHeOOv=(L-Z1 zM)korby4YXK?e&T7%W8lS$bBMzjfwV)g*^nN`2N+g4Ka;M(hfmeX<=F`T~^*=@m|- zbGt>hzn^I&QH%kL=TZ)afS6Tc4PX$@FeYL*7rLLzY$s886DHENRLbE)lmk>ldw!!D zRaFx!qDkeONP1wupFpWVZAeE~&xX`yoA5!_V4gG9(m$RfQ7AQvQ9c(&XcA;mElAz^ zuxD$|z$yrS7H<%91qoD=(H>rV6Nw$vk{B z0HXA*ZURAo&}9Y@9VVqgH+g_Tq*jp*(3v%PPx&@KSj=L*MJc`9C>^)p6SP0p>bnNt#{wGW#uuH^r5xqRyIBGmR$SAt2M} z%yiZCv1|?`OeS_fv}HBpwM6kwRfE?cAH>TcN66IVf-M{6UG`KJ1^VWAwTkOR$sDg{ z=S@9KxySNtGxEM**8VMUgO=;eYN`1qdY#UiZ$YKmVQ0r9dy<)P=F&1gG&9lOmPAc` zV2SFcnJa+eyAgB9Q`N5AM$_)q^+vcGNH8M!**cYZWkqu*&UN8StjgP(|lv7S*^qs3u3JN;zuDLVF-AZ$_tJdg{p+UG!^9 z6qXdQ=2dHaFt@7U7Ji}N$mR;Kz>sXKz*>EN4I<(d#KPVMtWw>`GCdZS=@&*lDHr6% z>Zz%@v0N=k!q1gE@pi>xHI;WL78COBawB0vtR8_s2w@Rn3tD2Xy-)_V)@X@Padm^h*tdBT_36*yhb>q2?`?6-9@!(nK*CF5@+*dIcf z4zQ4h5_JJRQcoGl_KYpro`I>bN!8H;7EP>rJBt+eVdztpv&znlWr0u|)tOb63S`lno&+Y4%Xl{a}X7(N(4&4opGLA&&t2^Ew1%OM?D4LXt4 zB{kCkghaxUyvF1bsdy8qcopjPy4;HlKp@S@{PiSQk;sRwy3@(Yp1g*W2`5QLAW{|! zvyZ?8p%KX|FY^|$cd7{`-45gBJcW|d?J(W`35HMzhEUIdM5Oy~kEtx!ctk;HJQx)X zw<0o~5|&Sg-G!DgJ{G}N1+O5KA>yqI;^j@=LkgsL3{vLhY$F)z#U-UIBbK(Z1Bw0* DJ ","timestamp":"2025-06-22T20:40:44.098137042+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 17.598947ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T20:40:59.403725986+00:00"} +{"level":"INFO","message":"📡 Connecting to transaction stream...","prefix":"[TX STREAM] => ","timestamp":"2025-06-22T20:46:28.399667641+00:00"}{"level":"INFO","message":"📡 Connecting to new token mint stream...","prefix":"[NEWLY STREAM] => ","timestamp":"2025-06-22T20:46:28.399682419+00:00"} + +{"level":"INFO","message":"✅ Subscribed to new token stream.","prefix":"[NEWLY STREAM] => ","timestamp":"2025-06-22T20:46:28.458450842+00:00"}{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:46:28.458458246+00:00"} + +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:46:28.458551371+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 17.995069ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T20:46:31.496281601+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 16 | Sig: 4HRPUkJcQPTwRmgZm2L28UHtLzttY3Mq1zcjzp5LMJJk4mXQAS7wxbedChNeHJLTcymW5KFeBnF6iR7CVAeP1BNY | Slot: 348535865","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:46:32.346933685+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for 3ZvCMKFVmunNzMt71M9PfrPjsbLjfTBB8ZH2mRvUpump → 348535865","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:46:32.346974732+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 216.618058ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T20:46:33.047868802+00:00"} +{"level":"INFO","message":"✅ [SELL SUCCESS] Mint: 3ZvCMKFVmunNzMt71M9PfrPjsbLjfTBB8ZH2mRvUpump | Amount: 10000000000000 | Min SOL: 1000 | Sig: [\"5hAGsM5DXMvCFqeN1SXYn8A16PbQEEzTjCLF9gWJpnvEr3VXcjFytHB8SLe7oet8bNEJ9GgH6p5XQsGnZeXwxweT\"]","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T20:46:33.047999527+00:00"} +{"level":"INFO","message":"📝 Recorded sell sig 5hAGsM5DXMvCFqeN1SXYn8A16PbQEEzTjCLF9gWJpnvEr3VXcjFytHB8SLe7oet8bNEJ9GgH6p5XQsGnZeXwxweT @ slot 0 for 3ZvCMKFVmunNzMt71M9PfrPjsbLjfTBB8ZH2mRvUpump","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T20:46:33.048034623+00:00"} +{"level":"INFO","message":"✅ Confirmed sell & removed 3ZvCMKFVmunNzMt71M9PfrPjsbLjfTBB8ZH2mRvUpump @ slot 348535871","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:46:34.499095846+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 15 | Sig: 5hAGsM5DXMvCFqeN1SXYn8A16PbQEEzTjCLF9gWJpnvEr3VXcjFytHB8SLe7oet8bNEJ9GgH6p5XQsGnZeXwxweT | Slot: 348535871","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:46:34.499124480+00:00"} +{"level":"INFO","message":"📡 Connecting to new token mint stream...","prefix":"[NEWLY STREAM] => ","timestamp":"2025-06-22T20:51:51.980874643+00:00"}{"level":"INFO","message":"📡 Connecting to transaction stream...","prefix":"[TX STREAM] => ","timestamp":"2025-06-22T20:51:51.980885062+00:00"} + +{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:51:51.997484773+00:00"} +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:51:51.997524127+00:00"} +{"level":"INFO","message":"✅ Subscribed to new token stream.","prefix":"[NEWLY STREAM] => ","timestamp":"2025-06-22T20:51:51.997760921+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.777254ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T20:51:52.166263703+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 0 | Sig: 3LoBP5nLfPeGf2yQ9sPBapCztCMmohHmfLBzWEGE2LB1eeSprU3qJAvVbojEhmW7kf8P3BJMQobaS9qnQzb4V1eW | Slot: 348536653","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:51:52.846612517+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for 9AjbiAREfUGzYfmuA23vn6XEYuf9CWsK7cGiSj4Mpump → 348536653","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T20:51:52.846655147+00:00"} +{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:06:14.684460036+00:00"} +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:06:14.684529106+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.503213ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:06:18.705403457+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 8 | Sig: 4yUAPQRRiAkRQDCECKaRnBcdALHr8udK21TudjLoTD5PmkJCydi99VuK2Y75XCjxN5L3nH9Mm7T33GmsQAxFzubT | Slot: 348538810","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:06:20.489716570+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for pVJz467uLWsEjpM8S7dhMCLZztwpFWBZtnAgo88eAVW → 348538810","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:06:20.489798403+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 14.626894ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:06:21.817816815+00:00"} +{"level":"INFO","message":"✅ [SELL SUCCESS] Mint: pVJz467uLWsEjpM8S7dhMCLZztwpFWBZtnAgo88eAVW | Amount: 10000000000000 | Min SOL: 1000 | Sig: [\"2Wscog27AHKnjS4nyoXgiLRAJNNTSZYWKaLgH5EpB5QQnmvhcKLjWhyoNyFDwSSKQF3wbHK3QWZRVUSdKH1bT3aU\"]","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:06:21.817863262+00:00"} +{"level":"INFO","message":"📝 Recorded sell sig 2Wscog27AHKnjS4nyoXgiLRAJNNTSZYWKaLgH5EpB5QQnmvhcKLjWhyoNyFDwSSKQF3wbHK3QWZRVUSdKH1bT3aU @ slot 0 for pVJz467uLWsEjpM8S7dhMCLZztwpFWBZtnAgo88eAVW","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:06:21.817888039+00:00"} +{"level":"INFO","message":"✅ Confirmed sell & removed pVJz467uLWsEjpM8S7dhMCLZztwpFWBZtnAgo88eAVW @ slot 348538819","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:06:24.135112875+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 0 | Sig: 2Wscog27AHKnjS4nyoXgiLRAJNNTSZYWKaLgH5EpB5QQnmvhcKLjWhyoNyFDwSSKQF3wbHK3QWZRVUSdKH1bT3aU | Slot: 348538819","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:06:24.135145817+00:00"} +{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:16.706775391+00:00"} +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:16.706823351+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 25.161561ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:10:32.773281594+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 27 | Sig: 34cCjvgMHogPGPw6ZoijQ8SVvb4guyAsricXqda1oXottefpVfxejmTtjv5orUMJgrCQSRpbkiVwvhwjCdmCt5fr | Slot: 348539436","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:33.261648707+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for 7RV1MNLsPNnS2pw9Lxz1dJ8FtSndQtJmHAFDPxBspump → 348539436","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:33.261704942+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 15.255231ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:10:35.885950165+00:00"} +{"level":"INFO","message":"✅ [SELL SUCCESS] Mint: 7RV1MNLsPNnS2pw9Lxz1dJ8FtSndQtJmHAFDPxBspump | Amount: 10000000000000 | Min SOL: 1000 | Sig: [\"3rj9C2bXmCYhxHt16UEN3GC77i4oPkFdaubaAvWmBFbqihiMjyNSG9gRnVUzSyq1YWdU6zbf1Lnd4tQJk3YdVebS\"]","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:10:35.886014365+00:00"} +{"level":"INFO","message":"📝 Recorded sell sig 3rj9C2bXmCYhxHt16UEN3GC77i4oPkFdaubaAvWmBFbqihiMjyNSG9gRnVUzSyq1YWdU6zbf1Lnd4tQJk3YdVebS @ slot 0 for 7RV1MNLsPNnS2pw9Lxz1dJ8FtSndQtJmHAFDPxBspump","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:10:35.886039803+00:00"} +{"level":"INFO","message":"✅ Confirmed sell & removed 7RV1MNLsPNnS2pw9Lxz1dJ8FtSndQtJmHAFDPxBspump @ slot 348539448","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:37.817794085+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 24 | Sig: 3rj9C2bXmCYhxHt16UEN3GC77i4oPkFdaubaAvWmBFbqihiMjyNSG9gRnVUzSyq1YWdU6zbf1Lnd4tQJk3YdVebS | Slot: 348539448","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:37.817839680+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.250718ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:10:47.828293490+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 11 | Sig: 4T6YPKZt1K7WpLt4GEra8LH596HPkFwQfSoinTFJpDjDfAfQ6YDAgaU3Re9HjiV4iV6NTko6b3PD4DtfUBd5kCcS | Slot: 348539473","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:48.246284769+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for 3o7Hty7d2Wj99FkXYYpYFjJURj9x1sRzgMg4bUNMpump → 348539473","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:10:48.246318241+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.688248ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:11:16.855559447+00:00"} +{"level":"INFO","message":"✅ [SELL SUCCESS] Mint: 3o7Hty7d2Wj99FkXYYpYFjJURj9x1sRzgMg4bUNMpump | Amount: 10000000000000 | Min SOL: 1000 | Sig: [\"2tqQXTqXBGjbs5nQhohZuPYdBo4fc6ZDEdnhrfXcZAJvYv1LDhEDoYLvuZABk8CDsc5Ct5jswBMeeqk4w2H5XvsE\"]","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:11:16.855625591+00:00"} +{"level":"INFO","message":"📝 Recorded sell sig 2tqQXTqXBGjbs5nQhohZuPYdBo4fc6ZDEdnhrfXcZAJvYv1LDhEDoYLvuZABk8CDsc5Ct5jswBMeeqk4w2H5XvsE @ slot 0 for 3o7Hty7d2Wj99FkXYYpYFjJURj9x1sRzgMg4bUNMpump","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:11:16.855656529+00:00"} +{"level":"INFO","message":"✅ Confirmed sell & removed 3o7Hty7d2Wj99FkXYYpYFjJURj9x1sRzgMg4bUNMpump @ slot 348539545","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:11:17.311147364+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 118 | Sig: 2tqQXTqXBGjbs5nQhohZuPYdBo4fc6ZDEdnhrfXcZAJvYv1LDhEDoYLvuZABk8CDsc5Ct5jswBMeeqk4w2H5XvsE | Slot: 348539545","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:11:17.311182169+00:00"} +{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:27:31.772623425+00:00"} +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:27:31.772674581+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 17.364797ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:27:42.054142551+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 10 | Sig: 5z9GHpjxW7v3nY6X8ocA4Ec3CbMdVuLgjBKdqMa3Sc3JnM98bmu4VjDjyJkpGFEdRHsyskzed31YJpS7PWjzuM9w | Slot: 348541991","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:27:42.476579925+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for H5ECNNWUytfnhdX9j9DH7oVix8UKTd7gSW5Yx4YPpump → 348541991","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:27:42.476633104+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.75734ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:27:45.896770377+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 4 | Sig: 3qmhJKdvAh11ioj2TUb8CXQuXrsgHVCGnKW4JaeFmZ6foRKbDjfxFqAJXBMKBBoxHmfaq66L7LCoTGwdGBb3wdhT | Slot: 348542001","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:27:46.093280243+00:00"} +{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:33:02.401238354+00:00"} +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:33:02.401305781+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.472209ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:33:14.037291658+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 13 | Sig: 5DF4vuc7JoqsCGLeef261WUaqPtKarBfTCipE62oaQDWPi5PmnhoH8Dnn4xTzsJ9LbLYQa8KfCJMm9Fb6bh1JFwm | Slot: 348542818","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:33:14.387534702+00:00"} +{"level":"INFO","message":"🔖 Corrected buy_slot for CLLKSvr1dBHWwfL9DJgnoQmbiNXjcuSzbPG3ChCxpump → 348542818","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:33:14.387606437+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 15.72085ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:33:14.850091700+00:00"} +{"level":"INFO","message":"🧠 Our Tx found! Index: 18 | Sig: 5Jya7mPLCYhReqXeqKVbCToWtMdURYpCJpL7hfExsGt2op5YV5RoqHXK7Xi7dRtXAyikfzkocsceNtppLTbfLfEj | Slot: 348542820","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:33:15.330823861+00:00"} +{"level":"INFO","message":"✅ Subscribed to geyser stream","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:45:31.801306980+00:00"} +{"level":"INFO","message":"📡 Stream opened","prefix":"[GEYSER STREAM] => ","timestamp":"2025-06-22T21:45:31.801368565+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.710248ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:48:41.717662624+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 17.492364ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T21:48:42.281189181+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.733053ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T21:59:38.098981977+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 20.615887ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T22:05:06.157034201+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 78.15185ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T22:05:19.861368611+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 65.594493ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T22:49:36.012762503+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 48.553815ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T22:49:45.617907678+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 20.308768ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T23:26:59.662095367+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 25.558891ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T23:27:29.177076702+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 18.768141ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-22T23:39:22.614033147+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 15.89997ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-22T23:39:25.224250960+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 22.400706ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T18:39:49.687290927+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.576446ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T19:30:05.477872880+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 61.352071ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T19:36:57.919717153+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 28.685399ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-23T19:37:00.785443279+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 16.484935ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T19:37:18.402002753+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 46.99236ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T19:37:34.819020990+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 17.986484ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T20:41:35.563070555+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 15.813689ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-23T20:41:36.095518929+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 50.877012ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T20:41:56.617230785+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 17.249523ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-23T20:41:57.621608537+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 38.107499ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T20:42:07.227794583+00:00"} +{"level":"INFO","message":"✅ Sent via Jito in 29.714709ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-23T20:42:11.233987348+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.021697ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T21:17:13.725232542+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 81.816949ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-23T21:17:14.621271557+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.414597ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-23T21:17:16.614207701+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.928277ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-23T21:17:20.406519186+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 89.55638ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T03:44:23.514707985+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 65.663756ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T03:44:24.378440350+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 90.503846ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T03:50:55.433122391+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 65.027076ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T03:50:58.561480605+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 59.560487ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T03:54:13.150197379+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 48.835296ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T03:54:45.017093490+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 71.490574ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:02:32.927039491+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 77.104868ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:02:35.811898116+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 66.120912ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:03:26.737063892+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 77.416332ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:03:30.242804719+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 47.956401ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:03:47.114650832+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 74.8373ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:03:49.715091801+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 76.871213ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:04:00.428818367+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 77.192323ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:04:02.966651407+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 100.287094ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:06:34.753118116+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 61.286598ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:09:14.617828634+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 100.411133ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:11:08.643019914+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 85.157701ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:13:51.050941044+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 100.838639ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:20:05.161876602+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 86.163255ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:20:41.835795962+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.343312ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T04:26:28.370771774+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.383388ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T04:26:30.357775190+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.083753ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T05:48:10.549390518+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.122229ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T05:54:46.461425632+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.59583ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T05:55:12.149185722+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 60.077793ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:02:00.148321074+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.044584ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:02:30.830374906+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.112927ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:09:13.541981775+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.900834ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:09:13.990003600+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.923152ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:09:17.797332580+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.500774ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:15:17.125556712+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 24.567504ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:15:25.977839277+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.443657ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:15:29.520593146+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.995036ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:15:31.280138626+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.648006ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:15:49.966248763+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.622586ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:16:11.771420451+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.23687ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:47:36.705527416+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.344202ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:47:41.757777129+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.833052ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:48:01.526174711+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 24.520035ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:48:04.794402526+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 71.565437ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:51:31.603559352+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.588935ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:51:34.459115476+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.408862ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:51:37.082289296+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 26.163017ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:51:37.542514395+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.705403ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:51:42.423936193+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.21869ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:51:42.927483971+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.725305ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:51:46.416515274+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.5567ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:51:46.956561435+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.89008ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:56:25.902344126+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 24.495573ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:56:29.614375755+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.737499ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:56:39.838300286+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.184451ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:58:43.805269788+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 57.252423ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:58:45.702243726+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 32.866348ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T06:58:49.157389275+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.974192ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T06:58:50.961856820+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.810019ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:00:53.083018596+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.188399ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:09:15.712441084+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.870018ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:09:18.691373283+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.267397ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:09:54.805131440+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.199294ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:11:18.338483233+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 36.388215ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:11:18.781699335+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.312831ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:11:21.725904364+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.057722ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:11:28.548439993+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.285476ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:11:30.359828483+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.256438ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:11:38.486744012+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.756306ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:13:02.076633820+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.617755ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:20:46.188376715+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.4139ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:20:48.536991621+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.613748ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:21:16.497906975+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.355375ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:21:19.478811633+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 38.359375ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:23:46.737382735+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.491194ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:24:47.498726589+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.749944ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:24:52.027777027+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.464289ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:24:55.118852701+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.105506ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:24:57.745681793+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.999677ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:25:01.514904837+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.282367ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:32:36.154237928+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.291174ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:32:39.467400243+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.308354ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:34:56.354920679+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.712621ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:35:29.586960845+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.02414ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:35:39.229831996+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 34.61261ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:35:55.827609967+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.18996ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:40:51.793346526+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 33.496441ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:40:54.271693747+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.611782ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:41:03.426858289+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.284342ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:41:04.393861354+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.594798ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:41:20.794481642+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.21554ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:41:42.700796401+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.949772ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:57:03.331421520+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.237135ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:57:07.271864254+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.093566ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:57:12.388828139+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.505543ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:57:14.697099750+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.310839ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:57:20.307268346+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.21532ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:57:21.071918456+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.550639ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T07:57:30.726943511+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.929047ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T07:57:33.647194987+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.995287ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:01:43.253932687+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.933596ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:01:55.667917114+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.142557ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:02:00.417188522+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.656661ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:02:02.444257714+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 73.811035ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:05:45.699870928+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.993012ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:05:47.382122922+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.712712ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:06:06.865879030+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.949832ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:06:08.028140431+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.806769ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:06:16.677726844+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.085965ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:06:17.763241318+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.779798ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:06:22.420887463+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.450621ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:06:22.929547802+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.934504ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:06:26.993836210+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.324229ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:06:29.288935449+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.168242ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:10:54.957596888+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.901692ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:11:27.449008589+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.199632ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:11:31.254376171+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.003272ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:12:04.025339923+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.919021ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:12:08.479723857+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.074542ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:12:14.173743481+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.16006ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:16:38.079474814+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.761892ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:17:17.342048972+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 45.422581ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:17:25.679959893+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.851187ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:17:26.718321830+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.191195ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:17:42.849457611+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.220874ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:18:15.963049880+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.378676ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:18:31.389391679+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 60.309687ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:18:33.514611013+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 54.502285ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:18:44.306611673+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.785899ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:18:46.395582937+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.45062ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:18:49.992430809+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.934287ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:19:24.616331049+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 45.18011ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:19:40.297326075+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.462684ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:19:43.987894054+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.761174ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:33:10.929872582+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.653032ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:33:33.101699224+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.6955ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:57:51.938933411+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.817561ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:58:27.450496942+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.505075ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:58:32.135159269+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.917654ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T08:58:45.943241458+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.901669ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T08:59:41.870592025+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.263102ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T09:00:00.034946122+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.219354ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T09:00:21.031401175+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.456935ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T09:00:24.753205471+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.307124ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T09:00:28.226250950+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.579049ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T09:00:30.834871038+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 96.624632ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:54:05.776434818+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.33257ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:54:06.975190867+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.308314ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:54:20.081602411+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.996825ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:54:22.897695763+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.353038ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:54:35.962139135+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.022958ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:54:38.814984420+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.780454ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:54:44.545168902+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.800727ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:54:45.958882830+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.411937ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:55:04.652786107+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.691879ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:55:06.115334124+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.710463ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:55:08.918194036+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.761482ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:55:11.433472701+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.624075ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:55:18.777765696+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.925766ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:55:20.914171336+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.890471ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:55:24.043640745+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.020489ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:55:24.767329823+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 62.674714ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:55:40.819651101+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.69268ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:55:49.120143995+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.328286ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:56:16.540438938+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.172093ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:56:19.565232316+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.749792ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:56:31.461077511+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.834049ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:56:32.255917794+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 36.888928ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:56:41.759180438+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 36.778311ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:56:42.808363364+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.563162ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:57:00.103664227+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.937108ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:57:00.742661823+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.829811ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:57:15.091165737+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.696338ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:57:18.338256116+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 73.743903ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:57:26.104300757+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.088105ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:57:29.334585827+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 63.641853ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:57:41.942307686+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.915803ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:57:45.643194808+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.186656ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:57:50.154281145+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.892069ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:58:10.404541724+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.581386ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:58:19.386628370+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.889248ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:58:23.151287727+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.321258ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:58:24.898247816+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.660358ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:58:39.360425282+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.639915ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:58:42.275109482+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.246866ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:58:43.135501217+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.333275ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:59:03.108920836+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.451853ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:59:06.771256952+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.057879ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:59:17.227275345+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.076935ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:59:19.074914556+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.698801ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:59:30.068341073+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.248306ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:59:30.735954088+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.896201ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:59:40.161806069+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.75454ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:59:42.441105634+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 42.623197ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T15:59:46.725658424+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.352196ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T15:59:51.036145161+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.527115ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T16:13:57.382097313+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 54.202573ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T16:14:32.443290482+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.382248ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T16:14:39.236688652+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.705262ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T16:14:42.105767306+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.929562ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-24T16:14:47.129516305+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 61.80359ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-24T16:14:51.238406215+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 77.917885ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T21:30:50.551441557+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.801163ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T21:31:05.134276142+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.596637ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T21:31:17.704888771+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.66044ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T22:18:45.993439674+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.527675ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T22:18:56.779599621+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.822941ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T22:31:08.616018402+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.746649ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T22:31:29.124754295+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 59.654879ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T22:35:21.127773658+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.140163ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:00:21.471095216+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 43.315637ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:10:11.522110877+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.253633ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:10:13.931788016+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.608719ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:14:11.463582975+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 39.901404ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:14:27.341472766+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.474419ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:19:18.949214399+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.150776ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:19:22.084012970+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.543011ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:19:22.734450342+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 33.52499ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:37:57.331738705+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.483244ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:38:00.541288331+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 70.737051ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:43:33.705644962+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.339036ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:43:38.078369737+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 55.542509ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:43:40.878549075+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.357697ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:43:45.407396170+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.64302ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:53:14.359615722+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.858148ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:53:18.880446332+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 47.426935ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:53:20.365938097+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 79.48859ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:53:22.826759498+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.320641ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:53:23.482730354+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 59.996042ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:53:27.538674624+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 53.279618ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:53:29.713948277+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.240867ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:53:31.027728252+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.4989ms","prefix":"[BUY SWAP] => ","timestamp":"2025-06-30T23:59:28.030183043+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.765969ms","prefix":"[SELL SWAP] => ","timestamp":"2025-06-30T23:59:33.803955981+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 74.558677ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:13:18.569967159+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.167119ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:13:19.819002396+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.46937ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:13:24.116829776+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.680571ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:13:26.245251925+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.770001ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:18:26.390314927+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.674985ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:18:46.445695474+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 57.396786ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:18:48.072769569+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.144761ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:18:50.817647471+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 32.034572ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:23:08.824790231+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.883756ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:23:29.390537775+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 79.946794ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:23:39.170312512+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 42.93521ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:23:45.157885568+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.730458ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:23:57.437144125+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.853204ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:24:09.097394351+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.876938ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:24:15.220163075+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.770759ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:24:17.016430967+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.910646ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:26:06.305311971+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.72401ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:26:07.588587359+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 33.313784ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:33:10.214162465+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.421134ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:33:24.150948539+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 21.992118ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:33:27.424403696+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 32.444569ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:33:47.246260768+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.867759ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:33:49.297259267+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.258859ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:33:51.376077302+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.76103ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:41:02.691060775+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.269547ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:41:05.477097599+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.020719ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:41:10.745627064+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.261404ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:41:11.848938226+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.628289ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:41:13.754892391+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.484561ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:41:16.013760989+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.061649ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:41:16.114702285+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.662634ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:41:35.868961361+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 25.76396ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:44:45.996645456+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.880691ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:44:48.915691651+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.478661ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:44:54.101461933+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.98886ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:44:56.732037953+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.183434ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:44:56.912785971+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.733876ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:45:00.955322506+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.550593ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:45:04.466251353+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.780163ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:45:20.099257693+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 24.203555ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:45:21.412698095+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.587877ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:45:31.118447200+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.955102ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:45:33.642038948+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.020032ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:45:36.762590106+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.686152ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T04:45:37.493652637+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.402965ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T04:45:41.400974175+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.507745ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:14:27.245951845+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 38.587485ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:14:39.853174224+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.147007ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:14:45.930343622+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.955031ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:15:04.356168043+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.214928ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:15:09.361042545+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.890664ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:15:29.107428360+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.595734ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:15:43.766561986+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.837727ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:15:49.899156137+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.322702ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:15:57.277168493+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 60.191985ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:16:18.566373799+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.082697ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:16:38.007064354+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.979754ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:16:38.838106182+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.150062ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:16:39.681530112+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.695324ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:16:42.156694850+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 43.091132ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:16:47.661939366+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.817283ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:17:06.586401807+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 51.572575ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:17:11.622590283+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.848121ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:17:18.528509390+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.570307ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:17:23.101319797+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.613391ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:17:24.951652920+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.806036ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:17:30.740685506+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.126784ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:17:40.192235119+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 50.590886ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:17:44.575596613+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.930661ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:17:46.480676683+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.05235ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:17:48.172511756+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.970711ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:18:08.949525680+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.161845ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:18:11.202306489+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.376779ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:18:17.840933636+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.711154ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:27:27.272599062+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 55.058234ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:27:29.088511051+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.622277ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:27:30.748116080+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.138374ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:27:33.564282111+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 48.790106ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:27:37.748155572+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.967624ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:27:57.289637379+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.574106ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:27:57.478649028+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.547643ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:27:59.472186560+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.382036ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:28:04.536635445+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.038787ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:28:06.295626386+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.867997ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:28:12.312663693+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.911123ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:28:33.203004530+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 71.533404ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:28:34.433446052+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 39.394286ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:28:35.963318820+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.200186ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:28:36.908388134+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 41.864348ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:35:20.284777928+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.762693ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:35:27.830969404+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.559008ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:35:29.103713515+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 59.05519ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:35:31.228312546+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.228348ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:35:31.505334029+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.070449ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:35:51.652725454+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.394475ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:40:22.713724069+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.103556ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:40:29.519761906+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.69622ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:40:30.889491020+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 33.737546ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:40:39.191671446+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.792506ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:40:50.488174381+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.5495ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:41:09.674027944+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.949331ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:41:13.036499493+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.100057ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:41:15.761130995+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.428634ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:43:15.893281629+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.113679ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:43:17.404156920+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 50.644286ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:43:19.331771773+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.374563ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:43:20.551769392+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.416481ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T05:43:20.655990301+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.810227ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T05:43:41.499678650+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.640515ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:05:36.918447813+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.364544ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:05:42.204227364+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.72552ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:05:45.421530549+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.934877ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:06:06.079916679+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 42.235255ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:06:06.392636309+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.21274ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:06:12.949205916+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.604774ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:06:15.308127801+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.119189ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:06:18.411382415+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 26.218474ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:13:45.142066468+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.352578ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:13:48.151303377+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.453715ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:13:52.217078876+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.837009ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:14:11.411000645+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 54.08719ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:14:16.777906263+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.37082ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:14:18.073047606+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 125.993702ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:14:26.074157683+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.434029ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:14:44.935288745+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.462256ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:14:47.386077408+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.478987ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:14:57.316673657+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.587321ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:14:57.514912170+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 62.640166ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:14:58.800274138+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.130841ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:15:07.890476997+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.100291ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:15:11.294173728+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.592092ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:15:19.424975883+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.218015ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:15:21.378488030+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.516676ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:15:22.634937411+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.930532ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:15:41.666844875+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 34.793865ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:16:57.643558059+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.133339ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:17:02.159695358+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.839596ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:17:05.268662681+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.488747ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:17:25.179867985+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 51.652219ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:19:25.757750173+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.904549ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:19:45.656295917+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.822906ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:19:48.900519843+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.365793ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:19:50.149239973+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.404675ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:22:09.542254979+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 36.540226ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:22:12.812388973+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.301534ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:22:27.636972357+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.943934ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:22:38.773380780+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.226974ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:22:39.986940745+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.863832ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:22:43.518477814+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.227804ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:22:49.812838803+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 47.723167ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:23:09.307205849+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 33.02914ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:23:09.378679292+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.654443ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:23:12.631971575+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.794469ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:23:19.655357863+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.387535ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:23:39.076599976+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.632537ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:23:40.400771175+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 53.811556ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:24:00.026623924+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 26.601231ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:24:10.266174653+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.571137ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:24:30.838174813+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.941449ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:27:17.404938969+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.655894ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:27:36.770359827+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.257276ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:27:36.908860059+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.340732ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:27:38.182662742+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.139799ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:38:12.029883269+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.372822ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:38:16.155032324+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.196105ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:38:16.884698894+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.185572ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:38:17.736674705+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.166438ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:38:24.829145680+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.274599ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:38:45.748836050+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.38226ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:38:48.864537113+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.576775ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:38:52.975325706+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.685434ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:39:08.643820153+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.189773ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:39:11.692109488+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.540928ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:47:36.827805637+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.093447ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:47:43.985462848+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.987557ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:49:41.532691152+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.403036ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:50:01.429168229+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.096858ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:50:07.373806909+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.020554ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:50:10.974075817+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.345666ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:50:12.987045013+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.356253ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:50:32.592909051+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.614257ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:50:44.834958551+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.844509ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:51:06.320183898+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.145074ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:51:18.439517171+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.747701ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:51:21.557573296+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.108619ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:51:22.234313735+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.533931ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:51:41.956878550+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.641988ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:51:44.624243324+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.956124ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:51:47.232695359+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.358063ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:51:48.554269507+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.464968ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:51:51.379309239+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.987803ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T06:51:53.157303760+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.665411ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T06:52:13.353863954+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.71047ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:02:16.249843031+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.901615ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:02:36.664587622+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.215226ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:02:43.776496402+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.494691ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:02:47.291642968+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.044335ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:02:48.140635855+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.354694ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:02:51.092347228+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.135929ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:07:20.072563465+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.794834ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:07:38.729427024+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 41.456408ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:07:44.921220082+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.527288ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:07:48.010288626+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.829313ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:08:21.663854028+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.091111ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:08:25.982458968+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.59764ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:08:26.725580814+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.755887ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:08:30.474197667+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.030761ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:08:32.915808991+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.076313ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:08:33.869777597+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.854407ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:08:44.282384450+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 64.594833ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:08:59.299130590+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.968696ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:21:45.167411262+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.604629ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:21:46.535402571+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.71954ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:21:48.719044391+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.622577ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:22:08.017419161+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 35.861602ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:22:11.288838022+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 36.332654ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:22:12.138846394+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.784717ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:22:18.348915255+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.639524ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:22:19.782622579+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 41.464606ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:22:23.798558418+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.858761ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:22:25.023174692+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.948329ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:26:57.855186547+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.669777ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:26:58.977480235+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.654789ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:26:59.430373339+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 24.539713ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:27:03.405832623+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.794114ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:27:09.303901161+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.367647ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:27:12.302265427+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 54.032687ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:29:58.107084567+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.190517ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:30:18.532500108+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 110.913023ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:30:26.048518746+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.222378ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:30:46.476236918+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.297728ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:30:49.853040401+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.204909ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:31:01.653201444+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.39205ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:31:22.357140879+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.186209ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:31:41.466161052+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.845247ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:31:50.124948348+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.784194ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:31:54.929804623+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 32.417852ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:31:55.153319562+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.522226ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:32:16.852935150+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.230384ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:32:17.970748930+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.26058ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:32:39.555359061+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.429182ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:34:24.726099773+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.985312ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:34:27.738612875+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 61.504981ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:34:31.910964543+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.334438ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:34:34.867493702+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.860264ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:34:50.986191441+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.140191ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:34:53.007430659+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.293257ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:34:53.944672230+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.59704ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:34:54.718655037+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.650036ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:36:41.336669107+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 40.088072ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:36:52.062353319+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 35.830818ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:36:55.374244440+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 90.472853ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:37:01.124852696+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.948016ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:37:08.376263416+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.944376ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:37:30.112106160+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.32021ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:37:34.246362600+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.240665ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:37:41.383361162+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 79.713163ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:37:45.879106641+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 50.739667ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:37:49.236742402+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.027194ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:38:08.246760475+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 40.88763ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:38:21.561921091+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.815549ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T07:38:26.833858661+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 34.471657ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T07:38:47.909116669+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 103.993713ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T18:40:21.165189622+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.590779ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T18:40:36.238147499+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.399541ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T18:40:36.771513938+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.01863ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T18:40:42.979532859+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.405156ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T18:40:43.150028655+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.087891ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T18:40:46.534100957+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.609492ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T18:40:46.830367407+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.933169ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:08:22.499809236+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.562477ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:08:22.895471056+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.349211ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:08:28.745752664+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.328105ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:08:38.435717159+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 41.726219ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:28:55.759116176+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.19629ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:29:00.391279290+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 76.210198ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:29:03.256803517+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.680675ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:29:22.383681988+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 82.953423ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:29:25.246848993+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.370407ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:29:26.707131763+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.368694ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:29:28.882173674+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.702434ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:29:29.777385098+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.043366ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:44:07.593442981+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.413398ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:44:08.037271019+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.872243ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:44:13.987283629+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.996446ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:44:15.590334144+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.151192ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:44:16.055808923+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.796902ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:44:16.728270683+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.11828ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:44:16.779462961+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.992911ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:44:20.790461174+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.759527ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:44:23.252710130+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 74.978246ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:44:26.730407596+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.339001ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:44:33.193588947+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.072794ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:44:37.068267208+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.051571ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:45:46.803556905+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.146096ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:45:48.689688292+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.614756ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:45:51.318665732+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.413538ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:46:12.301572422+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.628972ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:46:21.688689083+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.424078ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:46:24.118570330+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 38.30823ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:46:25.159181774+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 50.092108ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:46:35.457986583+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 36.021902ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:03.646664684+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 58.413803ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:22.675752796+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.39226ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:25.686445796+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.651584ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:29.263695291+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.506452ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:30.038418227+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.768994ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:30.389152888+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 45.613409ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:31.915371777+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 69.232471ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:33.403503165+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.503381ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:33.452507460+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 25.946888ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:34.778816572+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.62509ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:35.038124963+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.346406ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:37.789222082+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.503062ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:40.205189574+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.301568ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:41.197771517+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 134.775613ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:48:41.513082227+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.62235ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:48:42.681431937+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 74.106755ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:57:14.678770163+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.087451ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:57:34.973652103+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.723866ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:57:35.095218781+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.832519ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:57:36.674170781+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 67.710464ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:57:39.360838993+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.164912ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:57:40.931075877+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.031712ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:57:41.196127189+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.795394ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:00.421865666+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.710755ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:01.209350947+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.768203ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:06.424008608+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.074546ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:12.378682493+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.86284ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:14.348820498+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.259059ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:15.077644665+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.121482ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:26.221518594+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 40.938541ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:27.248028114+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.191464ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:27.605171875+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.083323ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:28.674073131+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.576915ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:30.095289510+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.680638ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:31.099299938+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.43374ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T19:58:32.561793327+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.268845ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T19:58:34.537607609+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.20926ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:02:39.610745513+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.942069ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:03:00.305896593+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.806347ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:03:06.264029595+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.977496ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:03:07.178070840+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.729672ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:03:18.342044379+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 98.623227ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:05:39.509350703+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.367186ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:05:40.822629158+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.672439ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:05:41.448282688+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.320083ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:05:45.618490236+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.259679ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:05:49.925475395+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.225365ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:05:56.356092314+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.300496ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:05:56.423899421+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.847762ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:06:18.005599619+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.079973ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:06:18.267550507+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.347486ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:06:21.635501431+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.264033ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:06:23.765342560+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.882798ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:06:25.689863217+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.647211ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:09:50.038484462+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.32303ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:10:02.789024269+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.209388ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:10:05.881220434+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 70.672877ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:10:07.141198901+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.520819ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:10:07.879505166+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.523499ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:10:08.022500784+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 68.202618ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:10:08.175949466+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.634527ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:10:18.373689836+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.798902ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:10:20.637265391+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.815249ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:10:41.951002862+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.141719ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:10:44.276986137+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.000388ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:03.825754721+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.84023ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:04.611233469+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.326177ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:07.179488876+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.721001ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:26.899718836+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.323016ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:27.251966423+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.083251ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:31.002289477+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.22371ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:32.504050716+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 25.486896ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:36.257854311+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 43.271413ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:36.989132955+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.745703ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:40.301906187+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 24.146303ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:42.363703104+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.480705ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:45.157602266+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.84514ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:47.545804900+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.500655ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:51.773739316+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.404975ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:13:52.174281239+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 86.765135ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:13:59.925017554+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.711677ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:14:01.711381864+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.389311ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:14:04.800940064+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.638188ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:14:08.095680784+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 43.689928ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:14:09.821291335+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.42881ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:14:12.072422544+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.802886ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:14:31.945600368+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.557379ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:14:34.668477874+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 45.003132ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:14:54.784229525+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.858606ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:14:59.408946665+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.695597ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:15:00.358241650+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.922807ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:17.995922141+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.613872ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:20.418711334+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.510149ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:20.505337179+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.512088ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:22.310350464+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.699167ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:22.974679896+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 66.129307ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:24.940884380+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.608615ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:26.134964125+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.680298ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:28.547772998+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.995146ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:31.197106937+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.938519ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:34.668429657+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.381267ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:40.520759575+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 69.694131ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:41.204704213+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 57.331847ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:42.349468491+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.740468ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:41:56.721905044+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.196864ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:41:57.620783810+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.60383ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:42:00.714931620+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.46489ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:42:01.557149235+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.29975ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:42:01.815820392+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 58.094677ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:42:03.225799273+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 75.690656ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:42:10.147856033+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.796226ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:42:11.785254886+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.583659ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:42:12.161310436+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.794778ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:42:12.244594753+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 75.74663ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:42:13.193723668+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.49674ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:45:48.399401142+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 71.590377ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:46:09.545631112+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.748181ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:46:11.763608629+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 127.370576ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:46:24.562398883+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 87.393943ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:46:25.643958622+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 150.118023ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:46:26.449825215+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.442792ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:46:31.445253897+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.805693ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:46:35.097292801+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.862594ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:54:46.240420869+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.230814ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:54:47.430663102+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.660193ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:54:49.225048533+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.423695ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:08.671496143+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.455881ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:16.994548254+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.687811ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:18.233906760+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 54.22123ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:18.771662223+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.307251ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:23.277226673+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.272848ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:26.682993558+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.921323ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:30.243702709+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.620469ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:32.177813737+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.116294ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:36.349757899+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.895094ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:37.699021353+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 50.571115ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:38.766541229+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.17541ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:45.629222202+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.880988ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:55:46.880661033+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.886257ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:55:49.773993113+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.994385ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:56:09.369623519+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.179282ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:56:09.682448183+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 58.18448ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:56:11.133247640+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.624176ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:56:12.833567100+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.2185ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:56:31.857866108+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.004829ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:56:33.759176168+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.745829ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:56:45.003931141+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.986825ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:56:46.498847444+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.361168ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:56:59.040509705+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.93806ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:57:02.239768160+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.020595ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:57:12.082957553+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.184466ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:57:18.763799781+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.116258ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:57:21.847792906+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.164514ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:57:29.180909383+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 42.591831ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:57:31.938557552+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.387267ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:57:34.344907449+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.685827ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:57:36.093711907+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.937834ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:57:39.719195994+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.175901ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:57:44.044939711+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 35.299949ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:57:53.366490780+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.939357ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:57:57.959565017+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.493731ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:58:01.750117252+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.343625ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:58:21.263198124+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.342533ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T20:58:22.446842495+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.714556ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T20:58:25.837344965+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.373302ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:02:44.367728201+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.512397ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:02:48.436338703+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.538374ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:02:51.892239626+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.849474ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:02:52.956179646+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.259773ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:02:56.084690518+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.665845ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:18.331249823+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.389176ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:20.360165645+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.55379ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:22.258922498+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.600046ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:23.204145814+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.628611ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:24.174721364+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.157195ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:25.580226226+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.329609ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:35.117132764+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.078593ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:43.722555625+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.054663ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:46.206299581+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 74.385608ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:47.513246611+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.230498ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:48.598933633+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 45.362175ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:49.433592273+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.3816ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:03:52.449226694+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.955658ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:03:58.088286883+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.635578ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:04:02.919598372+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.604339ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:04:13.069252593+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.544648ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:04:13.399912507+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.298993ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:04:13.701262575+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.082418ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:04:14.542689708+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.917767ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:04:25.166570889+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 42.37164ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:04:27.628556259+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.359702ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:04:27.943816597+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.916886ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:04:46.592850422+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.487324ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:04:55.072714470+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.221251ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:04:57.571671728+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.347899ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:02.037160020+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 61.493046ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:05:06.023298210+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.028444ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:11.277338435+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.208758ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:05:15.262253797+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.365112ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:23.603040998+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.63168ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:05:42.096653128+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.819638ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:46.873814709+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.135426ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:05:48.858271006+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.619294ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:50.782636695+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.331703ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:05:54.450373155+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.941432ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:55.208732018+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.29592ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:05:56.681793424+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.200387ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:05:56.871376117+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.607119ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:06:00.023062511+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.149828ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:06:01.181820427+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 38.551532ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:06:01.553503026+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.107679ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:06:02.484422344+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.243935ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:06:06.145254306+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 68.488724ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:06:08.719897287+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.015882ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:06:10.003520529+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.065367ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:06:11.196856736+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.171372ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:06:12.472788850+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.51049ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:29:39.170522919+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.2111ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:29:43.959920643+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.120646ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:29:54.385198056+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 26.20344ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:30:10.032045243+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.953413ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:30:15.316681177+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.295613ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:30:31.013832236+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.953662ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:30:34.125394203+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.951924ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:30:50.015121387+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 35.197262ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:30:50.213519921+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.408586ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:30:54.539422549+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.83029ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:30:54.981730867+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.834139ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:30:57.765378394+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.627135ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:31:03.247131925+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.189946ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:31:05.856648687+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.976956ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:31:07.864176473+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.672324ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:31:24.037856554+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.475466ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:31:24.753938078+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.349515ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:31:24.915762668+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.219741ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:31:25.257248290+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.754133ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:31:41.015681132+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.595962ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:31:43.704124669+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 38.044631ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:31:59.044134588+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.823984ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:32:01.347197575+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.118086ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:32:01.773325035+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.903191ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:32:02.824811051+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.212158ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:32:03.586209932+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.724674ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:32:04.729614518+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.499566ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:32:07.864092322+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.986264ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:32:08.057686427+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.781976ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:32:11.736605985+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.535038ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:02.491267789+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 66.686529ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:12.980931507+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.668699ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:13.489901989+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.91706ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:16.683244355+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 43.901226ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:19.399232168+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.275832ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:23.186755375+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.249613ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:25.645284265+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.445656ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:26.143258288+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.826329ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:34.573988078+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.481834ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:38.038463875+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.101361ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:38.366068623+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.815695ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:39.746033066+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.798893ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:44.132099276+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.957405ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:46.451832266+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.347096ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:46.801403418+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.07203ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:49.235198596+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 47.058806ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:46:53.484068787+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 76.171443ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:46:55.512985357+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.4854ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:59:22.882959963+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.718873ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:59:23.173981513+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.382753ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:59:27.896112616+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.494638ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:59:28.541537565+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.792666ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:59:29.250637904+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.036343ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:59:29.637066399+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.106378ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:59:38.382645925+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.953788ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:59:38.441892120+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.43168ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:59:51.171138677+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.104606ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T21:59:52.701544816+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.974332ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T21:59:57.008458351+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.039008ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:00.450513743+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.604709ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:03.390917809+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 48.795341ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:03.571288821+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.828518ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:07.593987178+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.521142ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:07.935279774+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.399339ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:09.040787138+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 57.090404ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:09.367185999+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.662672ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:12.460475048+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.651657ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:12.825331337+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.907236ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:14.846659374+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 41.789224ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:30.170188933+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.439883ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:32.021901976+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.036174ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:32.315783016+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.792155ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:00:33.587206779+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.101014ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:00:33.721162403+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 32.449944ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:25:13.943537964+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.24931ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:25:14.358428613+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.174ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:26:14.384014657+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 58.634164ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:33:12.699250918+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.619902ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:33:13.013596477+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 66.241122ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:33:31.920819970+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.150907ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:33:31.983308098+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.354805ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:33:42.111323977+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.883081ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:33:43.128359320+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.545398ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:33:45.709202637+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.781061ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:33:46.010547702+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.136491ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:33:48.988357648+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.773411ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:33:49.070666740+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.11359ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:33:56.872740899+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.084934ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:33:59.037818558+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.920737ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:34:03.792609722+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 25.093946ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:34:04.134364093+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.592206ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:34:16.325748641+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.461777ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:34:16.483248242+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 23.106447ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-01T22:56:03.579221780+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.314349ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-01T22:56:03.620249549+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.546257ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-02T15:30:19.714549461+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 53.085999ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:30:20.061072779+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.439431ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-02T15:47:22.905361292+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.721007ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:47:23.276788043+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.236316ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-02T15:55:53.902104175+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.271781ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:55:54.008473906+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.512302ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:56:09.032462371+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.638368ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-02T15:56:11.529343934+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.963212ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:56:12.041339021+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.74341ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-02T15:56:13.840747432+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.262333ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:56:14.212245835+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.473709ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-02T15:56:15.251481981+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.662709ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:56:15.553478107+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.952202ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:56:30.730022446+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.43923ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:56:45.794435904+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.263004ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-02T15:57:00.816269160+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.883335ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-04T18:14:36.681010302+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.003766ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:14:36.965603169+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.84651ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:14:51.999588661+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.581663ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:15:07.011570933+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.653732ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:15:22.075064151+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.129826ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-04T18:15:36.997196264+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.975083ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:15:37.085916399+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.749247ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:15:52.141592663+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.21289ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-04T18:17:46.643817746+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.56657ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:18:02.351746054+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 37.89857ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:18:17.420953800+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.511898ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:18:32.448214392+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.096785ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-04T18:18:47.461990192+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 26.549121ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T17:24:21.558829248+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.920585ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T17:24:37.178475155+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 56.153955ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T17:24:52.265766231+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.977392ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T17:25:07.305609619+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.213585ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T18:50:28.642073657+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.409506ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:50:43.748033971+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.627518ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:50:58.779121010+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 78.891685ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:51:13.881335607+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.970278ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T18:51:28.956053542+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.627669ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:51:44.766467351+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.100895ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:51:59.781358079+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.426722ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:52:14.875661581+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 29.48894ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T18:52:30.196904923+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 111.263752ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:52:45.848954711+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.75882ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T18:53:00.880685817+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.482706ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T19:00:24.538272133+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.628771ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:00:40.196231792+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.043437ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:00:55.223458916+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.744236ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:01:10.281156034+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.507638ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T19:01:29.251284289+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.158172ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:01:45.195646398+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 38.79819ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T19:06:46.332235681+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 64.122001ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:07:02.032234156+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.391856ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:07:17.055932813+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.31362ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:07:32.076229947+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.029689ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:07:47.129250139+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.157441ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:08:02.144853320+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 88.60669ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:08:17.239835987+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.581041ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:08:32.296880642+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 31.005849ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:08:47.331310217+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.450762ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T19:16:45.222739029+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.790756ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:17:01.118906039+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.431074ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:17:16.136865613+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 21.051488ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T19:30:51.234742680+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 35.546409ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:30:51.633028624+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.814947ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:31:06.662364383+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.159319ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:31:21.683177105+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 90.338619ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:31:36.807184143+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.358163ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:31:51.856675523+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 44.368708ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:32:06.903132332+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.68054ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:32:21.920448793+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 157.531921ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T19:32:37.089530657+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 457.013058ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:26:48.589138558+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.548436ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:26:48.703033064+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.901948ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:27:06.241755408+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.626724ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:06.932651234+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.479172ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:27:09.389378282+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.845281ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:10.966069140+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.234834ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:27:22.911150746+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 26.321423ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:24.773586958+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 55.470798ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:27:29.941180511+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.963333ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:31.101591560+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 62.472695ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:27:36.878890751+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.05704ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:38.013836112+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.791263ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:27:39.932682887+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.862316ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:39.988946976+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.81081ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:27:40.648845207+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.869643ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:50:09.192138944+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.915337ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:50:09.240398196+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 25.794104ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T20:54:24.380645123+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 40.545397ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T20:54:27.980529593+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.78472ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:01:03.248335295+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.574659ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:01:19.174390915+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 47.648897ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:04:37.888301323+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.683001ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:04:38.295737135+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 66.661405ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:10:01.096602405+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.036669ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:10:01.385367543+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.733882ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:23:00.038693345+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.261798ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:23:15.884896314+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.351065ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:35:19.905216033+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 42.302255ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:35:35.758634540+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.387056ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:36:04.111866278+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.688206ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:36:17.547363161+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.378177ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:42:54.847467587+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.346324ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:42:56.249528703+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.629199ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:43:11.269561364+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.048548ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:43:26.329388396+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 45.111258ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:43:41.447324760+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 41.655764ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:43:56.491674389+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.384346ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:47:07.116700493+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 46.27132ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:47:22.731369589+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.123575ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:49:28.296485948+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.392002ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:49:32.551621750+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.394814ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:50:13.597988596+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.241036ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:50:29.340266818+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.999143ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:51:42.287762152+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.901508ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:51:45.314498264+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 33.75561ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T21:56:58.059164462+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.553024ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T21:56:59.138823208+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.309074ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:01:31.382564649+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.9301ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:02:14.784694029+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.901312ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:05:09.989750844+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 30.99007ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:05:10.782534767+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 80.226069ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:06:56.053476009+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.516411ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:06:56.469363312+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 34.497062ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:12:05.073079286+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.39723ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:12:07.347238825+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.197988ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:19:36.471456251+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.603359ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:19:36.495376936+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 28.080118ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:27:23.227204362+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 96.272592ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:27:23.554617749+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.943559ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T22:58:11.660304971+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.939952ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T22:58:27.404883677+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.410509ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T23:00:13.307501421+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 49.298096ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T23:00:13.607661655+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.201465ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-05T23:01:45.518733751+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.117127ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-05T23:02:01.472116426+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 68.089248ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-06T02:09:06.732278997+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.935606ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-06T02:09:22.382308969+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 22.872358ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T18:29:43.073401133+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.334526ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T18:29:58.077569270+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.110902ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T18:29:58.299621376+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 18.176191ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T18:36:44.239436807+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.762738ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T18:36:44.402993687+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.980661ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T18:42:17.681659539+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.792462ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T18:42:33.295558259+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.550801ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T18:58:25.991690637+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.967974ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T18:58:26.325854019+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.003002ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T18:58:36.242557139+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.847457ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T18:58:36.576838246+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.147239ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T19:13:22.094241993+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.054086ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T19:13:38.107177545+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.692275ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T19:13:47.061910956+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 14.598345ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T19:14:03.116118115+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.88444ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T19:19:03.619062908+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.735884ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T19:19:22.155237513+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 16.138759ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T19:19:45.088253573+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.967943ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T19:19:45.154048593+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.562789ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T19:20:09.776997660+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.120445ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T19:22:16.074448285+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.270774ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T19:22:17.890639588+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.999385ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T19:24:19.075654764+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 27.586553ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T20:20:02.772119412+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.062721ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T20:20:25.444067054+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 12.91261ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-07T20:20:31.418052205+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.746306ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-07T20:22:32.277831080+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 35.56452ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-09T22:23:32.797560151+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.610491ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-09T22:25:33.543651879+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 13.393473ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-09T22:25:34.781099022+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 11.20296ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-09T22:25:34.849000478+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.3252ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-10T22:56:09.231009652+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.939542ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-10T22:58:12.653593600+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 9.119141ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-10T22:58:13.411466970+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.171108ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-10T22:58:13.770742103+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 17.151913ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-10T23:46:11.027193191+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.534108ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-10T23:48:12.874770866+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.860276ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-10T23:48:20.515375674+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.124012ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-10T23:48:20.691826432+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.827707ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-10T23:48:25.108644633+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.538564ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-10T23:50:25.875163278+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 20.465385ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T00:27:11.401032205+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.435716ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T00:29:12.544074108+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 6.728335ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T00:29:17.170420820+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.252632ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T00:31:18.543512119+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 15.853397ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T00:31:59.113854486+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.628165ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T00:31:59.236494955+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.73177ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T00:32:16.085663622+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 10.845423ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T00:34:16.628644228+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.647675ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T00:34:18.510676205+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.891491ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T00:34:18.769272386+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 8.254655ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T00:34:22.218065826+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.467872ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T22:19:04.248981907+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.376723ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T22:21:04.724177514+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 19.371937ms","prefix":"[BUY SWAP] => ","timestamp":"2025-07-11T23:19:39.881571480+00:00"} +{"level":"INFO","message":"✅ Sent via block‐engine in 7.906748ms","prefix":"[SELL SWAP] => ","timestamp":"2025-07-11T23:20:06.170638657+00:00"} diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/Cargo.toml b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/Cargo.toml new file mode 100644 index 0000000..aa39eb4 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "pump_interface" +version = "0.1.0" +edition = "2021" + +[dependencies.borsh] +version = "^0.10" + +[dependencies.num-derive] +version = "^0.3" + +[dependencies.num-traits] +version = "^0.2" + +[dependencies.serde] +optional = true +version = "^1.0" + +[dependencies.solana-program] +version = "^2.1.7" + +[dependencies.thiserror] +version = "^1.0" + +[dependencies.strum] +version = "0.26.3" + +[dependencies.strum_macros] +version = "0.26.4" + +[dependencies.Inflector] +version = "=0.11.4" \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/accounts.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/accounts.rs new file mode 100644 index 0000000..83e86d7 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/accounts.rs @@ -0,0 +1,84 @@ +use borsh::{BorshDeserialize, BorshSerialize}; +use solana_program::pubkey::Pubkey; +pub const GLOBAL_ACCOUNT_DISCM: [u8; 8] = [167, 232, 232, 177, 200, 108, 114, 127]; +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct Global { + pub initialized: bool, + pub authority: Pubkey, + pub fee_recipient: Pubkey, + pub initial_virtual_token_reserves: u64, + pub initial_virtual_sol_reserves: u64, + pub initial_real_token_reserves: u64, + pub token_total_supply: u64, + pub fee_basis_points: u64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct GlobalAccount(pub Global); +impl GlobalAccount { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + use std::io::Read; + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != GLOBAL_ACCOUNT_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + GLOBAL_ACCOUNT_DISCM, maybe_discm + ), + )); + } + Ok(Self(Global::deserialize(&mut reader)?)) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&GLOBAL_ACCOUNT_DISCM)?; + self.0.serialize(&mut writer) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub const BONDING_CURVE_ACCOUNT_DISCM: [u8; 8] = [23, 183, 248, 55, 96, 216, 172, 96]; +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct BondingCurve { + pub virtual_token_reserves: u64, + pub virtual_sol_reserves: u64, + pub real_token_reserves: u64, + pub real_sol_reserves: u64, + pub token_total_supply: u64, + pub complete: bool, +} +#[derive(Clone, Debug, PartialEq)] +pub struct BondingCurveAccount(pub BondingCurve); +impl BondingCurveAccount { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + use std::io::Read; + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != BONDING_CURVE_ACCOUNT_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + BONDING_CURVE_ACCOUNT_DISCM, maybe_discm + ), + )); + } + Ok(Self(BondingCurve::deserialize(&mut reader)?)) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&BONDING_CURVE_ACCOUNT_DISCM)?; + self.0.serialize(&mut writer) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/errors.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/errors.rs new file mode 100644 index 0000000..478e905 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/errors.rs @@ -0,0 +1,48 @@ +#![allow(non_local_definitions)] +use solana_program::{ + decode_error::DecodeError, + msg, + program_error::{PrintProgramError, ProgramError}, +}; +use thiserror::Error; +#[derive(Clone, Copy, Debug, Eq, Error, num_derive::FromPrimitive, PartialEq)] +pub enum PumpError { + #[error("The given account is not authorized to execute this instruction.")] + NotAuthorized = 6000, + #[error("The program is already initialized.")] + AlreadyInitialized = 6001, + #[error("slippage: Too much SOL required to buy the given amount of tokens.")] + TooMuchSolRequired = 6002, + #[error("slippage: Too little SOL received to sell the given amount of tokens.")] + TooLittleSolReceived = 6003, + #[error("The mint does not match the bonding curve.")] + MintDoesNotMatchBondingCurve = 6004, + #[error("The bonding curve has completed and liquidity migrated to raydium.")] + BondingCurveComplete = 6005, + #[error("The bonding curve has not completed.")] + BondingCurveNotComplete = 6006, + #[error("The program is not initialized.")] + NotInitialized = 6007, +} +impl From for ProgramError { + fn from(e: PumpError) -> Self { + ProgramError::Custom(e as u32) + } +} +impl DecodeError for PumpError { + fn type_of() -> &'static str { + "PumpError" + } +} +impl PrintProgramError for PumpError { + fn print(&self) + where + E: 'static + + std::error::Error + + DecodeError + + PrintProgramError + + num_traits::FromPrimitive, + { + msg!(&self.to_string()); + } +} diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/events.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/events.rs new file mode 100644 index 0000000..e9df253 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/events.rs @@ -0,0 +1,134 @@ +use borsh::{BorshDeserialize, BorshSerialize}; +use solana_program::pubkey::Pubkey; +pub const CREATE_EVENT_EVENT_DISCM: [u8; 8] = [27, 114, 169, 77, 222, 235, 99, 118]; +#[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize)] +pub struct CreateEvent { + name: String, + symbol: String, + uri: String, + mint: Pubkey, + bonding_curve: Pubkey, + user: Pubkey, +} +#[derive(Clone, Debug, PartialEq)] +pub struct CreateEventEvent(pub CreateEvent); +impl BorshSerialize for CreateEventEvent { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + CREATE_EVENT_EVENT_DISCM.serialize(writer)?; + self.0.serialize(writer) + } +} +impl CreateEventEvent { + pub fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let maybe_discm = <[u8; 8]>::deserialize(buf)?; + if maybe_discm != CREATE_EVENT_EVENT_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + CREATE_EVENT_EVENT_DISCM, maybe_discm + ), + )); + } + Ok(Self(CreateEvent::deserialize(buf)?)) + } +} +pub const TRADE_EVENT_EVENT_DISCM: [u8; 8] = [189, 219, 127, 211, 78, 230, 97, 238]; +#[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize)] +pub struct TradeEvent { + mint: Pubkey, + sol_amount: u64, + token_amount: u64, + is_buy: bool, + user: Pubkey, + timestamp: i64, + virtual_sol_reserves: u64, + virtual_token_reserves: u64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct TradeEventEvent(pub TradeEvent); +impl BorshSerialize for TradeEventEvent { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + TRADE_EVENT_EVENT_DISCM.serialize(writer)?; + self.0.serialize(writer) + } +} +impl TradeEventEvent { + pub fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let maybe_discm = <[u8; 8]>::deserialize(buf)?; + if maybe_discm != TRADE_EVENT_EVENT_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + TRADE_EVENT_EVENT_DISCM, maybe_discm + ), + )); + } + Ok(Self(TradeEvent::deserialize(buf)?)) + } +} +pub const COMPLETE_EVENT_EVENT_DISCM: [u8; 8] = [95, 114, 97, 156, 212, 46, 152, 8]; +#[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize)] +pub struct CompleteEvent { + user: Pubkey, + mint: Pubkey, + bonding_curve: Pubkey, + timestamp: i64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct CompleteEventEvent(pub CompleteEvent); +impl BorshSerialize for CompleteEventEvent { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + COMPLETE_EVENT_EVENT_DISCM.serialize(writer)?; + self.0.serialize(writer) + } +} +impl CompleteEventEvent { + pub fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let maybe_discm = <[u8; 8]>::deserialize(buf)?; + if maybe_discm != COMPLETE_EVENT_EVENT_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + COMPLETE_EVENT_EVENT_DISCM, maybe_discm + ), + )); + } + Ok(Self(CompleteEvent::deserialize(buf)?)) + } +} +pub const SET_PARAMS_EVENT_EVENT_DISCM: [u8; 8] = [223, 195, 159, 246, 62, 48, 143, 131]; +#[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize)] +pub struct SetParamsEvent { + fee_recipient: Pubkey, + initial_virtual_token_reserves: u64, + initial_virtual_sol_reserves: u64, + initial_real_token_reserves: u64, + token_total_supply: u64, + fee_basis_points: u64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct SetParamsEventEvent(pub SetParamsEvent); +impl BorshSerialize for SetParamsEventEvent { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + SET_PARAMS_EVENT_EVENT_DISCM.serialize(writer)?; + self.0.serialize(writer) + } +} +impl SetParamsEventEvent { + pub fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let maybe_discm = <[u8; 8]>::deserialize(buf)?; + if maybe_discm != SET_PARAMS_EVENT_EVENT_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + SET_PARAMS_EVENT_EVENT_DISCM, maybe_discm + ), + )); + } + Ok(Self(SetParamsEvent::deserialize(buf)?)) + } +} diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/instructions.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/instructions.rs new file mode 100644 index 0000000..0591463 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/instructions.rs @@ -0,0 +1,1772 @@ +#[cfg(feature = "serde")] +// use crate::serializer::{deserialize_u128_as_string, serialize_u128_as_string}; +use borsh::{BorshDeserialize, BorshSerialize}; +use inflector::Inflector; +use solana_program::{ + account_info::AccountInfo, + entrypoint::ProgramResult, + instruction::{AccountMeta, Instruction}, + program::{invoke, invoke_signed}, + program_error::ProgramError, + pubkey::Pubkey, +}; +use std::io::Read; +// use std::fmt; +use strum_macros::{Display, EnumString}; + +#[derive(Clone, Debug, PartialEq, EnumString, Display)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum PumpProgramIx { + Initialize, + SetParams(SetParamsIxArgs), + Create(CreateIxArgs), + Buy(BuyIxArgs), + Sell(SellIxArgs), + Withdraw, +} + +impl PumpProgramIx { + pub fn name(&self) -> String { + // Use the ToString derived method to get the enum variant name + self.to_string().to_camel_case() + } + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + match maybe_discm { + INITIALIZE_IX_DISCM => Ok(Self::Initialize), + SET_PARAMS_IX_DISCM => Ok(Self::SetParams(SetParamsIxArgs::deserialize(&mut reader)?)), + CREATE_IX_DISCM => Ok(Self::Create(CreateIxArgs::deserialize(&mut reader)?)), + BUY_IX_DISCM => Ok(Self::Buy(BuyIxArgs::deserialize(&mut reader)?)), + SELL_IX_DISCM => Ok(Self::Sell(SellIxArgs::deserialize(&mut reader)?)), + WITHDRAW_IX_DISCM => Ok(Self::Withdraw), + _ => Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!("discm {:?} not found", maybe_discm), + )), + } + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + match self { + Self::Initialize => writer.write_all(&INITIALIZE_IX_DISCM), + Self::SetParams(args) => { + writer.write_all(&SET_PARAMS_IX_DISCM)?; + args.serialize(&mut writer) + } + Self::Create(args) => { + writer.write_all(&CREATE_IX_DISCM)?; + args.serialize(&mut writer) + } + Self::Buy(args) => { + writer.write_all(&BUY_IX_DISCM)?; + args.serialize(&mut writer) + } + Self::Sell(args) => { + writer.write_all(&SELL_IX_DISCM)?; + args.serialize(&mut writer) + } + Self::Withdraw => writer.write_all(&WITHDRAW_IX_DISCM), + } + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +fn invoke_instruction<'info, A: Into<[AccountInfo<'info>; N]>, const N: usize>( + ix: &Instruction, + accounts: A, +) -> ProgramResult { + let account_info: [AccountInfo<'info>; N] = accounts.into(); + invoke(ix, &account_info) +} +fn invoke_instruction_signed<'info, A: Into<[AccountInfo<'info>; N]>, const N: usize>( + ix: &Instruction, + accounts: A, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let account_info: [AccountInfo<'info>; N] = accounts.into(); + invoke_signed(ix, &account_info, seeds) +} +pub const INITIALIZE_IX_ACCOUNTS_LEN: usize = 3; +#[derive(Copy, Clone, Debug)] +pub struct InitializeAccounts<'me, 'info> { + pub global: &'me AccountInfo<'info>, + pub user: &'me AccountInfo<'info>, + pub system_program: &'me AccountInfo<'info>, +} +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct InitializeKeys { + pub global: Pubkey, + pub user: Pubkey, + pub system_program: Pubkey, +} +impl From> for InitializeKeys { + fn from(accounts: InitializeAccounts) -> Self { + Self { + global: *accounts.global.key, + user: *accounts.user.key, + system_program: *accounts.system_program.key, + } + } +} +impl From for [AccountMeta; INITIALIZE_IX_ACCOUNTS_LEN] { + fn from(keys: InitializeKeys) -> Self { + [ + AccountMeta { + pubkey: keys.global, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.user, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.system_program, + is_signer: false, + is_writable: false, + }, + ] + } +} +impl From<[Pubkey; INITIALIZE_IX_ACCOUNTS_LEN]> for InitializeKeys { + fn from(pubkeys: [Pubkey; INITIALIZE_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: pubkeys[0], + user: pubkeys[1], + system_program: pubkeys[2], + } + } +} +impl<'info> From> + for [AccountInfo<'info>; INITIALIZE_IX_ACCOUNTS_LEN] +{ + fn from(accounts: InitializeAccounts<'_, 'info>) -> Self { + [ + accounts.global.clone(), + accounts.user.clone(), + accounts.system_program.clone(), + ] + } +} +impl<'me, 'info> From<&'me [AccountInfo<'info>; INITIALIZE_IX_ACCOUNTS_LEN]> + for InitializeAccounts<'me, 'info> +{ + fn from(arr: &'me [AccountInfo<'info>; INITIALIZE_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: &arr[0], + user: &arr[1], + system_program: &arr[2], + } + } +} +pub const INITIALIZE_IX_DISCM: [u8; 8] = [175, 175, 109, 31, 13, 152, 155, 237]; +#[derive(Clone, Debug, PartialEq)] +pub struct InitializeIxData; +impl InitializeIxData { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != INITIALIZE_IX_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + INITIALIZE_IX_DISCM, maybe_discm + ), + )); + } + Ok(Self) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&INITIALIZE_IX_DISCM) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub fn initialize_ix_with_program_id( + program_id: Pubkey, + keys: InitializeKeys, +) -> std::io::Result { + let metas: [AccountMeta; INITIALIZE_IX_ACCOUNTS_LEN] = keys.into(); + Ok(Instruction { + program_id, + accounts: Vec::from(metas), + data: InitializeIxData.try_to_vec()?, + }) +} +pub fn initialize_ix(keys: InitializeKeys) -> std::io::Result { + initialize_ix_with_program_id(crate::ID, keys) +} +pub fn initialize_invoke_with_program_id( + program_id: Pubkey, + accounts: InitializeAccounts<'_, '_>, +) -> ProgramResult { + let keys: InitializeKeys = accounts.into(); + let ix = initialize_ix_with_program_id(program_id, keys)?; + invoke_instruction(&ix, accounts) +} +pub fn initialize_invoke(accounts: InitializeAccounts<'_, '_>) -> ProgramResult { + initialize_invoke_with_program_id(crate::ID, accounts) +} +pub fn initialize_invoke_signed_with_program_id( + program_id: Pubkey, + accounts: InitializeAccounts<'_, '_>, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let keys: InitializeKeys = accounts.into(); + let ix = initialize_ix_with_program_id(program_id, keys)?; + invoke_instruction_signed(&ix, accounts, seeds) +} +pub fn initialize_invoke_signed( + accounts: InitializeAccounts<'_, '_>, + seeds: &[&[&[u8]]], +) -> ProgramResult { + initialize_invoke_signed_with_program_id(crate::ID, accounts, seeds) +} +pub fn initialize_verify_account_keys( + accounts: InitializeAccounts<'_, '_>, + keys: InitializeKeys, +) -> Result<(), (Pubkey, Pubkey)> { + for (actual, expected) in [ + (*accounts.global.key, keys.global), + (*accounts.user.key, keys.user), + (*accounts.system_program.key, keys.system_program), + ] { + if actual != expected { + return Err((actual, expected)); + } + } + Ok(()) +} +pub fn initialize_verify_writable_privileges<'me, 'info>( + accounts: InitializeAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_writable in [accounts.global, accounts.user] { + if !should_be_writable.is_writable { + return Err((should_be_writable, ProgramError::InvalidAccountData)); + } + } + Ok(()) +} +pub fn initialize_verify_signer_privileges<'me, 'info>( + accounts: InitializeAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_signer in [accounts.user] { + if !should_be_signer.is_signer { + return Err((should_be_signer, ProgramError::MissingRequiredSignature)); + } + } + Ok(()) +} +pub fn initialize_verify_account_privileges<'me, 'info>( + accounts: InitializeAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + initialize_verify_writable_privileges(accounts)?; + initialize_verify_signer_privileges(accounts)?; + Ok(()) +} +pub const SET_PARAMS_IX_ACCOUNTS_LEN: usize = 5; +#[derive(Copy, Clone, Debug)] +pub struct SetParamsAccounts<'me, 'info> { + pub global: &'me AccountInfo<'info>, + pub user: &'me AccountInfo<'info>, + pub system_program: &'me AccountInfo<'info>, + pub event_authority: &'me AccountInfo<'info>, + pub program: &'me AccountInfo<'info>, +} +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct SetParamsKeys { + pub global: Pubkey, + pub user: Pubkey, + pub system_program: Pubkey, + pub event_authority: Pubkey, + pub program: Pubkey, +} +impl From> for SetParamsKeys { + fn from(accounts: SetParamsAccounts) -> Self { + Self { + global: *accounts.global.key, + user: *accounts.user.key, + system_program: *accounts.system_program.key, + event_authority: *accounts.event_authority.key, + program: *accounts.program.key, + } + } +} +impl From for [AccountMeta; SET_PARAMS_IX_ACCOUNTS_LEN] { + fn from(keys: SetParamsKeys) -> Self { + [ + AccountMeta { + pubkey: keys.global, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.user, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.system_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.event_authority, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.program, + is_signer: false, + is_writable: false, + }, + ] + } +} +impl From<[Pubkey; SET_PARAMS_IX_ACCOUNTS_LEN]> for SetParamsKeys { + fn from(pubkeys: [Pubkey; SET_PARAMS_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: pubkeys[0], + user: pubkeys[1], + system_program: pubkeys[2], + event_authority: pubkeys[3], + program: pubkeys[4], + } + } +} +impl<'info> From> + for [AccountInfo<'info>; SET_PARAMS_IX_ACCOUNTS_LEN] +{ + fn from(accounts: SetParamsAccounts<'_, 'info>) -> Self { + [ + accounts.global.clone(), + accounts.user.clone(), + accounts.system_program.clone(), + accounts.event_authority.clone(), + accounts.program.clone(), + ] + } +} +impl<'me, 'info> From<&'me [AccountInfo<'info>; SET_PARAMS_IX_ACCOUNTS_LEN]> + for SetParamsAccounts<'me, 'info> +{ + fn from(arr: &'me [AccountInfo<'info>; SET_PARAMS_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: &arr[0], + user: &arr[1], + system_program: &arr[2], + event_authority: &arr[3], + program: &arr[4], + } + } +} +pub const SET_PARAMS_IX_DISCM: [u8; 8] = [27, 234, 178, 52, 147, 2, 187, 141]; +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct SetParamsIxArgs { + pub fee_recipient: Pubkey, + pub initial_virtual_token_reserves: u64, + pub initial_virtual_sol_reserves: u64, + pub initial_real_token_reserves: u64, + pub token_total_supply: u64, + pub fee_basis_points: u64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct SetParamsIxData(pub SetParamsIxArgs); +impl From for SetParamsIxData { + fn from(args: SetParamsIxArgs) -> Self { + Self(args) + } +} +impl SetParamsIxData { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != SET_PARAMS_IX_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + SET_PARAMS_IX_DISCM, maybe_discm + ), + )); + } + Ok(Self(SetParamsIxArgs::deserialize(&mut reader)?)) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&SET_PARAMS_IX_DISCM)?; + self.0.serialize(&mut writer) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub fn set_params_ix_with_program_id( + program_id: Pubkey, + keys: SetParamsKeys, + args: SetParamsIxArgs, +) -> std::io::Result { + let metas: [AccountMeta; SET_PARAMS_IX_ACCOUNTS_LEN] = keys.into(); + let data: SetParamsIxData = args.into(); + Ok(Instruction { + program_id, + accounts: Vec::from(metas), + data: data.try_to_vec()?, + }) +} +pub fn set_params_ix(keys: SetParamsKeys, args: SetParamsIxArgs) -> std::io::Result { + set_params_ix_with_program_id(crate::ID, keys, args) +} +pub fn set_params_invoke_with_program_id( + program_id: Pubkey, + accounts: SetParamsAccounts<'_, '_>, + args: SetParamsIxArgs, +) -> ProgramResult { + let keys: SetParamsKeys = accounts.into(); + let ix = set_params_ix_with_program_id(program_id, keys, args)?; + invoke_instruction(&ix, accounts) +} +pub fn set_params_invoke( + accounts: SetParamsAccounts<'_, '_>, + args: SetParamsIxArgs, +) -> ProgramResult { + set_params_invoke_with_program_id(crate::ID, accounts, args) +} +pub fn set_params_invoke_signed_with_program_id( + program_id: Pubkey, + accounts: SetParamsAccounts<'_, '_>, + args: SetParamsIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let keys: SetParamsKeys = accounts.into(); + let ix = set_params_ix_with_program_id(program_id, keys, args)?; + invoke_instruction_signed(&ix, accounts, seeds) +} +pub fn set_params_invoke_signed( + accounts: SetParamsAccounts<'_, '_>, + args: SetParamsIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + set_params_invoke_signed_with_program_id(crate::ID, accounts, args, seeds) +} +pub fn set_params_verify_account_keys( + accounts: SetParamsAccounts<'_, '_>, + keys: SetParamsKeys, +) -> Result<(), (Pubkey, Pubkey)> { + for (actual, expected) in [ + (*accounts.global.key, keys.global), + (*accounts.user.key, keys.user), + (*accounts.system_program.key, keys.system_program), + (*accounts.event_authority.key, keys.event_authority), + (*accounts.program.key, keys.program), + ] { + if actual != expected { + return Err((actual, expected)); + } + } + Ok(()) +} +pub fn set_params_verify_writable_privileges<'me, 'info>( + accounts: SetParamsAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_writable in [accounts.global, accounts.user] { + if !should_be_writable.is_writable { + return Err((should_be_writable, ProgramError::InvalidAccountData)); + } + } + Ok(()) +} +pub fn set_params_verify_signer_privileges<'me, 'info>( + accounts: SetParamsAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_signer in [accounts.user] { + if !should_be_signer.is_signer { + return Err((should_be_signer, ProgramError::MissingRequiredSignature)); + } + } + Ok(()) +} +pub fn set_params_verify_account_privileges<'me, 'info>( + accounts: SetParamsAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + set_params_verify_writable_privileges(accounts)?; + set_params_verify_signer_privileges(accounts)?; + Ok(()) +} +pub const CREATE_IX_ACCOUNTS_LEN: usize = 14; +#[derive(Copy, Clone, Debug)] +pub struct CreateAccounts<'me, 'info> { + pub mint: &'me AccountInfo<'info>, + pub mint_authority: &'me AccountInfo<'info>, + pub bonding_curve: &'me AccountInfo<'info>, + pub associated_bonding_curve: &'me AccountInfo<'info>, + pub global: &'me AccountInfo<'info>, + pub mpl_token_metadata: &'me AccountInfo<'info>, + pub metadata: &'me AccountInfo<'info>, + pub user: &'me AccountInfo<'info>, + pub system_program: &'me AccountInfo<'info>, + pub token_program: &'me AccountInfo<'info>, + pub associated_token_program: &'me AccountInfo<'info>, + pub rent: &'me AccountInfo<'info>, + pub event_authority: &'me AccountInfo<'info>, + pub program: &'me AccountInfo<'info>, +} +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct CreateKeys { + pub mint: Pubkey, + pub mint_authority: Pubkey, + pub bonding_curve: Pubkey, + pub associated_bonding_curve: Pubkey, + pub global: Pubkey, + pub mpl_token_metadata: Pubkey, + pub metadata: Pubkey, + pub user: Pubkey, + pub system_program: Pubkey, + pub token_program: Pubkey, + pub associated_token_program: Pubkey, + pub rent: Pubkey, + pub event_authority: Pubkey, + pub program: Pubkey, +} +impl From> for CreateKeys { + fn from(accounts: CreateAccounts) -> Self { + Self { + mint: *accounts.mint.key, + mint_authority: *accounts.mint_authority.key, + bonding_curve: *accounts.bonding_curve.key, + associated_bonding_curve: *accounts.associated_bonding_curve.key, + global: *accounts.global.key, + mpl_token_metadata: *accounts.mpl_token_metadata.key, + metadata: *accounts.metadata.key, + user: *accounts.user.key, + system_program: *accounts.system_program.key, + token_program: *accounts.token_program.key, + associated_token_program: *accounts.associated_token_program.key, + rent: *accounts.rent.key, + event_authority: *accounts.event_authority.key, + program: *accounts.program.key, + } + } +} +impl From for [AccountMeta; CREATE_IX_ACCOUNTS_LEN] { + fn from(keys: CreateKeys) -> Self { + [ + AccountMeta { + pubkey: keys.mint, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.mint_authority, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.global, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.mpl_token_metadata, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.metadata, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.user, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.system_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.token_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.associated_token_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.rent, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.event_authority, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.program, + is_signer: false, + is_writable: false, + }, + ] + } +} +impl From<[Pubkey; CREATE_IX_ACCOUNTS_LEN]> for CreateKeys { + fn from(pubkeys: [Pubkey; CREATE_IX_ACCOUNTS_LEN]) -> Self { + Self { + mint: pubkeys[0], + mint_authority: pubkeys[1], + bonding_curve: pubkeys[2], + associated_bonding_curve: pubkeys[3], + global: pubkeys[4], + mpl_token_metadata: pubkeys[5], + metadata: pubkeys[6], + user: pubkeys[7], + system_program: pubkeys[8], + token_program: pubkeys[9], + associated_token_program: pubkeys[10], + rent: pubkeys[11], + event_authority: pubkeys[12], + program: pubkeys[13], + } + } +} +impl<'info> From> for [AccountInfo<'info>; CREATE_IX_ACCOUNTS_LEN] { + fn from(accounts: CreateAccounts<'_, 'info>) -> Self { + [ + accounts.mint.clone(), + accounts.mint_authority.clone(), + accounts.bonding_curve.clone(), + accounts.associated_bonding_curve.clone(), + accounts.global.clone(), + accounts.mpl_token_metadata.clone(), + accounts.metadata.clone(), + accounts.user.clone(), + accounts.system_program.clone(), + accounts.token_program.clone(), + accounts.associated_token_program.clone(), + accounts.rent.clone(), + accounts.event_authority.clone(), + accounts.program.clone(), + ] + } +} +impl<'me, 'info> From<&'me [AccountInfo<'info>; CREATE_IX_ACCOUNTS_LEN]> + for CreateAccounts<'me, 'info> +{ + fn from(arr: &'me [AccountInfo<'info>; CREATE_IX_ACCOUNTS_LEN]) -> Self { + Self { + mint: &arr[0], + mint_authority: &arr[1], + bonding_curve: &arr[2], + associated_bonding_curve: &arr[3], + global: &arr[4], + mpl_token_metadata: &arr[5], + metadata: &arr[6], + user: &arr[7], + system_program: &arr[8], + token_program: &arr[9], + associated_token_program: &arr[10], + rent: &arr[11], + event_authority: &arr[12], + program: &arr[13], + } + } +} +pub const CREATE_IX_DISCM: [u8; 8] = [24, 30, 200, 40, 5, 28, 7, 119]; +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct CreateIxArgs { + pub name: String, + pub symbol: String, + pub uri: String, + pub creator: Pubkey, +} +#[derive(Clone, Debug, PartialEq)] +pub struct CreateIxData(pub CreateIxArgs); +impl From for CreateIxData { + fn from(args: CreateIxArgs) -> Self { + Self(args) + } +} +impl CreateIxData { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != CREATE_IX_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + CREATE_IX_DISCM, maybe_discm + ), + )); + } + Ok(Self(CreateIxArgs::deserialize(&mut reader)?)) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&CREATE_IX_DISCM)?; + self.0.serialize(&mut writer) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub fn create_ix_with_program_id( + program_id: Pubkey, + keys: CreateKeys, + args: CreateIxArgs, +) -> std::io::Result { + let metas: [AccountMeta; CREATE_IX_ACCOUNTS_LEN] = keys.into(); + let data: CreateIxData = args.into(); + Ok(Instruction { + program_id, + accounts: Vec::from(metas), + data: data.try_to_vec()?, + }) +} +pub fn create_ix(keys: CreateKeys, args: CreateIxArgs) -> std::io::Result { + create_ix_with_program_id(crate::ID, keys, args) +} +pub fn create_invoke_with_program_id( + program_id: Pubkey, + accounts: CreateAccounts<'_, '_>, + args: CreateIxArgs, +) -> ProgramResult { + let keys: CreateKeys = accounts.into(); + let ix = create_ix_with_program_id(program_id, keys, args)?; + invoke_instruction(&ix, accounts) +} +pub fn create_invoke(accounts: CreateAccounts<'_, '_>, args: CreateIxArgs) -> ProgramResult { + create_invoke_with_program_id(crate::ID, accounts, args) +} +pub fn create_invoke_signed_with_program_id( + program_id: Pubkey, + accounts: CreateAccounts<'_, '_>, + args: CreateIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let keys: CreateKeys = accounts.into(); + let ix = create_ix_with_program_id(program_id, keys, args)?; + invoke_instruction_signed(&ix, accounts, seeds) +} +pub fn create_invoke_signed( + accounts: CreateAccounts<'_, '_>, + args: CreateIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + create_invoke_signed_with_program_id(crate::ID, accounts, args, seeds) +} +pub fn create_verify_account_keys( + accounts: CreateAccounts<'_, '_>, + keys: CreateKeys, +) -> Result<(), (Pubkey, Pubkey)> { + for (actual, expected) in [ + (*accounts.mint.key, keys.mint), + (*accounts.mint_authority.key, keys.mint_authority), + (*accounts.bonding_curve.key, keys.bonding_curve), + ( + *accounts.associated_bonding_curve.key, + keys.associated_bonding_curve, + ), + (*accounts.global.key, keys.global), + (*accounts.mpl_token_metadata.key, keys.mpl_token_metadata), + (*accounts.metadata.key, keys.metadata), + (*accounts.user.key, keys.user), + (*accounts.system_program.key, keys.system_program), + (*accounts.token_program.key, keys.token_program), + ( + *accounts.associated_token_program.key, + keys.associated_token_program, + ), + (*accounts.rent.key, keys.rent), + (*accounts.event_authority.key, keys.event_authority), + (*accounts.program.key, keys.program), + ] { + if actual != expected { + return Err((actual, expected)); + } + } + Ok(()) +} +pub fn create_verify_writable_privileges<'me, 'info>( + accounts: CreateAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_writable in [ + accounts.mint, + accounts.bonding_curve, + accounts.associated_bonding_curve, + accounts.metadata, + accounts.user, + ] { + if !should_be_writable.is_writable { + return Err((should_be_writable, ProgramError::InvalidAccountData)); + } + } + Ok(()) +} +pub fn create_verify_signer_privileges<'me, 'info>( + accounts: CreateAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_signer in [accounts.mint, accounts.user] { + if !should_be_signer.is_signer { + return Err((should_be_signer, ProgramError::MissingRequiredSignature)); + } + } + Ok(()) +} +pub fn create_verify_account_privileges<'me, 'info>( + accounts: CreateAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + create_verify_writable_privileges(accounts)?; + create_verify_signer_privileges(accounts)?; + Ok(()) +} +pub const BUY_IX_ACCOUNTS_LEN: usize = 12; +#[derive(Copy, Clone, Debug)] +pub struct BuyAccounts<'me, 'info> { + pub global: &'me AccountInfo<'info>, + pub fee_recipient: &'me AccountInfo<'info>, + pub mint: &'me AccountInfo<'info>, + pub bonding_curve: &'me AccountInfo<'info>, + pub associated_bonding_curve: &'me AccountInfo<'info>, + pub associated_user: &'me AccountInfo<'info>, + pub user: &'me AccountInfo<'info>, + pub system_program: &'me AccountInfo<'info>, + pub token_program: &'me AccountInfo<'info>, + pub rent: &'me AccountInfo<'info>, + pub event_authority: &'me AccountInfo<'info>, + pub program: &'me AccountInfo<'info>, +} +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct BuyKeys { + pub global: Pubkey, + pub fee_recipient: Pubkey, + pub mint: Pubkey, + pub bonding_curve: Pubkey, + pub associated_bonding_curve: Pubkey, + pub associated_user: Pubkey, + pub user: Pubkey, + pub system_program: Pubkey, + pub token_program: Pubkey, + pub rent: Pubkey, + pub event_authority: Pubkey, + pub program: Pubkey, +} +impl From> for BuyKeys { + fn from(accounts: BuyAccounts) -> Self { + Self { + global: *accounts.global.key, + fee_recipient: *accounts.fee_recipient.key, + mint: *accounts.mint.key, + bonding_curve: *accounts.bonding_curve.key, + associated_bonding_curve: *accounts.associated_bonding_curve.key, + associated_user: *accounts.associated_user.key, + user: *accounts.user.key, + system_program: *accounts.system_program.key, + token_program: *accounts.token_program.key, + rent: *accounts.rent.key, + event_authority: *accounts.event_authority.key, + program: *accounts.program.key, + } + } +} +impl From for [AccountMeta; BUY_IX_ACCOUNTS_LEN] { + fn from(keys: BuyKeys) -> Self { + [ + AccountMeta { + pubkey: keys.global, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.fee_recipient, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.mint, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_user, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.user, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.system_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.token_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.rent, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.event_authority, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.program, + is_signer: false, + is_writable: false, + }, + ] + } +} +impl From<[Pubkey; BUY_IX_ACCOUNTS_LEN]> for BuyKeys { + fn from(pubkeys: [Pubkey; BUY_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: pubkeys[0], + fee_recipient: pubkeys[1], + mint: pubkeys[2], + bonding_curve: pubkeys[3], + associated_bonding_curve: pubkeys[4], + associated_user: pubkeys[5], + user: pubkeys[6], + system_program: pubkeys[7], + token_program: pubkeys[8], + rent: pubkeys[9], + event_authority: pubkeys[10], + program: pubkeys[11], + } + } +} +impl<'info> From> for [AccountInfo<'info>; BUY_IX_ACCOUNTS_LEN] { + fn from(accounts: BuyAccounts<'_, 'info>) -> Self { + [ + accounts.global.clone(), + accounts.fee_recipient.clone(), + accounts.mint.clone(), + accounts.bonding_curve.clone(), + accounts.associated_bonding_curve.clone(), + accounts.associated_user.clone(), + accounts.user.clone(), + accounts.system_program.clone(), + accounts.token_program.clone(), + accounts.rent.clone(), + accounts.event_authority.clone(), + accounts.program.clone(), + ] + } +} +impl<'me, 'info> From<&'me [AccountInfo<'info>; BUY_IX_ACCOUNTS_LEN]> for BuyAccounts<'me, 'info> { + fn from(arr: &'me [AccountInfo<'info>; BUY_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: &arr[0], + fee_recipient: &arr[1], + mint: &arr[2], + bonding_curve: &arr[3], + associated_bonding_curve: &arr[4], + associated_user: &arr[5], + user: &arr[6], + system_program: &arr[7], + token_program: &arr[8], + rent: &arr[9], + event_authority: &arr[10], + program: &arr[11], + } + } +} +pub const BUY_IX_DISCM: [u8; 8] = [102, 6, 61, 18, 1, 218, 235, 234]; +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct BuyIxArgs { + pub amount: u64, + pub max_sol_cost: u64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct BuyIxData(pub BuyIxArgs); +impl From for BuyIxData { + fn from(args: BuyIxArgs) -> Self { + Self(args) + } +} +impl BuyIxData { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != BUY_IX_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + BUY_IX_DISCM, maybe_discm + ), + )); + } + Ok(Self(BuyIxArgs::deserialize(&mut reader)?)) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&BUY_IX_DISCM)?; + self.0.serialize(&mut writer) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub fn buy_ix_with_program_id( + program_id: Pubkey, + keys: BuyKeys, + args: BuyIxArgs, +) -> std::io::Result { + let metas: [AccountMeta; BUY_IX_ACCOUNTS_LEN] = keys.into(); + let data: BuyIxData = args.into(); + Ok(Instruction { + program_id, + accounts: Vec::from(metas), + data: data.try_to_vec()?, + }) +} +pub fn buy_ix(keys: BuyKeys, args: BuyIxArgs) -> std::io::Result { + buy_ix_with_program_id(crate::ID, keys, args) +} +pub fn buy_invoke_with_program_id( + program_id: Pubkey, + accounts: BuyAccounts<'_, '_>, + args: BuyIxArgs, +) -> ProgramResult { + let keys: BuyKeys = accounts.into(); + let ix = buy_ix_with_program_id(program_id, keys, args)?; + invoke_instruction(&ix, accounts) +} +pub fn buy_invoke(accounts: BuyAccounts<'_, '_>, args: BuyIxArgs) -> ProgramResult { + buy_invoke_with_program_id(crate::ID, accounts, args) +} +pub fn buy_invoke_signed_with_program_id( + program_id: Pubkey, + accounts: BuyAccounts<'_, '_>, + args: BuyIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let keys: BuyKeys = accounts.into(); + let ix = buy_ix_with_program_id(program_id, keys, args)?; + invoke_instruction_signed(&ix, accounts, seeds) +} +pub fn buy_invoke_signed( + accounts: BuyAccounts<'_, '_>, + args: BuyIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + buy_invoke_signed_with_program_id(crate::ID, accounts, args, seeds) +} +pub fn buy_verify_account_keys( + accounts: BuyAccounts<'_, '_>, + keys: BuyKeys, +) -> Result<(), (Pubkey, Pubkey)> { + for (actual, expected) in [ + (*accounts.global.key, keys.global), + (*accounts.fee_recipient.key, keys.fee_recipient), + (*accounts.mint.key, keys.mint), + (*accounts.bonding_curve.key, keys.bonding_curve), + ( + *accounts.associated_bonding_curve.key, + keys.associated_bonding_curve, + ), + (*accounts.associated_user.key, keys.associated_user), + (*accounts.user.key, keys.user), + (*accounts.system_program.key, keys.system_program), + (*accounts.token_program.key, keys.token_program), + (*accounts.rent.key, keys.rent), + (*accounts.event_authority.key, keys.event_authority), + (*accounts.program.key, keys.program), + ] { + if actual != expected { + return Err((actual, expected)); + } + } + Ok(()) +} +pub fn buy_verify_writable_privileges<'me, 'info>( + accounts: BuyAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_writable in [ + accounts.fee_recipient, + accounts.bonding_curve, + accounts.associated_bonding_curve, + accounts.associated_user, + accounts.user, + ] { + if !should_be_writable.is_writable { + return Err((should_be_writable, ProgramError::InvalidAccountData)); + } + } + Ok(()) +} +pub fn buy_verify_signer_privileges<'me, 'info>( + accounts: BuyAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_signer in [accounts.user] { + if !should_be_signer.is_signer { + return Err((should_be_signer, ProgramError::MissingRequiredSignature)); + } + } + Ok(()) +} +pub fn buy_verify_account_privileges<'me, 'info>( + accounts: BuyAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + buy_verify_writable_privileges(accounts)?; + buy_verify_signer_privileges(accounts)?; + Ok(()) +} +pub const SELL_IX_ACCOUNTS_LEN: usize = 12; +#[derive(Copy, Clone, Debug)] +pub struct SellAccounts<'me, 'info> { + pub global: &'me AccountInfo<'info>, + pub fee_recipient: &'me AccountInfo<'info>, + pub mint: &'me AccountInfo<'info>, + pub bonding_curve: &'me AccountInfo<'info>, + pub associated_bonding_curve: &'me AccountInfo<'info>, + pub associated_user: &'me AccountInfo<'info>, + pub user: &'me AccountInfo<'info>, + pub system_program: &'me AccountInfo<'info>, + pub associated_token_program: &'me AccountInfo<'info>, + pub token_program: &'me AccountInfo<'info>, + pub event_authority: &'me AccountInfo<'info>, + pub program: &'me AccountInfo<'info>, +} +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct SellKeys { + pub global: Pubkey, + pub fee_recipient: Pubkey, + pub mint: Pubkey, + pub bonding_curve: Pubkey, + pub associated_bonding_curve: Pubkey, + pub associated_user: Pubkey, + pub user: Pubkey, + pub system_program: Pubkey, + pub associated_token_program: Pubkey, + pub token_program: Pubkey, + pub event_authority: Pubkey, + pub program: Pubkey, +} +impl From> for SellKeys { + fn from(accounts: SellAccounts) -> Self { + Self { + global: *accounts.global.key, + fee_recipient: *accounts.fee_recipient.key, + mint: *accounts.mint.key, + bonding_curve: *accounts.bonding_curve.key, + associated_bonding_curve: *accounts.associated_bonding_curve.key, + associated_user: *accounts.associated_user.key, + user: *accounts.user.key, + system_program: *accounts.system_program.key, + associated_token_program: *accounts.associated_token_program.key, + token_program: *accounts.token_program.key, + event_authority: *accounts.event_authority.key, + program: *accounts.program.key, + } + } +} +impl From for [AccountMeta; SELL_IX_ACCOUNTS_LEN] { + fn from(keys: SellKeys) -> Self { + [ + AccountMeta { + pubkey: keys.global, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.fee_recipient, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.mint, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_user, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.user, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.system_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.associated_token_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.token_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.event_authority, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.program, + is_signer: false, + is_writable: false, + }, + ] + } +} +impl From<[Pubkey; SELL_IX_ACCOUNTS_LEN]> for SellKeys { + fn from(pubkeys: [Pubkey; SELL_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: pubkeys[0], + fee_recipient: pubkeys[1], + mint: pubkeys[2], + bonding_curve: pubkeys[3], + associated_bonding_curve: pubkeys[4], + associated_user: pubkeys[5], + user: pubkeys[6], + system_program: pubkeys[7], + associated_token_program: pubkeys[8], + token_program: pubkeys[9], + event_authority: pubkeys[10], + program: pubkeys[11], + } + } +} +impl<'info> From> for [AccountInfo<'info>; SELL_IX_ACCOUNTS_LEN] { + fn from(accounts: SellAccounts<'_, 'info>) -> Self { + [ + accounts.global.clone(), + accounts.fee_recipient.clone(), + accounts.mint.clone(), + accounts.bonding_curve.clone(), + accounts.associated_bonding_curve.clone(), + accounts.associated_user.clone(), + accounts.user.clone(), + accounts.system_program.clone(), + accounts.associated_token_program.clone(), + accounts.token_program.clone(), + accounts.event_authority.clone(), + accounts.program.clone(), + ] + } +} +impl<'me, 'info> From<&'me [AccountInfo<'info>; SELL_IX_ACCOUNTS_LEN]> + for SellAccounts<'me, 'info> +{ + fn from(arr: &'me [AccountInfo<'info>; SELL_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: &arr[0], + fee_recipient: &arr[1], + mint: &arr[2], + bonding_curve: &arr[3], + associated_bonding_curve: &arr[4], + associated_user: &arr[5], + user: &arr[6], + system_program: &arr[7], + associated_token_program: &arr[8], + token_program: &arr[9], + event_authority: &arr[10], + program: &arr[11], + } + } +} +pub const SELL_IX_DISCM: [u8; 8] = [51, 230, 133, 164, 1, 127, 131, 173]; +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct SellIxArgs { + pub amount: u64, + pub min_sol_output: u64, +} +#[derive(Clone, Debug, PartialEq)] +pub struct SellIxData(pub SellIxArgs); +impl From for SellIxData { + fn from(args: SellIxArgs) -> Self { + Self(args) + } +} +impl SellIxData { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != SELL_IX_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + SELL_IX_DISCM, maybe_discm + ), + )); + } + Ok(Self(SellIxArgs::deserialize(&mut reader)?)) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&SELL_IX_DISCM)?; + self.0.serialize(&mut writer) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub fn sell_ix_with_program_id( + program_id: Pubkey, + keys: SellKeys, + args: SellIxArgs, +) -> std::io::Result { + let metas: [AccountMeta; SELL_IX_ACCOUNTS_LEN] = keys.into(); + let data: SellIxData = args.into(); + Ok(Instruction { + program_id, + accounts: Vec::from(metas), + data: data.try_to_vec()?, + }) +} +pub fn sell_ix(keys: SellKeys, args: SellIxArgs) -> std::io::Result { + sell_ix_with_program_id(crate::ID, keys, args) +} +pub fn sell_invoke_with_program_id( + program_id: Pubkey, + accounts: SellAccounts<'_, '_>, + args: SellIxArgs, +) -> ProgramResult { + let keys: SellKeys = accounts.into(); + let ix = sell_ix_with_program_id(program_id, keys, args)?; + invoke_instruction(&ix, accounts) +} +pub fn sell_invoke(accounts: SellAccounts<'_, '_>, args: SellIxArgs) -> ProgramResult { + sell_invoke_with_program_id(crate::ID, accounts, args) +} +pub fn sell_invoke_signed_with_program_id( + program_id: Pubkey, + accounts: SellAccounts<'_, '_>, + args: SellIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let keys: SellKeys = accounts.into(); + let ix = sell_ix_with_program_id(program_id, keys, args)?; + invoke_instruction_signed(&ix, accounts, seeds) +} +pub fn sell_invoke_signed( + accounts: SellAccounts<'_, '_>, + args: SellIxArgs, + seeds: &[&[&[u8]]], +) -> ProgramResult { + sell_invoke_signed_with_program_id(crate::ID, accounts, args, seeds) +} +pub fn sell_verify_account_keys( + accounts: SellAccounts<'_, '_>, + keys: SellKeys, +) -> Result<(), (Pubkey, Pubkey)> { + for (actual, expected) in [ + (*accounts.global.key, keys.global), + (*accounts.fee_recipient.key, keys.fee_recipient), + (*accounts.mint.key, keys.mint), + (*accounts.bonding_curve.key, keys.bonding_curve), + ( + *accounts.associated_bonding_curve.key, + keys.associated_bonding_curve, + ), + (*accounts.associated_user.key, keys.associated_user), + (*accounts.user.key, keys.user), + (*accounts.system_program.key, keys.system_program), + ( + *accounts.associated_token_program.key, + keys.associated_token_program, + ), + (*accounts.token_program.key, keys.token_program), + (*accounts.event_authority.key, keys.event_authority), + (*accounts.program.key, keys.program), + ] { + if actual != expected { + return Err((actual, expected)); + } + } + Ok(()) +} +pub fn sell_verify_writable_privileges<'me, 'info>( + accounts: SellAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_writable in [ + accounts.fee_recipient, + accounts.bonding_curve, + accounts.associated_bonding_curve, + accounts.associated_user, + accounts.user, + ] { + if !should_be_writable.is_writable { + return Err((should_be_writable, ProgramError::InvalidAccountData)); + } + } + Ok(()) +} +pub fn sell_verify_signer_privileges<'me, 'info>( + accounts: SellAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_signer in [accounts.user] { + if !should_be_signer.is_signer { + return Err((should_be_signer, ProgramError::MissingRequiredSignature)); + } + } + Ok(()) +} +pub fn sell_verify_account_privileges<'me, 'info>( + accounts: SellAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + sell_verify_writable_privileges(accounts)?; + sell_verify_signer_privileges(accounts)?; + Ok(()) +} +pub const WITHDRAW_IX_ACCOUNTS_LEN: usize = 11; +#[derive(Copy, Clone, Debug)] +pub struct WithdrawAccounts<'me, 'info> { + pub global: &'me AccountInfo<'info>, + pub mint: &'me AccountInfo<'info>, + pub bonding_curve: &'me AccountInfo<'info>, + pub associated_bonding_curve: &'me AccountInfo<'info>, + pub associated_user: &'me AccountInfo<'info>, + pub user: &'me AccountInfo<'info>, + pub system_program: &'me AccountInfo<'info>, + pub token_program: &'me AccountInfo<'info>, + pub rent: &'me AccountInfo<'info>, + pub event_authority: &'me AccountInfo<'info>, + pub program: &'me AccountInfo<'info>, +} +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct WithdrawKeys { + pub global: Pubkey, + pub mint: Pubkey, + pub bonding_curve: Pubkey, + pub associated_bonding_curve: Pubkey, + pub associated_user: Pubkey, + pub user: Pubkey, + pub system_program: Pubkey, + pub token_program: Pubkey, + pub rent: Pubkey, + pub event_authority: Pubkey, + pub program: Pubkey, +} +impl From> for WithdrawKeys { + fn from(accounts: WithdrawAccounts) -> Self { + Self { + global: *accounts.global.key, + mint: *accounts.mint.key, + bonding_curve: *accounts.bonding_curve.key, + associated_bonding_curve: *accounts.associated_bonding_curve.key, + associated_user: *accounts.associated_user.key, + user: *accounts.user.key, + system_program: *accounts.system_program.key, + token_program: *accounts.token_program.key, + rent: *accounts.rent.key, + event_authority: *accounts.event_authority.key, + program: *accounts.program.key, + } + } +} +impl From for [AccountMeta; WITHDRAW_IX_ACCOUNTS_LEN] { + fn from(keys: WithdrawKeys) -> Self { + [ + AccountMeta { + pubkey: keys.global, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.mint, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_bonding_curve, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.associated_user, + is_signer: false, + is_writable: true, + }, + AccountMeta { + pubkey: keys.user, + is_signer: true, + is_writable: true, + }, + AccountMeta { + pubkey: keys.system_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.token_program, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.rent, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.event_authority, + is_signer: false, + is_writable: false, + }, + AccountMeta { + pubkey: keys.program, + is_signer: false, + is_writable: false, + }, + ] + } +} +impl From<[Pubkey; WITHDRAW_IX_ACCOUNTS_LEN]> for WithdrawKeys { + fn from(pubkeys: [Pubkey; WITHDRAW_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: pubkeys[0], + mint: pubkeys[1], + bonding_curve: pubkeys[2], + associated_bonding_curve: pubkeys[3], + associated_user: pubkeys[4], + user: pubkeys[5], + system_program: pubkeys[6], + token_program: pubkeys[7], + rent: pubkeys[8], + event_authority: pubkeys[9], + program: pubkeys[10], + } + } +} +impl<'info> From> for [AccountInfo<'info>; WITHDRAW_IX_ACCOUNTS_LEN] { + fn from(accounts: WithdrawAccounts<'_, 'info>) -> Self { + [ + accounts.global.clone(), + accounts.mint.clone(), + accounts.bonding_curve.clone(), + accounts.associated_bonding_curve.clone(), + accounts.associated_user.clone(), + accounts.user.clone(), + accounts.system_program.clone(), + accounts.token_program.clone(), + accounts.rent.clone(), + accounts.event_authority.clone(), + accounts.program.clone(), + ] + } +} +impl<'me, 'info> From<&'me [AccountInfo<'info>; WITHDRAW_IX_ACCOUNTS_LEN]> + for WithdrawAccounts<'me, 'info> +{ + fn from(arr: &'me [AccountInfo<'info>; WITHDRAW_IX_ACCOUNTS_LEN]) -> Self { + Self { + global: &arr[0], + mint: &arr[1], + bonding_curve: &arr[2], + associated_bonding_curve: &arr[3], + associated_user: &arr[4], + user: &arr[5], + system_program: &arr[6], + token_program: &arr[7], + rent: &arr[8], + event_authority: &arr[9], + program: &arr[10], + } + } +} +pub const WITHDRAW_IX_DISCM: [u8; 8] = [183, 18, 70, 156, 148, 109, 161, 34]; +#[derive(Clone, Debug, PartialEq)] +pub struct WithdrawIxData; +impl WithdrawIxData { + pub fn deserialize(buf: &[u8]) -> std::io::Result { + let mut reader = buf; + let mut maybe_discm = [0u8; 8]; + reader.read_exact(&mut maybe_discm)?; + if maybe_discm != WITHDRAW_IX_DISCM { + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + format!( + "discm does not match. Expected: {:?}. Received: {:?}", + WITHDRAW_IX_DISCM, maybe_discm + ), + )); + } + Ok(Self) + } + pub fn serialize(&self, mut writer: W) -> std::io::Result<()> { + writer.write_all(&WITHDRAW_IX_DISCM) + } + pub fn try_to_vec(&self) -> std::io::Result> { + let mut data = Vec::new(); + self.serialize(&mut data)?; + Ok(data) + } +} +pub fn withdraw_ix_with_program_id( + program_id: Pubkey, + keys: WithdrawKeys, +) -> std::io::Result { + let metas: [AccountMeta; WITHDRAW_IX_ACCOUNTS_LEN] = keys.into(); + Ok(Instruction { + program_id, + accounts: Vec::from(metas), + data: WithdrawIxData.try_to_vec()?, + }) +} +pub fn withdraw_ix(keys: WithdrawKeys) -> std::io::Result { + withdraw_ix_with_program_id(crate::ID, keys) +} +pub fn withdraw_invoke_with_program_id( + program_id: Pubkey, + accounts: WithdrawAccounts<'_, '_>, +) -> ProgramResult { + let keys: WithdrawKeys = accounts.into(); + let ix = withdraw_ix_with_program_id(program_id, keys)?; + invoke_instruction(&ix, accounts) +} +pub fn withdraw_invoke(accounts: WithdrawAccounts<'_, '_>) -> ProgramResult { + withdraw_invoke_with_program_id(crate::ID, accounts) +} +pub fn withdraw_invoke_signed_with_program_id( + program_id: Pubkey, + accounts: WithdrawAccounts<'_, '_>, + seeds: &[&[&[u8]]], +) -> ProgramResult { + let keys: WithdrawKeys = accounts.into(); + let ix = withdraw_ix_with_program_id(program_id, keys)?; + invoke_instruction_signed(&ix, accounts, seeds) +} +pub fn withdraw_invoke_signed( + accounts: WithdrawAccounts<'_, '_>, + seeds: &[&[&[u8]]], +) -> ProgramResult { + withdraw_invoke_signed_with_program_id(crate::ID, accounts, seeds) +} +pub fn withdraw_verify_account_keys( + accounts: WithdrawAccounts<'_, '_>, + keys: WithdrawKeys, +) -> Result<(), (Pubkey, Pubkey)> { + for (actual, expected) in [ + (*accounts.global.key, keys.global), + (*accounts.mint.key, keys.mint), + (*accounts.bonding_curve.key, keys.bonding_curve), + ( + *accounts.associated_bonding_curve.key, + keys.associated_bonding_curve, + ), + (*accounts.associated_user.key, keys.associated_user), + (*accounts.user.key, keys.user), + (*accounts.system_program.key, keys.system_program), + (*accounts.token_program.key, keys.token_program), + (*accounts.rent.key, keys.rent), + (*accounts.event_authority.key, keys.event_authority), + (*accounts.program.key, keys.program), + ] { + if actual != expected { + return Err((actual, expected)); + } + } + Ok(()) +} +pub fn withdraw_verify_writable_privileges<'me, 'info>( + accounts: WithdrawAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_writable in [ + accounts.bonding_curve, + accounts.associated_bonding_curve, + accounts.associated_user, + accounts.user, + ] { + if !should_be_writable.is_writable { + return Err((should_be_writable, ProgramError::InvalidAccountData)); + } + } + Ok(()) +} +pub fn withdraw_verify_signer_privileges<'me, 'info>( + accounts: WithdrawAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + for should_be_signer in [accounts.user] { + if !should_be_signer.is_signer { + return Err((should_be_signer, ProgramError::MissingRequiredSignature)); + } + } + Ok(()) +} +pub fn withdraw_verify_account_privileges<'me, 'info>( + accounts: WithdrawAccounts<'me, 'info>, +) -> Result<(), (&'me AccountInfo<'info>, ProgramError)> { + withdraw_verify_writable_privileges(accounts)?; + withdraw_verify_signer_privileges(accounts)?; + Ok(()) +} diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/lib.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/lib.rs new file mode 100644 index 0000000..f99c2c1 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/lib.rs @@ -0,0 +1,9 @@ +solana_program::declare_id!("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"); +pub mod accounts; +pub use accounts::*; +pub mod instructions; +pub use instructions::*; +pub mod errors; +pub use errors::*; +pub mod events; +pub use events::*; diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/serializer.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/serializer.rs new file mode 100644 index 0000000..d666967 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/serializer.rs @@ -0,0 +1,37 @@ +// src/serializer.rs +#[cfg(feature = "serde")] +use serde::Deserialize; + +#[cfg(feature = "serde")] +pub fn serialize_u128_as_string(value: &u128, serializer: S) -> Result +where + S: serde::Serializer, +{ + serializer.serialize_str(&value.to_string()) +} + +#[cfg(feature = "serde")] +pub fn deserialize_u128_as_string<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + let s = String::deserialize(deserializer)?; + s.parse::().map_err(serde::de::Error::custom) +} + +#[cfg(feature = "serde")] +pub fn serialize_i128_as_string(value: &i128, serializer: S) -> Result +where + S: serde::Serializer, +{ + serializer.serialize_str(&value.to_string()) +} + +#[cfg(feature = "serde")] +pub fn deserialize_i128_as_string<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + let s = String::deserialize(deserializer)?; + s.parse::().map_err(serde::de::Error::custom) +} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/typedefs.rs b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/typedefs.rs new file mode 100644 index 0000000..7999ae7 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/parsers/pump_interface/src/typedefs.rs @@ -0,0 +1,140 @@ +#[cfg(feature = "serde")] +use crate::serializer::{ + deserialize_i128_as_string, deserialize_u128_as_string, serialize_i128_as_string, + serialize_u128_as_string, +}; +use borsh::{BorshDeserialize, BorshSerialize}; +use solana_program::pubkey::Pubkey; +#[derive(Default, Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct OpenPositionBumps { + pub position_bump: u8, +} +#[derive(Default, Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct OpenPositionWithMetadataBumps { + pub position_bump: u8, + pub metadata_bump: u8, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct PositionRewardInfo { + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_u128_as_string", + deserialize_with = "deserialize_u128_as_string" + ) + )] + pub growth_inside_checkpoint: u128, + pub amount_owed: u64, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct Tick { + pub initialized: bool, + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_i128_as_string", + deserialize_with = "deserialize_i128_as_string" + ) + )] + pub liquidity_net: i128, + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_u128_as_string", + deserialize_with = "deserialize_u128_as_string" + ) + )] + pub liquidity_gross: u128, + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_u128_as_string", + deserialize_with = "deserialize_u128_as_string" + ) + )] + pub fee_growth_outside_a: u128, + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_u128_as_string", + deserialize_with = "deserialize_u128_as_string" + ) + )] + pub fee_growth_outside_b: u128, + pub reward_growths_outside: [u128; 3], +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct WhirlpoolRewardInfo { + pub mint: Pubkey, + pub vault: Pubkey, + pub authority: Pubkey, + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_u128_as_string", + deserialize_with = "deserialize_u128_as_string" + ) + )] + pub emissions_per_second_x64: u128, + #[cfg_attr( + feature = "serde", + serde( + serialize_with = "serialize_u128_as_string", + deserialize_with = "deserialize_u128_as_string" + ) + )] + pub growth_global_x64: u128, +} +#[derive(Default, Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct WhirlpoolBumps { + pub whirlpool_bump: u8, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct RemainingAccountsSlice { + pub accounts_type: AccountsType, + pub length: u8, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct RemainingAccountsInfo { + pub slices: Vec, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum CurrIndex { + Below, + Inside, + Above, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum TickLabel { + Upper, + Lower, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum Direction { + Left, + Right, +} +#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum AccountsType { + TransferHookA, + TransferHookB, + TransferHookReward, + TransferHookInput, + TransferHookIntermediate, + TransferHookOutput, + SupplementalTickArrays, + SupplementalTickArraysOne, + SupplementalTickArraysTwo, +} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/run.sh b/#_sniper (Rust) using jito Shred stream/run.sh new file mode 100644 index 0000000..71b4495 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/run.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ─── 1) jump to script’s own dir ─── +cd "$(dirname "$0")" + +# ─── 2) build in release (skips if up-to-date) ─── +cargo build --release + +# ─── 3) where our binary really lives ─── +BIN="$(pwd)/target/release/grpc-raydium-pool-monitoring-rust" + +# ─── 4) if PIN_CORES is set, pin there; otherwise run normally ─── +if [[ -n "${PIN_CORES:-}" ]]; then + echo "📌 pinning to cores: $PIN_CORES" + exec taskset -c "$PIN_CORES" "$BIN" "$@" +else + echo "▶️ running on all available cores" + exec "$BIN" "$@" +fi diff --git a/#_sniper (Rust) using jito Shred stream/shared_state/Cargo.toml b/#_sniper (Rust) using jito Shred stream/shared_state/Cargo.toml new file mode 100644 index 0000000..4295122 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/shared_state/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "shared_state" +version = "0.1.0" +authors = ["Mephisto"] +edition = "2021" + +[dependencies] +tokio = { version = "1", features = ["sync"] } +lazy_static = "1.4" +serde = { version = "1.0", features = ["derive"] } +once_cell = "1.21.3" +solana-sdk = "2.1.7" + +[lib] +path = "src/lib.rs" \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/shared_state/mod.rs b/#_sniper (Rust) using jito Shred stream/shared_state/mod.rs new file mode 100644 index 0000000..266c62a --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/shared_state/mod.rs @@ -0,0 +1 @@ +pub mod state; diff --git a/#_sniper (Rust) using jito Shred stream/shared_state/src/lib.rs b/#_sniper (Rust) using jito Shred stream/shared_state/src/lib.rs new file mode 100644 index 0000000..e88d2a5 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/shared_state/src/lib.rs @@ -0,0 +1,269 @@ +// shared_state/src/lib.rs +use lazy_static::lazy_static; +use once_cell::sync::Lazy; +use solana_sdk::pubkey::Pubkey; +use std::collections::HashMap; +use std::sync::atomic::AtomicU64; +use std::sync::atomic::AtomicUsize; +use std::time::Instant; +use tokio::sync::Mutex; +/// A request to sell a mint for a given amount, marking if it's urgent. +#[derive(Debug, Clone)] +pub struct SellOrder { + pub mint: String, + pub amount: u64, + pub use_jito: bool, // Indicates if Jito should be used for this sell + pub urgent: bool, +} + +#[derive(Debug, Clone)] +pub struct BuyOrder { + pub mint: String, + pub creator: Pubkey, + pub use_jito: bool, + pub urgent: bool, +} +#[allow(dead_code)] +#[derive(Debug, Clone)] +pub struct BoughtTokenInfo { + mint: String, + ata: Option, + amount: u64, + fallback_amount: u64, + timestamp: Instant, + last_activity: Instant, + signature: Option, + follow_up_buys: u32, + sell_triggered: bool, + first_sell_detected: bool, + sol_inflow: f64, + sol_outflow: f64, + creator_vault: Option, + unique_buyers: std::collections::HashSet, + + suspected_creator: Option, + mint_detected_at: Instant, + buy_executed_at: Option, + sell_triggered_at: Option, + ata_balance_zeroed: bool, + pub sell_issued_slot: u64, + sell_confirmed: bool, + pub buy_slot: u64, + pub sell_slot: Option, + pub sell_signature: Option, + sell_executed_at: Option, + sell_retry_count: u8, +} + +impl BoughtTokenInfo { + pub fn new( + mint: String, + ata: Option, + fallback_amount: u64, + timestamp: Instant, + signature: Option, + buy_slot: u64, + creator_vault: Option, // new param + ) -> Self { + Self { + mint, + ata, + amount: fallback_amount, + fallback_amount, + timestamp, + last_activity: timestamp, + signature, + follow_up_buys: 0, + sell_triggered: false, + first_sell_detected: false, + sol_inflow: 0.0, + sol_outflow: 0.0, + unique_buyers: std::collections::HashSet::new(), + suspected_creator: None, + mint_detected_at: timestamp, + buy_executed_at: None, + sell_triggered_at: None, + ata_balance_zeroed: false, + buy_slot, + sell_slot: None, + sell_signature: None, + sell_issued_slot: 0, + sell_confirmed: false, + creator_vault, // initialize the creator vault + sell_executed_at: None, + sell_retry_count: 0, + } + } + + pub fn creator_vault(&self) -> Option<&Pubkey> { + self.creator_vault.as_ref() + } + + pub fn mint(&self) -> &String { + &self.mint + } + + pub fn buy_slot(&self) -> u64 { + self.buy_slot + } + pub fn set_buy_slot(&mut self, slot: u64) { + self.buy_slot = slot; + } + + pub fn sell_slot(&self) -> Option { + self.sell_slot + } + + pub fn set_sell_slot(&mut self, slot: u64) { + self.sell_slot = Some(slot); + } + + pub fn set_buy_executed_at(&mut self, when: Instant) { + self.buy_executed_at = Some(when); + } + pub fn buy_executed_at(&self) -> Option { + self.buy_executed_at + } + + pub fn record_sell(&mut self, sig: String, slot: u64) { + self.sell_signature = Some(sig); + self.sell_issued_slot = slot; + self.sell_slot = Some(slot); + self.sell_confirmed = false; + } + + pub fn confirm_sell(&mut self) { + self.sell_confirmed = true; + } + + pub fn sell_confirmed(&self) -> bool { + self.sell_confirmed + } + + pub fn sell_issued_slot(&self) -> u64 { + self.sell_issued_slot + } + + pub fn set_sell_triggered_at(&mut self, when: Instant) { + self.sell_triggered_at = Some(when); + } + pub fn sell_triggered_at(&self) -> Option { + self.sell_triggered_at + } + + pub fn set_suspected_creator(&mut self, creator: String) { + self.suspected_creator = Some(creator); + } + pub fn suspected_creator(&self) -> Option<&String> { + self.suspected_creator.as_ref() + } + + pub fn ata_balance_zeroed(&self) -> bool { + self.ata_balance_zeroed + } + pub fn set_ata_balance_zeroed(&mut self, value: bool) { + self.ata_balance_zeroed = value; + } + + pub fn sol_inflow(&self) -> f64 { + self.sol_inflow + } + pub fn add_sol_inflow(&mut self, amount: f64) { + self.sol_inflow += amount; + self.update_last_activity(); + } + pub fn sol_outflow(&self) -> f64 { + self.sol_outflow + } + pub fn add_sol_outflow(&mut self, amount: f64) { + self.sol_outflow += amount; + self.update_last_activity(); + } + pub fn ata(&self) -> Option<&String> { + self.ata.as_ref() + } + pub fn amount(&self) -> u64 { + self.amount + } + pub fn set_amount(&mut self, amt: u64) { + self.amount = amt; + } + pub fn fallback_amount(&self) -> u64 { + self.fallback_amount + } + pub fn timestamp(&self) -> Instant { + self.timestamp + } + pub fn last_activity(&self) -> Instant { + self.last_activity + } + pub fn update_last_activity(&mut self) { + self.last_activity = Instant::now(); + } + pub fn signature(&self) -> Option<&String> { + self.signature.as_ref() + } + pub fn set_sell_signature(&mut self, sig: String) { + self.sell_signature = Some(sig); + } + pub fn sell_signature(&self) -> Option<&String> { + self.sell_signature.as_ref() + } + pub fn follow_up_buys(&self) -> u32 { + self.follow_up_buys + } + pub fn increment_follow_up_buys(&mut self) { + self.follow_up_buys += 1; + self.update_last_activity(); + } + pub fn sell_triggered(&self) -> bool { + self.sell_triggered + } + pub fn set_sell_triggered(&mut self, v: bool) { + self.sell_triggered = v; + } + pub fn first_sell_detected(&self) -> bool { + self.first_sell_detected + } + pub fn mark_first_sell_detected(&mut self) { + self.first_sell_detected = true; + self.update_last_activity(); + } + pub fn zero_amount(&mut self) { + self.amount = 0; + } + pub fn unique_buyers(&self) -> &std::collections::HashSet { + &self.unique_buyers + } + pub fn add_unique_buyer(&mut self, addr: String) -> bool { + let ins = self.unique_buyers.insert(addr); + if ins { + self.update_last_activity(); + } + ins + } + pub fn sell_executed_at(&self) -> Option { + self.sell_executed_at + } + pub fn set_sell_executed_at(&mut self, t: Instant) { + self.sell_executed_at = Some(t); + } + pub fn retry_count(&self) -> u8 { + self.sell_retry_count + } + pub fn increment_retry_count(&mut self) { + self.sell_retry_count = self.sell_retry_count.saturating_add(1); + } + pub fn reset_retry_count(&mut self) { + self.sell_retry_count = 0; + } +} + +lazy_static! { + pub static ref BOUGHT_TOKENS: Mutex> = + Mutex::new(HashMap::new()); +} + +pub static CURRENT_SLOT: Lazy = Lazy::new(|| AtomicU64::new(0)); + +pub static PENDING_MINTS: Lazy = Lazy::new(|| AtomicUsize::new(0)); diff --git a/#_sniper (Rust) using jito Shred stream/shared_state/state.rs b/#_sniper (Rust) using jito Shred stream/shared_state/state.rs new file mode 100644 index 0000000..f55dfcc --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/shared_state/state.rs @@ -0,0 +1,21 @@ +// shared_state/src/lib.rs +use std::collections::{HashMap, HashSet}; +use std::sync::Arc; +use tokio::sync::Mutex; +use lazy_static::lazy_static; + +#[derive(Debug, Clone)] +pub struct TokenTrackingState { + pub mint: String, + pub first_buyer: Option, + pub first_buy_amount: f64, + pub suspected_creators: HashSet, + pub sell_detected: bool, + pub sell_split_ratio: usize, +} + + +lazy_static! { + pub static ref TRACKED_TOKENS: Arc>> = + Arc::new(Mutex::new(HashMap::new())); +} diff --git a/#_sniper (Rust) using jito Shred stream/shredstreamproxy.sh b/#_sniper (Rust) using jito Shred stream/shredstreamproxy.sh new file mode 100644 index 0000000..610ee8e --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/shredstreamproxy.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# 2) Set any necessary environment variables +export RUST_LOG=info +export BLOCK_ENGINE_URL="https://mainnet.block-engine.jito.wtf" + +# Path to your approved Jito auth keypair +export AUTH_KEYPAIR="/home/ubuntu/shreds_sniper/shredstream-proxy/validator-keypair.json" + +# Comma-separated Jito regions +export DESIRED_REGIONS="tokyo, frankfurt, amsterdam, ny, london, singapore, slc" + +# Comma-separated list of destination IP:UDP_PORT entries +# (example: forward to localhost:8001 and a remote at 10.0.1.5:8002) +export DEST_IP_PORTS="127.0.0.1:8001" + +# 3) Run the proxy binary +# If you built with `cargo build --release`, the binary lives under `target/release/` +exec /home/ubuntu/shreds_sniper/shredstream-proxy/target/release/jito-shredstream-proxy shredstream \ + --block-engine-url "${BLOCK_ENGINE_URL}" \ + --auth-keypair "${AUTH_KEYPAIR}" \ + --desired-regions "${DESIRED_REGIONS}" \ + --dest-ip-ports "${DEST_IP_PORTS}" \ + --grpc-service-port 50051 \ diff --git a/#_sniper (Rust) using jito Shred stream/src/TradeDispather.rs b/#_sniper (Rust) using jito Shred stream/src/TradeDispather.rs new file mode 100644 index 0000000..d5478f8 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/TradeDispather.rs @@ -0,0 +1,86 @@ +struct TradeDispatcher { + db: Database, + bot: AutoSend, + user_ids: Vec, // all whitelisted telegram IDs + next_idx: AtomicUsize, // for round-robin +} + +impl TradeDispatcher { + pub async fn new(db: Database, bot: AutoSend) -> Self { + let ids = db + .users + .find(doc! { "is_whitelisted": true }, None) + .await + .unwrap() + .try_collect::>() + .await + .unwrap() + .into_iter() + .map(|u| u.telegram_id) + .collect(); + TradeDispatcher { db, bot, user_ids: ids, next_idx: AtomicUsize::new(0) } + } + + /// Round-robin pick your next telegram user + fn pop_next_user(&self) -> i64 { + let len = self.user_ids.len(); + let i = self.next_idx.fetch_add(1, Ordering::Relaxed) % len; + self.user_ids[i] + } + + pub async fn dispatch_buy(&self, buy: BuyOrder) { + // 1) pick user + let telegram_id = self.pop_next_user(); + let user = self.db.get_user(telegram_id).await.unwrap() + .expect("should exist and be whitelisted"); + + // 2) decrypt & load their Keypair + let keypair = decrypt_keypair(&user + .wallets + .iter() + .find(|w| w.id == user.trading_wallet_id.unwrap()) + .unwrap() + .private_key_enc + ); + + // 3) build per-user SwapConfig + let mut cfg = SwapConfig::default(); + if let Some(sl) = user.slippage_pct { cfg.slippage_bps = (sl * 100.0) as u16 } + if let Some(tip) = user.tip_amount { cfg.use_priority_tip = tip > 0 } + if let Some(min_tok) = user.min_tokens_to_buy { cfg.min_tokens = Some(min_tok as u64) } + + // 4) hand off to pump_swap + let input = /* build your SwapInput exactly as before */; + let result = pump_swap( + AppState { + rpc_client: /* shared */, + rpc_nonblocking_client: /* shared */, + wallet: Arc::new(keypair), + }, + input, + "buy", + buy.use_jito, + buy.urgent, + ) + .await; + + // 5) notify on Telegram + let msg = match result { + Ok(sigs) => format!("✅ [{}] buy for `{}` succeeded: {}", telegram_id, buy.mint, sigs[0]), + Err(e) => format!("❌ [{}] buy for `{}` failed: {}", telegram_id, buy.mint, e), + }; + let _ = self.bot.send_message(telegram_id, msg).await; + } + + pub async fn dispatch_sell(&self, sell: SellOrder) { + // Look up who originally bought this mint + let user_id = { + let tokens = shared_state::BOUGHT_TOKENS.lock().await; + let info = tokens.get(&sell.mint).unwrap(); + info.telegram_id().unwrap() + }; + + // same as buy: fetch user, decrypt, build cfg, call pump_swap("sell", ...) and notify + /* … */ + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/commands.rs b/#_sniper (Rust) using jito Shred stream/src/commands.rs new file mode 100644 index 0000000..44dd240 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/commands.rs @@ -0,0 +1,239 @@ +// src/commands.rs +use teloxide::prelude::*; +use teloxide::utils::command::BotCommand; +use mongodb::bson::oid::ObjectId; +use crate::db::Database; +use anyhow::Result; + +#[derive(BotCommand, Clone)] +#[command(rename = "lowercase", description = "These commands are supported:")] +pub enum Command { + #[command(description = "display this text.")] + Help, + #[command(description = "start the bot.")] + Start, + #[command(description = "create a new wallet: /create_wallet ")] + CreateWallet { name: String, key: String }, + #[command(description = "list your wallets.")] + ListWallets, + #[command(description = "remove a wallet: /remove_wallet ")] + RemoveWallet { wallet_id: String }, + #[command(description = "set trading wallet: /set_trading_wallet ")] + SetTradingWallet { wallet_id: String }, + #[command(description = "set min tokens to buy: /set_min_tokens ")] + SetMinTokens { amount: f64 }, + #[command(description = "set slippage percent: /set_slippage ")] + SetSlippage { percent: f64 }, + #[command(description = "set tip amount: /set_tip ")] + SetTip { amount: u64 }, + #[command(description = "withdraw: /withdraw ")] + Withdraw { wallet_id: String, dest: String, amount: f64 }, + #[command(description = "transfer: /transfer ")] + Transfer { wallet_id: String, dest: String, amount: f64 }, + // Admin only: + #[command(description = "whitelist a user: /whitelist ")] + Whitelist { telegram_id: i64 }, + #[command(description = "remove from whitelist: /unwhitelist ")] + Unwhitelist { telegram_id: i64 }, +} + +pub async fn handle_command( + bot: Bot, + msg: Message, + cmd: Command, + db: Database, + admin_ids: Vec, +) -> Result<()> { + let chat_id = msg.chat.id; + let user_id = msg.from().map(|u| u.id.0 as i64).unwrap_or(0); + + match cmd { + Command::Help => { + bot.send_message(chat_id, Command::descriptions()).await?; + } + Command::Start => { + // Check whitelist + let is_whitelisted = db.is_whitelisted(user_id).await?; + if !is_whitelisted { + bot.send_message(chat_id, "You are not whitelisted. Please contact admin.").await?; + } else { + bot.send_message(chat_id, "Welcome! Use /help to see commands.").await?; + } + } + Command::CreateWallet { name, key } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + // TODO: encrypt `key` before storing, e.g. AES with ENCRYPTION_KEY + let private_enc = encrypt_key(&key)?; + match db.add_wallet(user_id, name.clone(), derive_address(&key)?, private_enc).await { + Ok(entry) => { + bot.send_message(chat_id, format!("Wallet created with ID: {}", entry.id)).await?; + } + Err(e) => { + bot.send_message(chat_id, format!("Error creating wallet: {}", e)).await?; + } + } + } + Command::ListWallets => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + let wallets = db.list_wallets(user_id).await?; + if wallets.is_empty() { + bot.send_message(chat_id, "No wallets. Use /create_wallet.").await?; + } else { + let mut text = String::from("Your wallets:\n"); + for w in wallets { + text.push_str(&format!("- ID: {}, name: {}, address: {}\n", w.id, w.name, w.address)); + } + bot.send_message(chat_id, text).await?; + } + } + Command::RemoveWallet { wallet_id } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + match ObjectId::parse_str(&wallet_id) { + Ok(oid) => { + if let Err(e) = db.remove_wallet(user_id, oid).await { + bot.send_message(chat_id, format!("Error removing wallet: {}", e)).await?; + } else { + bot.send_message(chat_id, "Wallet removed.").await?; + } + } + Err(_) => { + bot.send_message(chat_id, "Invalid wallet ID format.").await?; + } + } + } + Command::SetTradingWallet { wallet_id } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + match ObjectId::parse_str(&wallet_id) { + Ok(oid) => { + if let Err(e) = db.set_trading_wallet(user_id, oid).await { + bot.send_message(chat_id, format!("Error: {}", e)).await?; + } else { + bot.send_message(chat_id, "Trading wallet set.").await?; + } + } + Err(_) => { + bot.send_message(chat_id, "Invalid wallet ID.").await?; + } + } + } + Command::SetMinTokens { amount } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + if let Err(e) = db.update_setting_min_tokens(user_id, amount).await { + bot.send_message(chat_id, format!("Error: {}", e)).await?; + } else { + bot.send_message(chat_id, format!("min_tokens_to_buy set to {}", amount)).await?; + } + } + Command::SetSlippage { percent } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + if let Err(e) = db.update_setting_slippage(user_id, percent).await { + bot.send_message(chat_id, format!("Error: {}", e)).await?; + } else { + bot.send_message(chat_id, format!("slippage_pct set to {}%", percent)).await?; + } + } + Command::SetTip { amount } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + if let Err(e) = db.update_setting_tip(user_id, amount).await { + bot.send_message(chat_id, format!("Error: {}", e)).await?; + } else { + bot.send_message(chat_id, format!("tip_amount set to {}", amount)).await?; + } + } + Command::Withdraw { wallet_id, dest, amount } | + Command::Transfer { wallet_id, dest, amount } => { + if !db.is_whitelisted(user_id).await? { + bot.send_message(chat_id, "Not whitelisted.").await?; + return Ok(()); + } + // Parse wallet ID + let oid = match ObjectId::parse_str(&wallet_id) { + Ok(o) => o, + Err(_) => { + bot.send_message(chat_id, "Invalid wallet ID.").await?; + return Ok(()); + } + }; + // Fetch user & wallet + if let Some(user) = db.get_user(user_id).await? { + if let Some(wallet) = user.wallets.iter().find(|w| w.id == oid) { + // Decrypt private key: + let private_key = decrypt_key(&wallet.private_key_enc)?; + // Then implement withdraw/transfer logic, e.g., call chain RPC: + // withdraw: send transaction moving `amount` tokens from wallet.address to dest. + // Here just stub: + bot.send_message(chat_id, format!( + "{} from wallet {} to {} of amount {}: not implemented yet", + if matches!(cmd, Command::Withdraw {..}) { "Withdraw" } else { "Transfer" }, + wallet.name, dest, amount + )).await?; + } else { + bot.send_message(chat_id, "Wallet not found.").await?; + } + } else { + bot.send_message(chat_id, "User not found.").await?; + } + } + Command::Whitelist { telegram_id: target } => { + if !admin_ids.contains(&user_id) { + bot.send_message(chat_id, "You are not admin.").await?; + return Ok(()); + } + if let Err(e) = db.set_whitelist(target, true).await { + bot.send_message(chat_id, format!("Error whitelisting: {}", e)).await?; + } else { + bot.send_message(chat_id, format!("User {} whitelisted.", target)).await?; + } + } + Command::Unwhitelist { telegram_id: target } => { + if !admin_ids.contains(&user_id) { + bot.send_message(chat_id, "You are not admin.").await?; + return Ok(()); + } + if let Err(e) = db.set_whitelist(target, false).await { + bot.send_message(chat_id, format!("Error removing whitelist: {}", e)).await?; + } else { + bot.send_message(chat_id, format!("User {} unwhitelisted.", target)).await?; + } + } + } + Ok(()) +} + +// Placeholder encryption/decryption. In real use, implement AES or other. +fn encrypt_key(raw: &str) -> Result { + // e.g. base64 or AES-encrypt with env key + Ok(base64::encode(raw)) +} +fn decrypt_key(enc: &str) -> Result { + let bytes = base64::decode(enc)?; + Ok(String::from_utf8(bytes)?) +} + +// Placeholder derive address from private key/mnemonic: implement per-chain. +fn derive_address(key: &str) -> Result { + // stub: in Solana, parse keypair and extract pubkey: + // ... + Ok("public_address_stub".to_string()) +} diff --git a/#_sniper (Rust) using jito Shred stream/src/common/logger.rs b/#_sniper (Rust) using jito Shred stream/src/common/logger.rs new file mode 100644 index 0000000..9bc89cb --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/common/logger.rs @@ -0,0 +1,90 @@ +use chrono::Local; +use serde_json::json; +use std::{ + fs::OpenOptions, + io::Write, + sync::{Arc, Mutex}, +}; + +const LOG_LEVEL: &str = "LOG"; + +#[derive(Clone)] +pub struct Logger { + prefix: String, + date_format: String, + file: Arc>, +} + +impl Logger { + // Constructor to create a new logger that writes to "logs.json" + pub fn new(prefix: String) -> Self { + let file = OpenOptions::new() + .create(true) + .append(true) + .open("logs.json") + .expect("Failed to open logs.json for writing"); + + Logger { + prefix, + date_format: String::from("%Y-%m-%d %H:%M:%S"), + file: Arc::new(Mutex::new(file)), + } + } + + pub fn log(&self, message: String) -> String { + let full_log = format!("{} {}", self.prefix_with_date(), message); + println!("{}", full_log); + self.write_json("INFO", &message); + full_log + } + + pub fn debug(&self, message: String) -> String { + let full_log = format!("{} [{}] {}", self.prefix_with_date(), "DEBUG", message); + if LogLevel::new().is_debug() { + println!("{}", full_log); + self.write_json("DEBUG", &message); + } + full_log + } + + pub fn error(&self, message: String) -> String { + let full_log = format!("{} [{}] {}", self.prefix_with_date(), "ERROR", message); + println!("{}", full_log); + self.write_json("ERROR", &message); + full_log + } + + fn prefix_with_date(&self) -> String { + let date = Local::now(); + format!("[{}] {}", date.format(&self.date_format), self.prefix) + } + + fn write_json(&self, level: &str, message: &str) { + let now = Local::now(); + let entry = json!({ + "timestamp": now.to_rfc3339(), + "level": level, + "prefix": self.prefix, + "message": message, + }); + + if let Ok(mut file) = self.file.lock() { + if let Err(e) = writeln!(file, "{}", entry) { + eprintln!("Failed to write to log file: {}", e); + } + } + } +} + +struct LogLevel<'a> { + level: &'a str, +} +impl LogLevel<'_> { + fn new() -> Self { + LogLevel { level: LOG_LEVEL } + } + + fn is_debug(&self) -> bool { + self.level.to_lowercase() == "debug" + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/common/mod.rs b/#_sniper (Rust) using jito Shred stream/src/common/mod.rs new file mode 100644 index 0000000..0444b27 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/common/mod.rs @@ -0,0 +1,3 @@ +pub mod logger; +pub mod rpc; +pub mod utils; diff --git a/#_sniper (Rust) using jito Shred stream/src/common/rpc.rs b/#_sniper (Rust) using jito Shred stream/src/common/rpc.rs new file mode 100644 index 0000000..f130a84 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/common/rpc.rs @@ -0,0 +1,131 @@ +use anchor_lang::AccountDeserialize; +use anyhow::Result; +use base64::{prelude::BASE64_STANDARD, Engine}; +use solana_account_decoder::UiAccountEncoding; +use solana_client::{ + rpc_client::RpcClient, + rpc_config::{RpcAccountInfoConfig, RpcProgramAccountsConfig, RpcSendTransactionConfig}, + rpc_filter::RpcFilterType, + rpc_request::RpcRequest, + rpc_response::{RpcResult, RpcSimulateTransactionResult}, +}; +use solana_sdk::{ + account::Account, commitment_config::CommitmentConfig, instruction::Instruction, + message::Message, pubkey::Pubkey, signature::Signature, signer::signers::Signers, + transaction::Transaction, +}; +use solana_transaction_status::UiTransactionEncoding; + +pub fn build_txn( + client: &RpcClient, + instructions: &[Instruction], + fee_payer: &Pubkey, + signing_keypairs: &dyn Signers, +) -> Result { + let blockhash = client.get_latest_blockhash().unwrap(); + let message = Message::new_with_blockhash(instructions, Some(fee_payer), &blockhash); + let mut transaction = Transaction::new_unsigned(message); + + transaction + .try_partial_sign(signing_keypairs, blockhash) + .unwrap(); + Ok(transaction) +} + +pub fn send_txn(client: &RpcClient, txn: &Transaction, skip_preflight: bool) -> Result { + Ok(client.send_and_confirm_transaction_with_spinner_and_config( + txn, + CommitmentConfig::confirmed(), + RpcSendTransactionConfig { + skip_preflight, + ..RpcSendTransactionConfig::default() + }, + )?) +} + +pub fn simulate_transaction( + client: &RpcClient, + transaction: &Transaction, + sig_verify: bool, + cfg: CommitmentConfig, +) -> RpcResult { + let serialized = bincode::serialize(transaction) + .map_err(|e| (format!("Serialization failed: {e}"))) + .unwrap(); + let serialized_encoded = BASE64_STANDARD.encode(serialized); + println!("{}", serialized_encoded); + + client.send( + RpcRequest::SimulateTransaction, + serde_json::json!([serialized_encoded, { + "sigVerify": sig_verify, "commitment": cfg.commitment, "encoding": Some(UiTransactionEncoding::Base64) + }]), + ) +} + +pub fn send_without_confirm_txn(client: &RpcClient, txn: &Transaction) -> Result { + Ok(client.send_transaction_with_config( + txn, + RpcSendTransactionConfig { + skip_preflight: true, + ..RpcSendTransactionConfig::default() + }, + )?) +} + +pub fn get_account(client: &RpcClient, addr: &Pubkey) -> Result>> { + if let Some(account) = client + .get_account_with_commitment(addr, CommitmentConfig::processed())? + .value + { + let account_data = account.data; + Ok(Some(account_data)) + } else { + Ok(None) + } +} + +pub fn get_anchor_account( + client: &RpcClient, + addr: &Pubkey, +) -> Result> { + if let Some(account) = client + .get_account_with_commitment(addr, CommitmentConfig::processed())? + .value + { + let mut data: &[u8] = &account.data; + let ret = T::try_deserialize(&mut data).unwrap(); + Ok(Some(ret)) + } else { + Ok(None) + } +} + +pub fn get_multiple_accounts( + client: &RpcClient, + pubkeys: &[Pubkey], +) -> Result>> { + Ok(client.get_multiple_accounts(pubkeys)?) +} + +pub fn get_program_accounts_with_filters( + client: &RpcClient, + program: Pubkey, + filters: Option>, +) -> Result> { + let accounts = client + .get_program_accounts_with_config( + &program, + RpcProgramAccountsConfig { + filters, + account_config: RpcAccountInfoConfig { + encoding: Some(UiAccountEncoding::Base64Zstd), + ..RpcAccountInfoConfig::default() + }, + with_context: Some(false), + sort_results: None, // <-- add this line + }, + ) + .unwrap(); + Ok(accounts) +} diff --git a/#_sniper (Rust) using jito Shred stream/src/common/utils.rs b/#_sniper (Rust) using jito Shred stream/src/common/utils.rs new file mode 100644 index 0000000..3069d0d --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/common/utils.rs @@ -0,0 +1,107 @@ +// utils.rs +use crate::engine::swap::SwapDirection; +use anyhow::Result; +use solana_sdk::{commitment_config::CommitmentConfig, pubkey::Pubkey, signature::Keypair}; +use std::{env, sync::Arc}; + +#[derive(Clone)] +pub struct AppState { + pub rpc_client: Arc, + pub rpc_nonblocking_client: Arc, + pub wallet: Arc, +} + +pub struct ParseTx { + pub type_tx: String, + pub direction: Option, + pub amount_in: f64, + pub amount_out: f64, + pub mint: String, +} + +pub fn import_env_var(key: &str) -> String { + env::var(key).unwrap_or_else(|_| panic!("Environment variable {} is not set", key)) +} + +pub fn create_rpc_client() -> Result> { + let rpc_https = import_env_var("RPC_ENDPOINT"); + let rpc_client = solana_client::rpc_client::RpcClient::new_with_commitment( + rpc_https, + CommitmentConfig::processed(), + ); + Ok(Arc::new(rpc_client)) +} + +pub async fn create_nonblocking_rpc_client( +) -> Result> { + let rpc_https = import_env_var("RPC_ENDPOINT"); + let rpc_client = solana_client::nonblocking::rpc_client::RpcClient::new_with_commitment( + rpc_https, + CommitmentConfig::processed(), + ); + Ok(Arc::new(rpc_client)) +} + +pub fn import_wallet() -> Result> { + let priv_key = import_env_var("PRIVATE_KEY"); + let wallet: Keypair = Keypair::from_base58_string(priv_key.as_str()); + + Ok(Arc::new(wallet)) +} + +#[derive(Copy, Clone, Debug, Default)] +pub enum ComputeUnitLimits { + #[default] + Dynamic, + Fixed(u64), +} + +#[derive(Copy, Clone, Debug)] +pub enum PriorityFeeConfig { + DynamicMultiplier(u64), + FixedCuPrice(u64), + JitoTip(u64), +} + +#[derive(Clone, Debug)] +pub struct SwapConfig { + pub priority_fee: Option, + pub cu_limits: Option, + pub wrap_and_unwrap_sol: Option, + pub as_legacy_transaction: Option, + pub slippage: u64, + pub swap_direction: SwapDirection, + pub use_jito: bool, + pub use_priority_tip: bool, +} + +#[derive(Clone, Debug, Default)] +pub struct SwapConfigOverrides { + pub priority_fee: Option, + pub cu_limits: Option, + pub wrap_and_unwrap_sol: Option, + pub destination_token_account: Option, + pub as_legacy_transaction: Option, +} + +#[derive(Copy, Clone, Debug)] +pub struct SwapInput { + pub input_token_mint: Pubkey, + pub output_token_mint: Pubkey, + pub slippage_bps: u16, + pub amount: u64, + pub mode: SwapExecutionMode, + pub market: Option, + pub creator_vault: Option, +} + +#[derive(Copy, Clone, Debug)] +pub enum SwapExecutionMode { + ExactIn, + ExactOut, +} +impl SwapExecutionMode { + pub fn amount_specified_is_input(&self) -> bool { + matches!(self, SwapExecutionMode::ExactIn) + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/core/mod.rs b/#_sniper (Rust) using jito Shred stream/src/core/mod.rs new file mode 100644 index 0000000..ee2cea4 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/core/mod.rs @@ -0,0 +1,2 @@ +pub mod token; +pub mod tx; diff --git a/#_sniper (Rust) using jito Shred stream/src/core/token.rs b/#_sniper (Rust) using jito Shred stream/src/core/token.rs new file mode 100644 index 0000000..45d0d95 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/core/token.rs @@ -0,0 +1,117 @@ +use solana_sdk::{pubkey::Pubkey, signature::Keypair}; +use spl_token_2022::{ + extension::StateWithExtensionsOwned, + state::{Account, Mint}, +}; +use spl_token_client::{ + client::{ProgramClient, ProgramRpcClient, ProgramRpcClientSendTransaction}, + token::{Token, TokenError, TokenResult}, +}; +use std::sync::Arc; + +use tracing::info; + +pub async fn get_token_balance( + client: Arc, + keypair: Arc, + mint: &Pubkey, + owner: &Pubkey, +) -> Result { + let ata = get_associated_token_address(client.clone(), keypair.clone(), mint, owner); + info!( + "🔎 Fetching token balance for ATA: {} | Mint: {} | Owner: {}", + ata, mint, owner + ); + + match get_account_info(client.clone(), keypair, mint, &ata).await { + Ok(account_info) => { + info!( + "✅ Token balance found: {} tokens (raw amount)", + account_info.base.amount + ); + Ok(account_info.base.amount) + } + Err(e) => { + info!("❌ Failed to fetch token balance for ATA {}: {:?}", ata, e); + Err(e) + } + } +} + +pub fn get_associated_token_address( + client: Arc, + keypair: Arc, + address: &Pubkey, + owner: &Pubkey, +) -> Pubkey { + let token_client = Token::new( + Arc::new(ProgramRpcClient::new( + client.clone(), + ProgramRpcClientSendTransaction, + )), + &spl_token::ID, + address, + None, + Arc::new(Keypair::from_bytes(&keypair.to_bytes()).expect("failed to copy keypair")), + ); + token_client.get_associated_token_address(owner) +} + +pub async fn get_account_info( + client: Arc, + _keypair: Arc, + address: &Pubkey, + account: &Pubkey, +) -> TokenResult> { + let program_client = Arc::new(ProgramRpcClient::new( + client.clone(), + ProgramRpcClientSendTransaction, + )); + let account = program_client + .get_account(*account) + .await + .map_err(TokenError::Client)? + .ok_or(TokenError::AccountNotFound) + .inspect_err(|err| println!("get_account_info: {} {}: mint {}", account, err, address))?; + + if account.owner != spl_token::ID { + return Err(TokenError::AccountInvalidOwner); + } + let account = StateWithExtensionsOwned::::unpack(account.data)?; + if account.base.mint != *address { + return Err(TokenError::AccountInvalidMint); + } + + Ok(account) +} + +pub async fn get_mint_info( + client: Arc, + _keypair: Arc, + address: &Pubkey, +) -> TokenResult> { + let program_client = Arc::new(ProgramRpcClient::new( + client.clone(), + ProgramRpcClientSendTransaction, + )); + let account = program_client + .get_account(*address) + .await + .map_err(TokenError::Client)? + .ok_or(TokenError::AccountNotFound) + .inspect_err(|err| println!("{} {}: mint {}", address, err, address))?; + + if account.owner != spl_token::ID { + return Err(TokenError::AccountInvalidOwner); + } + + let mint_result = StateWithExtensionsOwned::::unpack(account.data).map_err(Into::into); + let decimals: Option = None; + if let (Ok(mint), Some(decimals)) = (&mint_result, decimals) { + if decimals != mint.base.decimals { + return Err(TokenError::InvalidDecimals); + } + } + + mint_result +} diff --git a/#_sniper (Rust) using jito Shred stream/src/core/tx.rs b/#_sniper (Rust) using jito Shred stream/src/core/tx.rs new file mode 100644 index 0000000..2c86539 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/core/tx.rs @@ -0,0 +1,224 @@ +// tx.rs + +use crate::{ + common::{logger::Logger, rpc}, + services::{jito, nextblock}, +}; +use anyhow::{anyhow, Result}; +use base64; +use once_cell::sync::Lazy; +use reqwest::Client as HttpClient; +use serde_json::json; +use solana_client::rpc_client::RpcClient; +use solana_sdk::{ + compute_budget::ComputeBudgetInstruction, hash::Hash, instruction::Instruction, + signature::Keypair, signer::Signer, system_instruction, transaction::Transaction, +}; +use spl_token::ui_amount_to_amount; +use std::{env, sync::Arc, time::Duration}; +use tokio::{spawn, sync::Mutex, time::Instant}; + +//—————————————————————————————————————————————————— +// 1) One global HTTP client for all block‐engine calls +//—————————————————————————————————————————————————— +static HTTP_CLIENT: Lazy = Lazy::new(|| { + HttpClient::builder() + .pool_max_idle_per_host(0) + .build() + .expect("failed to build HTTP client") +}); + +//—————————————————————————————————————————————————— +// 2) Cached blockhash, refreshed every 500 ms in the background +//—————————————————————————————————————————————————— +pub static LATEST_BLOCKHASH: Lazy> = Lazy::new(|| Mutex::new(Hash::default())); + +/// Spawn this once at startup to keep our blockhash fresh. +pub fn spawn_blockhash_refresher(rpc: Arc) { + spawn(async move { + loop { + if let Ok(hash) = rpc.get_latest_blockhash() { + *LATEST_BLOCKHASH.lock().await = hash; + } + tokio::time::sleep(Duration::from_millis(50)).await; + } + }); +} + +//—————————————————————————————————————————————————— +// 3) One-time init of tip account & tip value (Jito vs NextBlock) +//—————————————————————————————————————————————————— +static TIP_ACCOUNT: Lazy> = + Lazy::new(|| Mutex::new(solana_sdk::pubkey::Pubkey::default())); +static TIP_VALUE: Lazy> = Lazy::new(|| Mutex::new(0.0)); + +/// Call this **once** at startup (before any swaps). +/// `use_nextblock` comes from e.g. `env("BLOCK_ENGINE_PROVIDER") == "nextblock"`, +/// `use_priority_tip` from your config. +pub async fn init_tip_state(use_nextblock: bool, use_priority_tip: bool) -> Result<()> { + if use_nextblock { + nextblock::init_tip_accounts().await?; + let base = nextblock::get_tip_value().await?; + let mut acct = TIP_ACCOUNT.lock().await; + let mut val = TIP_VALUE.lock().await; + *acct = nextblock::get_tip_account().await?; + *val = if use_priority_tip { base * 2.0 } else { base }; + } else { + jito::init_tip_accounts().await?; + let base = jito::get_tip_value().await?; + let mut acct = TIP_ACCOUNT.lock().await; + let mut val = TIP_VALUE.lock().await; + *acct = jito::get_tip_account().await?; + *val = if use_priority_tip { base * 5.0 } else { base }; + } + Ok(()) +} + +//—————————————————————————————————————————————————— +// 4) Pre-built compute-budget instructions +//—————————————————————————————————————————————————— +fn unit_price() -> u64 { + env::var("UNIT_PRICE") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(1) +} + +fn unit_limit() -> u32 { + env::var("UNIT_LIMIT") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(300_000) +} + +static BUDGET_INSTRUCTIONS: Lazy> = Lazy::new(|| { + vec![ + ComputeBudgetInstruction::set_compute_unit_price(unit_price()), + ComputeBudgetInstruction::set_compute_unit_limit(unit_limit()), + ] +}); + +//—————————————————————————————————————————————————— +// 5) The refactored send‐tx function (handles RPC, Jito & NextBlock) +//—————————————————————————————————————————————————— +#[allow(deprecated, unused_variables)] +pub async fn new_signed_and_send( + client: &RpcClient, + keypair: &Keypair, + mut instructions: Vec, + use_priority_engine: bool, // e.g. swap_config.use_jito + use_priority_tip: bool, // e.g. swap_config.use_priority_tip + logger: &Logger, +) -> Result> { + // a) If *not* using a block‐engine, prepend compute‐budget ixs + if !use_priority_engine { + instructions.splice(0..0, BUDGET_INSTRUCTIONS.iter().cloned()); + } + + // b) Grab our cached blockhash + let blockhash = *LATEST_BLOCKHASH.lock().await; + + // c) Dispatch + let start = Instant::now(); + let mut sigs = Vec::new(); + + if use_priority_engine { + // i) build tip‐transfer ix + let tip_account = *TIP_ACCOUNT.lock().await; + let tip_value = *TIP_VALUE.lock().await; + let lamports = ui_amount_to_amount(tip_value.min(0.1), spl_token::native_mint::DECIMALS); + let tip_ix = system_instruction::transfer(&keypair.pubkey(), &tip_account, lamports); + + // ii) weave it into a fresh txn + let mut pe_ixs = Vec::with_capacity(instructions.len() + 1); + pe_ixs.push(tip_ix); + pe_ixs.extend(instructions); + let pe_tx = Transaction::new_signed_with_payer( + &pe_ixs, + Some(&keypair.pubkey()), + &[keypair], + blockhash, + ); + + // iii) encode + HTTP‐POST to NextBlock or Jito + let encoded = base64::encode(bincode::serialize(&pe_tx)?); + let payload = json!({ + "transaction": { "content": encoded }, + "frontRunningProtection": true, + }); + + let engine_is_nextblock = env::var("BLOCK_ENGINE_PROVIDER") + .unwrap_or_default() + .to_lowercase() + == "nextblock"; + + if engine_is_nextblock { + // — NextBlock — + let auth = env::var("NEXTBLOCK_AUTH").unwrap_or_default(); + let resp = HTTP_CLIENT + .post("https://ny.nextblock.io/api/v2/submit") + .header("Content-Type", "application/json") + .header("Authorization", auth) + .json(&payload) + .send() + .await?; + + if !resp.status().is_success() { + return Err(anyhow!( + "NextBlock error {}: {}", + resp.status(), + resp.text().await? + )); + } + let body = resp.json::().await?; + if let Some(sig) = body.get("signature").and_then(|v| v.as_str()) { + sigs.push(sig.to_string()); + } else { + return Err(anyhow!("Missing signature in NextBlock response")); + } + } else { + // — Jito — + let url = format!("{}/api/v1/transactions", *jito::BLOCK_ENGINE_URL); + let rpc_resp = HTTP_CLIENT + .post(&url) + .header("Content-Type", "application/json") + .json(&json!({ + "id": 1, + "jsonrpc": "2.0", + "method": "sendTransaction", + "params": [encoded, { "encoding": "base64" }] + })) + .send() + .await?; + + if !rpc_resp.status().is_success() { + return Err(anyhow!( + "Jito error {}: {}", + rpc_resp.status(), + rpc_resp.text().await? + )); + } + let body = rpc_resp.json::().await?; + if let Some(sig) = body.get("result").and_then(|v| v.as_str()) { + sigs.push(sig.to_string()); + } else { + return Err(anyhow!("Missing signature in Jito response")); + } + } + + logger.log(format!("✅ Sent via block‐engine in {:?}", start.elapsed())); + } else { + // — standard RPC path — + let std_tx = Transaction::new_signed_with_payer( + &instructions, + Some(&keypair.pubkey()), + &[keypair], + blockhash, + ); + let sig = rpc::send_txn(client, &std_tx, true)?; + sigs.push(sig.to_string()); + logger.log("✅ Sent via standard RPC".into()); + } + + Ok(sigs) +} diff --git a/#_sniper (Rust) using jito Shred stream/src/db.rs b/#_sniper (Rust) using jito Shred stream/src/db.rs new file mode 100644 index 0000000..9905f0c --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/db.rs @@ -0,0 +1,170 @@ +// src/db.rs +use mongodb::{Client, Collection, options::ClientOptions}; +use mongodb::bson::{doc, oid::ObjectId}; +use crate::models::{UserRecord, WalletEntry}; +use anyhow::{Result, Context}; +use futures::TryStreamExt; + +pub struct Database { + users: Collection, +} + +impl Database { + /// Initialize MongoDB client and get `users` collection. + pub async fn new(mongo_uri: &str, db_name: &str) -> Result { + let mut client_options = ClientOptions::parse(mongo_uri).await?; + client_options.app_name = Some("TelegramWalletBot".to_string()); + let client = Client::with_options(client_options)?; + let db = client.database(db_name); + let users = db.collection::("users"); + // Ensure index on telegram_id + users.create_index( + mongodb::IndexModel::builder() + .keys(doc! { "telegram_id": 1 }) + .options(Some(mongodb::options::IndexOptions::builder().unique(true).build())) + .build(), + None + ).await?; + Ok(Self { users }) + } + + /// Fetch or create a user record. If not exist, create with is_whitelisted=false. + pub async fn get_or_create_user(&self, telegram_id: i64) -> Result { + if let Some(user) = self.users + .find_one(doc! { "telegram_id": telegram_id }, None) + .await? + { + Ok(user) + } else { + let new = UserRecord { + id: ObjectId::new(), + telegram_id, + is_whitelisted: false, + wallets: Vec::new(), + trading_wallet_id: None, + min_tokens_to_buy: None, + slippage_pct: None, + tip_amount: None, + }; + self.users.insert_one(&new, None).await?; + Ok(new) + } + } + + /// Check whitelist + pub async fn is_whitelisted(&self, telegram_id: i64) -> Result { + if let Some(user) = self.users.find_one(doc! { "telegram_id": telegram_id }, None).await? { + Ok(user.is_whitelisted) + } else { + Ok(false) + } + } + + /// Set whitelist status (admin only). + pub async fn set_whitelist(&self, telegram_id: i64, status: bool) -> Result<()> { + let filter = doc! { "telegram_id": telegram_id }; + let update = doc! { "$set": { "is_whitelisted": status } }; + self.users.update_one(filter, update, None).await?; + Ok(()) + } + + /// Add a wallet (limit 5). Returns error if >5. + pub async fn add_wallet(&self, telegram_id: i64, name: String, address: String, private_enc: String) -> Result { + // Load user + let mut user = self.get_or_create_user(telegram_id).await?; + if user.wallets.len() >= 5 { + anyhow::bail!("wallet limit reached (5)"); + } + // Create entry + let entry = WalletEntry { + id: ObjectId::new(), + name, + address, + private_key_enc: private_enc, + }; + user.wallets.push(entry.clone()); + // Update in DB + self.users.update_one( + doc! { "telegram_id": telegram_id }, + doc! { "$set": { "wallets": bson::to_bson(&user.wallets)? } }, + None + ).await?; + Ok(entry) + } + + /// List wallets + pub async fn list_wallets(&self, telegram_id: i64) -> Result> { + if let Some(user) = self.users.find_one(doc! { "telegram_id": telegram_id }, None).await? { + Ok(user.wallets) + } else { + Ok(Vec::new()) + } + } + + /// Set trading wallet by wallet id + pub async fn set_trading_wallet(&self, telegram_id: i64, wallet_id: ObjectId) -> Result<()> { + // Verify wallet belongs to user + if let Some(user) = self.users.find_one(doc! { "telegram_id": telegram_id }, None).await? { + if user.wallets.iter().any(|w| w.id == wallet_id) { + self.users.update_one( + doc! { "telegram_id": telegram_id }, + doc! { "$set": { "trading_wallet_id": wallet_id } }, + None + ).await?; + Ok(()) + } else { + anyhow::bail!("wallet not found"); + } + } else { + anyhow::bail!("user not found"); + } + } + + /// Update a setting (min_tokens_to_buy, slippage_pct, tip_amount) + pub async fn update_setting_min_tokens(&self, telegram_id: i64, min_tokens: f64) -> Result<()> { + self.users.update_one( + doc! { "telegram_id": telegram_id }, + doc! { "$set": { "min_tokens_to_buy": min_tokens } }, + None + ).await?; + Ok(()) + } + pub async fn update_setting_slippage(&self, telegram_id: i64, slippage_pct: f64) -> Result<()> { + self.users.update_one( + doc! { "telegram_id": telegram_id }, + doc! { "$set": { "slippage_pct": slippage_pct } }, + None + ).await?; + Ok(()) + } + pub async fn update_setting_tip(&self, telegram_id: i64, tip: u64) -> Result<()> { + self.users.update_one( + doc! { "telegram_id": telegram_id }, + doc! { "$set": { "tip_amount": tip } }, + None + ).await?; + Ok(()) + } + + /// Remove wallet by id + pub async fn remove_wallet(&self, telegram_id: i64, wallet_id: ObjectId) -> Result<()> { + // Pull from array + self.users.update_one( + doc! { "telegram_id": telegram_id }, + doc! { "$pull": { "wallets": { "id": wallet_id } } }, + None + ).await?; + // If trading_wallet_id was this, clear it + self.users.update_one( + doc! { "telegram_id": telegram_id, "trading_wallet_id": wallet_id }, + doc! { "$set": { "trading_wallet_id": bson::Bson::Null } }, + None + ).await?; + Ok(()) + } + + /// Fetch user record + pub async fn get_user(&self, telegram_id: i64) -> Result> { + Ok(self.users.find_one(doc! { "telegram_id": telegram_id }, None).await?) + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/dex/middleware.rs b/#_sniper (Rust) using jito Shred stream/src/dex/middleware.rs new file mode 100644 index 0000000..de3a7cb --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/dex/middleware.rs @@ -0,0 +1,146 @@ +pub const TEN_THOUSAND: u64 = 10000; +pub const TOKEN_PROGRAM: &str = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; +pub const RENT_PROGRAM: &str = "SysvarRent111111111111111111111111111111111"; +pub const ASSOCIATED_TOKEN_PROGRAM: &str = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; +pub const PUMP_GLOBAL: &str = "4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf"; +pub const PUMP_FEE_RECIPIENT: &str = "CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM"; +pub const PUMP_PROGRAM: &str = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; +// pub const PUMP_FUN_MINT_AUTHORITY: &str = "TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM"; +pub const PUMP_ACCOUNT: &str = "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; +pub const PUMP_BUY_METHOD: u64 = 16927863322537952870; +pub const PUMP_SELL_METHOD: u64 = 12502976635542562355; + +pub struct Pump { + pub rpc_nonblocking_client: Arc, + pub keypair: Arc, + pub rpc_client: Option>, +} + +impl Pump { + pub fn new( + rpc_nonblocking_client: Arc, + rpc_client: Arc, + keypair: Arc, + ) -> Self { + Self { + rpc_nonblocking_client, + keypair, + rpc_client: Some(rpc_client), + } + } + + pub async fn swap(&self, mint: &str, swap_config: SwapConfig) -> Result> { + let logger = Logger::new("[SWAP IN PUMP.FUN] => ".to_string()); + let slippage_bps = swap_config.slippage * 100; + let owner = self.keypair.pubkey(); + let mint = + Pubkey::from_str(mint).map_err(|e| anyhow!("failed to parse mint pubkey: {}", e))?; + let program_id = spl_token::ID; + let native_mint = spl_token::native_mint::ID; + + let (token_in, token_out, pump_method) = match swap_config.swap_direction { + SwapDirection::Buy => (native_mint, mint, PUMP_BUY_METHOD), + SwapDirection::Sell => (mint, native_mint, PUMP_SELL_METHOD), + }; + let pump_program = Pubkey::from_str(PUMP_PROGRAM)?; + let (bonding_curve, associated_bonding_curve, bonding_curve_account) = + get_bonding_curve_account(self.rpc_client.clone().unwrap(), &mint, &pump_program) + .await?; + + let in_ata = token::get_associated_token_address( + self.rpc_nonblocking_client.clone(), + self.keypair.clone(), + &token_in, + &owner, + ); + let out_ata = token::get_associated_token_address( + self.rpc_nonblocking_client.clone(), + self.keypair.clone(), + &token_out, + &owner, + ); + + let mut create_instruction = None; + let mut close_instruction = None; + + tx::new_signed_and_send( + &client, + &self.keypair, + instructions, + swap_config.use_jito, + &logger, + ) + .await + } +} +impl Raydium { + pub fn new( + rpc_nonblocking_client: Arc, + rpc_client: Arc, + keypair: Arc, + ) -> Self { + Self { + rpc_nonblocking_client, + keypair, + rpc_client: Some(rpc_client), + pool_id: None, + } + } + + pub async fn swap( + &self, + swap_config: SwapConfig, + amm_pool_id: Pubkey, + pool_state: AmmInfo, + ) -> Result> { + let logger = Logger::new(format!( + "[SWAP IN RAYDIUM]({}) => ", + chrono::Utc::now().timestamp() + )); + let slippage_bps = swap_config.slippage * 100; + let owner = self.keypair.pubkey(); + let program_id = spl_token::ID; + let native_mint = spl_token::native_mint::ID; + let mint = pool_state.coin_vault_mint; + + let (token_in, token_out, user_input_token, swap_base_in) = match ( + swap_config.swap_direction.clone(), + pool_state.coin_vault_mint == native_mint, + ) { + (SwapDirection::Buy, true) => (native_mint, mint, pool_state.coin_vault, true), + (SwapDirection::Buy, false) => (native_mint, mint, pool_state.pc_vault, true), + (SwapDirection::Sell, true) => (mint, native_mint, pool_state.pc_vault, true), + (SwapDirection::Sell, false) => (mint, native_mint, pool_state.coin_vault, true), + }; + + logger.log(format!( + "token_in:{}, token_out:{}, user_input_token:{}, swap_base_in:{}", + token_in, token_out, user_input_token, swap_base_in + )); + + let in_ata = get_associated_token_address( + self.rpc_nonblocking_client.clone(), + self.keypair.clone(), + &token_in, + &owner, + ); + let out_ata = get_associated_token_address( + self.rpc_nonblocking_client.clone(), + self.keypair.clone(), + &token_out, + &owner, + ); + + let mut create_instruction = None; + let mut close_instruction = None; + + tx::new_signed_and_send( + &client, + &self.keypair, + instructions, + swap_config.use_jito, + &logger, + ) + .await + } +} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/src/dex/mod.rs b/#_sniper (Rust) using jito Shred stream/src/dex/mod.rs new file mode 100644 index 0000000..77797ec --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/dex/mod.rs @@ -0,0 +1 @@ +pub mod pump_fun; diff --git a/#_sniper (Rust) using jito Shred stream/src/dex/pump_fun.rs b/#_sniper (Rust) using jito Shred stream/src/dex/pump_fun.rs new file mode 100644 index 0000000..a6077eb --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/dex/pump_fun.rs @@ -0,0 +1,470 @@ +// pump_fun.rs +use crate::common::utils::SwapInput; +use crate::{ + common::{logger::Logger, utils::SwapConfig}, + core::tx, + engine::swap::SwapDirection, +}; +use anyhow::{anyhow, Result}; +use borsh::{from_slice, to_vec, BorshDeserialize, BorshSerialize}; +use serde::{Deserialize, Serialize}; +use shared_state::BoughtTokenInfo; +use shared_state::BOUGHT_TOKENS; +use shared_state::CURRENT_SLOT; +use solana_sdk::{ + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, + signature::Keypair, + signer::Signer, + system_program, +}; +use spl_associated_token_account::get_associated_token_address; +use spl_associated_token_account::instruction::create_associated_token_account as create_ata; +use std::collections::HashSet; +use std::sync::atomic::Ordering; +use std::time::Instant; +use std::{str::FromStr, sync::Arc, time::Duration}; +use tokio::sync::Mutex; +use tracing::info; +// Define the 8-byte discriminator for the pump swap instruction. +// (These bytes must match what the on‑chain program expects.) +const PUMP_SWAP_DISCRIMINATOR: [u8; 8] = [102, 6, 61, 18, 1, 218, 235, 234]; + +pub const TEN_THOUSAND: u64 = 10000; +pub const TOKEN_PROGRAM: &str = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; +pub const RENT_PROGRAM: &str = "SysvarRent111111111111111111111111111111111"; +pub const ASSOCIATED_TOKEN_PROGRAM: &str = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; +pub const PUMP_GLOBAL: &str = "4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf"; +pub const PUMP_FEE_RECIPIENT: &str = "CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM"; +pub const PUMP_PROGRAM: &str = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; +// pub const PUMP_FUN_MINT_AUTHORITY: &str = "TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM"; +pub const PUMP_ACCOUNT: &str = "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; +pub const PUMP_BUY_METHOD: u64 = 16927863322537952870; +pub const PUMP_SELL_METHOD: u64 = 12502976635542562355; + +/// This struct will be serialized (after the discriminator) as the instruction data. +#[derive(BorshSerialize, BorshDeserialize, Debug)] +pub struct PumpBuyInstruction { + /// The minimum number of tokens the buyer expects to receive. + pub amount: u64, + /// The maximum SOL (in lamports) the buyer is willing to spend. + pub max_sol_cost: u64, +} + +#[derive(BorshSerialize, BorshDeserialize, Debug)] +pub struct PumpSellInstruction { + /// Amount of tokens to sell + pub amount: u64, + /// Minimum SOL to receive + pub min_sol_output: u64, +} + +pub struct Pump { + pub rpc_nonblocking_client: Arc, + pub keypair: Arc, + pub rpc_client: Option>, + created_atas: Arc>>, +} + +impl Pump { + pub fn new( + rpc_nonblocking_client: Arc, + rpc_client: Arc, + keypair: Arc, + ) -> Self { + Self { + rpc_nonblocking_client, + keypair, + rpc_client: Some(rpc_client), + created_atas: Arc::new(Mutex::new(HashSet::new())), + } + } + + pub async fn swap( + &self, + mint: &str, + swap_config: SwapConfig, + swap_input: SwapInput, + amount_in_lamports: u64, + ) -> Result> { + match swap_config.swap_direction { + SwapDirection::Buy => { + self.swap_buy(mint, swap_config, &swap_input, amount_in_lamports) + .await + } + SwapDirection::Sell => self.swap_sell(mint, swap_config).await, + } + } + + async fn swap_buy( + &self, + _mint: &str, + swap_config: SwapConfig, + swap_input: &SwapInput, + amount_in_lamports: u64, + ) -> Result> { + let creator_vault = swap_input + .creator_vault + .ok_or_else(|| anyhow!("creator_vault not provided in SwapInput"))?; + + // still need a Logger for the lower‐level TX helper + let logger = Logger::new("[BUY SWAP] => ".to_string()); + let owner = self.keypair.pubkey(); + let mint_pubkey = swap_input.output_token_mint; + let pump_program = Pubkey::from_str(PUMP_PROGRAM)?; + + // derive PDAs + let bonding_curve = get_pda(&mint_pubkey, &pump_program)?; + let associated_bonding_curve = get_associated_token_address(&bonding_curve, &mint_pubkey); + + // derive ATA locally + let out_ata = + spl_associated_token_account::get_associated_token_address(&owner, &mint_pubkey); + + // 1) ensure user ATA exists via cache + let mut instructions = Vec::new(); + { + let cache = self.created_atas.lock().await; + if !cache.contains(&out_ata) { + instructions.push(create_ata(&owner, &owner, &mint_pubkey, &spl_token::ID)); + } + } + + // 2) build the buy instruction data + let min_tokens: u64 = std::env::var("MIN_TOKENS_EXPECTED") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(8_000_000_000_000); + let mut data = PUMP_SWAP_DISCRIMINATOR.to_vec(); + data.extend_from_slice(&to_vec(&PumpBuyInstruction { + amount: min_tokens, + max_sol_cost: amount_in_lamports, + })?); + + // 3) assemble accounts in *exact* IDL order + let global = Pubkey::find_program_address(&[b"global"], &pump_program).0; + let fee_recipient = Pubkey::from_str(PUMP_FEE_RECIPIENT)?; + let event_authority = Pubkey::from_str(PUMP_ACCOUNT)?; + let accounts = vec![ + AccountMeta::new_readonly(global, false), // 1 + AccountMeta::new(fee_recipient, false), // 2 + AccountMeta::new_readonly(mint_pubkey, false), // 3 + AccountMeta::new(bonding_curve, false), // 4 + AccountMeta::new(associated_bonding_curve, false), // 5 + AccountMeta::new(out_ata, false), // 6 + AccountMeta::new(owner, true), // 7 + AccountMeta::new_readonly(system_program::ID, false), // 8 + AccountMeta::new_readonly(spl_token::ID, false), // 9 + AccountMeta::new(creator_vault, false), // 10 + AccountMeta::new_readonly(event_authority, false), // 11 + AccountMeta::new_readonly(pump_program, false), // 12 + ]; + + info!( + "⛓ Preparing BUY for {}: min_tokens={}, max_sol={}; accounts={:?}", + mint_pubkey, + min_tokens, + amount_in_lamports, + accounts + .iter() + .map(|m| m.pubkey.to_string()) + .collect::>() + ); + + // 4) push your swap instruction + instructions.push(Instruction { + program_id: pump_program, + accounts, + data, + }); + + // 5) dispatch + let tx_result = tx::new_signed_and_send( + self.rpc_client.as_ref().unwrap(), + &self.keypair, + instructions, + swap_config.use_jito, + swap_config.use_priority_tip, + &logger, + ) + .await; + + // 6) record on success + if let Ok(sigs) = &tx_result { + let buy_slot = CURRENT_SLOT.load(std::sync::atomic::Ordering::Relaxed); + let mut tokens = BOUGHT_TOKENS.lock().await; + let mut info = BoughtTokenInfo::new( + mint_pubkey.to_string(), + Some(out_ata.to_string()), + min_tokens, + Instant::now(), + sigs.first().cloned(), + buy_slot, + Some(creator_vault), + ); + info.set_buy_executed_at(Instant::now()); + tokens.insert(mint_pubkey.to_string(), info); + + info!( + "✅ BUY sent for {}: sigs={:?} @ slot={}", + mint_pubkey, sigs, buy_slot + ); + } + + tx_result + } + + async fn swap_sell(&self, mint: &str, swap_config: SwapConfig) -> Result> { + // logger still used for the helper + let logger = Logger::new("[SELL SWAP] => ".to_string()); + let owner = self.keypair.pubkey(); + let mint_pubkey = Pubkey::from_str(mint)?; + let pump_program = Pubkey::from_str(PUMP_PROGRAM)?; + + // derive PDAs + let global_pda = Pubkey::find_program_address(&[b"global"], &pump_program).0; + let fee_recipient = Pubkey::from_str(PUMP_FEE_RECIPIENT)?; + let bonding_curve = get_pda(&mint_pubkey, &pump_program)?; + let associated_bonding_curve = get_associated_token_address(&bonding_curve, &mint_pubkey); + let event_authority = Pubkey::from_str(PUMP_ACCOUNT)?; + + // fetch stored info including creator_vault + let (in_ata, sell_amount, creator_vault) = { + let tokens = BOUGHT_TOKENS.lock().await; + let info = tokens + .get(mint) + .ok_or_else(|| anyhow!("Missing buy record for {}", mint))?; + let ata_str = info + .ata() + .ok_or_else(|| anyhow!("Missing ATA for {}", mint))?; + let tracked = info.amount(); + let fallback = info.fallback_amount(); + let sell_amount = tracked.max(fallback); + let vault = *info + .creator_vault() + .ok_or_else(|| anyhow!("Missing stored creator_vault for {}", mint))?; + (Pubkey::from_str(ata_str)?, sell_amount, vault) + }; + + // build instruction data + const PUMP_SELL_DISCRIMINATOR: [u8; 8] = [51, 230, 133, 164, 1, 127, 131, 173]; + let mut data = PUMP_SELL_DISCRIMINATOR.to_vec(); + data.extend_from_slice(&to_vec(&PumpSellInstruction { + amount: sell_amount, + min_sol_output: 1_000, + })?); + + // assemble accounts in IDL order + let accounts = vec![ + AccountMeta::new_readonly(global_pda, false), + AccountMeta::new(fee_recipient, false), + AccountMeta::new_readonly(mint_pubkey, false), + AccountMeta::new(bonding_curve, false), + AccountMeta::new(associated_bonding_curve, false), + AccountMeta::new(in_ata, false), + AccountMeta::new(owner, true), + AccountMeta::new_readonly(system_program::ID, false), + AccountMeta::new(creator_vault, false), + AccountMeta::new_readonly(Pubkey::from_str(TOKEN_PROGRAM)?, false), + AccountMeta::new_readonly(event_authority, false), + AccountMeta::new_readonly(pump_program, false), + ]; + + info!( + "⛓ Preparing SELL for {}: amount={}, creator_vault={}; accounts={:?}", + mint_pubkey, + sell_amount, + creator_vault, + accounts + .iter() + .map(|m| m.pubkey.to_string()) + .collect::>() + ); + + let ix = Instruction { + program_id: pump_program, + accounts, + data, + }; + let mut last: Result> = Err(anyhow!("no attempts")); + for attempt in 1..=3 { + let res = tx::new_signed_and_send( + self.rpc_client.as_ref().unwrap(), + &self.keypair, + vec![ix.clone()], + swap_config.use_jito, + swap_config.use_priority_tip, + &logger, + ) + .await; + + match res { + Ok(sigs) => { + let sell_slot = CURRENT_SLOT.load(Ordering::Relaxed); + info!( + "💰 SELL succeeded for {}: sigs={:?} @ slot={}", + mint_pubkey, sigs, sell_slot + ); + + // ** record the signature so your gRPC‐stream confirmation can see it ** + let mut tokens = BOUGHT_TOKENS.lock().await; + if let Some(entry) = tokens.get_mut(&mint_pubkey.to_string()) { + entry.set_sell_signature(sigs[0].clone()); + } + + last = Ok(sigs); + break; + } + + Err(err) => { + info!( + "❌ SELL attempt {} failed for {}: {}", + attempt, mint_pubkey, err + ); + if attempt < 3 { + tokio::time::sleep(Duration::from_millis(600 * attempt)).await; + } + last = Err(err); + } + } + } + + last + } +} + +pub async fn wait_for_bonding_curve_account( + rpc_client: Arc, + mint: &Pubkey, + program_id: &Pubkey, + max_retries: usize, + delay_ms: u64, +) -> Result<(Pubkey, Pubkey, BondingCurveAccount)> { + let bonding_curve = get_pda(mint, program_id)?; + let associated_bonding_curve = get_associated_token_address(&bonding_curve, mint); + + for attempt in 0..max_retries { + match rpc_client.get_account_data(&bonding_curve) { + Ok(data) => { + let bonding_curve_account: BondingCurveAccount = + from_slice::(&data).map_err(|e| { + anyhow!("Failed to deserialize bonding curve account: {}", e) + })?; + return Ok(( + bonding_curve, + associated_bonding_curve, + bonding_curve_account, + )); + } + Err(err) => { + if attempt == max_retries - 1 { + return Err(anyhow!( + "Bonding curve account not found after retries: {}", + err + )); + } + tokio::time::sleep(Duration::from_millis(delay_ms)).await; + } + } + } + + Err(anyhow!( + "Bonding curve account retry logic failed unexpectedly" + )) +} + +/// Derives the bonding curve PDA and its associated token account for a given mint. +pub async fn get_bonding_curve_account( + rpc_client: Arc, + mint: &Pubkey, + program_id: &Pubkey, +) -> Result<(Pubkey, Pubkey, BondingCurveAccount)> { + let bonding_curve = get_pda(mint, program_id)?; + let associated_bonding_curve = + spl_associated_token_account::get_associated_token_address(&bonding_curve, mint); + let bonding_curve_data = rpc_client + .get_account_data(&bonding_curve) + .inspect_err(|err| { + println!( + "Failed to get bonding curve account data: {}, err: {}", + bonding_curve, err + ); + })?; + + let bonding_curve_account = + from_slice::(&bonding_curve_data).map_err(|e| { + anyhow!( + "Failed to deserialize bonding curve account: {}", + e.to_string() + ) + })?; + + Ok(( + bonding_curve, + associated_bonding_curve, + bonding_curve_account, + )) +} + +/// Derives the PDA for the bonding curve from the mint and program id. +pub fn get_pda(mint: &Pubkey, program_id: &Pubkey) -> Result { + let seeds = [b"bonding-curve".as_ref(), mint.as_ref()]; + let (bonding_curve, _bump) = Pubkey::find_program_address(&seeds, program_id); + Ok(bonding_curve) +} + +#[derive(Debug, BorshSerialize, BorshDeserialize)] +pub struct BondingCurveAccount { + pub discriminator: u64, + pub virtual_token_reserves: u64, + pub virtual_sol_reserves: u64, + pub real_token_reserves: u64, + pub real_sol_reserves: u64, + pub token_total_supply: u64, + pub complete: bool, + pub creator: Pubkey, +} + +/// Retrieves pump info for a given token mint. +pub async fn get_pump_info( + rpc_client: Arc, + mint: &str, +) -> Result { + let mint = Pubkey::from_str(mint)?; + let program_id = Pubkey::from_str(PUMP_PROGRAM)?; + let (bonding_curve, associated_bonding_curve, bonding_curve_account) = + get_bonding_curve_account(rpc_client, &mint, &program_id).await?; + + let pump_info = PumpInfo { + mint: mint.to_string(), + bonding_curve: bonding_curve.to_string(), + associated_bonding_curve: associated_bonding_curve.to_string(), + raydium_pool: None, + raydium_info: None, + complete: bonding_curve_account.complete, + virtual_sol_reserves: bonding_curve_account.virtual_sol_reserves, + virtual_token_reserves: bonding_curve_account.virtual_token_reserves, + total_supply: bonding_curve_account.token_total_supply, + }; + Ok(pump_info) +} + +#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct RaydiumInfo { + pub base: f64, + pub quote: f64, + pub price: f64, +} + +#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PumpInfo { + pub mint: String, + pub bonding_curve: String, + pub associated_bonding_curve: String, + pub raydium_pool: Option, + pub raydium_info: Option, + pub complete: bool, + pub virtual_sol_reserves: u64, + pub virtual_token_reserves: u64, + pub total_supply: u64, +} diff --git a/#_sniper (Rust) using jito Shred stream/src/engine/mod.rs b/#_sniper (Rust) using jito Shred stream/src/engine/mod.rs new file mode 100644 index 0000000..2e82136 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/engine/mod.rs @@ -0,0 +1 @@ +pub mod swap; diff --git a/#_sniper (Rust) using jito Shred stream/src/engine/swap.rs b/#_sniper (Rust) using jito Shred stream/src/engine/swap.rs new file mode 100644 index 0000000..fd8c4d4 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/engine/swap.rs @@ -0,0 +1,85 @@ +// swap.rs +use crate::common::utils::{AppState, SwapConfig, SwapInput}; +use crate::dex::pump_fun::Pump; +use anyhow::Result; +use clap::ValueEnum; +use serde::Deserialize; + +#[derive(ValueEnum, Copy, Debug, Clone, Deserialize, PartialEq)] +pub enum SwapDirection { + #[serde(rename = "buy")] + Buy, + #[serde(rename = "sell")] + Sell, +} +impl From for u8 { + fn from(value: SwapDirection) -> Self { + match value { + SwapDirection::Buy => 0, + SwapDirection::Sell => 1, + } + } +} + +#[derive(ValueEnum, Debug, Clone, Deserialize)] +pub enum SwapInType { + #[serde(rename = "qty")] + Qty, + #[serde(rename = "pct")] + Pct, +} + +pub async fn pump_swap( + state: AppState, + swap_input: SwapInput, + swap_direction: &str, + use_jito: bool, + urgent: bool, +) -> Result> { + if swap_input.amount == 0 { + return Err(anyhow::anyhow!( + "Skipping swap: provided amount is 0 lamports" + )); + } + + // Convert the provided swap_direction string to our enum. + let swap_direction_enum = match swap_direction { + "buy" => SwapDirection::Buy, + "sell" => SwapDirection::Sell, + _ => anyhow::bail!("Invalid swap direction"), + }; + + // Default to the provided slippage... + let mut slippage = swap_input.slippage_bps as u64; + + // 🔧 Add more slippage for sells to prevent 6003 errors + if swap_direction_enum == SwapDirection::Sell { + slippage += 50; // Add 10bps extra + } + + let swap_config = SwapConfig { + slippage, + swap_direction: swap_direction_enum, + use_jito, + use_priority_tip: urgent, + cu_limits: None, + priority_fee: None, + wrap_and_unwrap_sol: Some(true), + as_legacy_transaction: Some(false), + }; + + let swapx = Pump::new(state.rpc_nonblocking_client, state.rpc_client, state.wallet); + + let mint = if swap_direction_enum == SwapDirection::Buy { + swap_input.output_token_mint.to_string() + } else { + swap_input.input_token_mint.to_string() + }; + + let amount_in = swap_input.amount; + + let res = swapx + .swap(&mint, swap_config, swap_input, amount_in) + .await?; + Ok(res) +} diff --git a/#_sniper (Rust) using jito Shred stream/src/hardcap.rs b/#_sniper (Rust) using jito Shred stream/src/hardcap.rs new file mode 100644 index 0000000..502aba6 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/hardcap.rs @@ -0,0 +1,151 @@ +pub async fn handle_buy_and_sell_logic( + txn: &ConfirmedTransactionWithStatusMeta, + sell_sender: &Sender<(String, u64)>, +) { + let logger = Logger::new("[BUY/SELL LOGIC] => ".to_string()); + let our_pubkey = env::var("WALLET_PUBKEY").unwrap_or_default(); + let min_inflow: f64 = env::var("MIN_SOL_INFLOW_TRIGGER").unwrap_or("0.5".to_string()).parse().unwrap_or(0.5); + let min_outflow: f64 = env::var("MIN_SOL_OUTFLOW_TRIGGER").unwrap_or("0.5".to_string()).parse().unwrap_or(0.5); + + // Extract our on-chain slot for comparisons + let current_slot = CURRENT_SLOT.load(std::sync::atomic::Ordering::Relaxed); + + let TransactionWithStatusMeta::Complete(vtx) = &txn.tx_with_meta else { return }; + let Some(post_balances) = &vtx.meta.post_token_balances else { return }; + let Some(pre_balances) = &vtx.meta.pre_token_balances else { return }; + + let mut tokens = BOUGHT_TOKENS.lock().await; + + for (i, post_tb) in post_balances.iter().enumerate() { + if i >= pre_balances.len() { continue; } + + let pre_tb = &pre_balances[i]; + let mint = &post_tb.mint; + let owner = post_tb.owner.clone(); + let ata = post_tb.account_index.to_string(); + + let pre_amount = pre_tb.ui_token_amount.ui_amount.unwrap_or(0.0); + let post_amount = post_tb.ui_token_amount.ui_amount.unwrap_or(0.0); + let delta = post_amount - pre_amount; + + if let Some(entry) = tokens.get_mut(mint) { + if entry.buy_slot() == 0 { + continue; + } + if entry.sell_triggered_at().is_some() { + continue; + } + + let is_from_our_ata = Some(ata.clone()) == entry.ata().cloned(); + let is_owner_ours = owner == our_pubkey; + + + // Time to slot delta instead of wall-clock + let slot_delta = current_slot.saturating_sub(entry.buy_slot()); + + if delta > 0.0 && !is_owner_ours && !is_from_our_ata { + if entry.add_unique_buyer(owner.clone()) { + logger.log(format!( + "🧍 Unique buyer for {}: {} | Total: {}", + mint, + owner, + entry.unique_buyers().len() + )); + + if entry.unique_buyers().len() == 1 && entry.suspected_creator().is_none() { + entry.set_suspected_creator(owner.clone()); + info!("{}", format!("🧠 Suspected creator flagged: {} on {}", owner, mint)); + } + } + + // Early rug detection: <2 buyers after X slots + if entry.unique_buyers().len() < 10 && slot_delta > 12 { + entry.set_sell_triggered(true); + entry.set_sell_triggered_at(Instant::now()); + info!("{}", format!("🛑 Rug suspected — Forcing sell on {} after {} slots", mint, slot_delta)); + if sell_sender.send((mint.clone(), entry.amount())).await.is_ok() { + info!("{}", format!("📤 Sell sent for {}", mint)); + } + continue; + } + + // Exhausted follow-ups + if entry.unique_buyers().len() >= 5 { + entry.set_sell_triggered(true); + entry.set_sell_triggered_at(Instant::now()); + info!("{}", format!("📉 Follow-up exhaustion — Selling {} after 3 buyers", mint)); + if sell_sender.send((mint.clone(), entry.amount())).await.is_ok() { + info!("{}", format!("📤 Sell sent for {}", mint)); + } + continue; + } + + } + + // SOL inflow/outflow logic (unchanged) + if let Ok(pid) = Pubkey::from_str(PUMP_PROGRAM) { + if let Ok(bonding_curve) = get_pda(&Pubkey::from_str(mint).unwrap(), &pid) { + let message = &vtx.transaction.message; + let mut keys = match message { + VersionedMessage::Legacy(m) => m.account_keys.clone(), + VersionedMessage::V0(v0) => { + let mut k = v0.account_keys.clone(); + k.extend(vtx.meta.loaded_addresses.writable.clone()); + k.extend(vtx.meta.loaded_addresses.readonly.clone()); + k + } + }; + if let Some(idx) = keys.iter().position(|k| k == &bonding_curve) { + let pre_sol = vtx.meta.pre_balances[idx]; + let post_sol = vtx.meta.post_balances[idx]; + let delta_sol = (post_sol as i64 - pre_sol as i64) as f64 / 1e9; + logger.log(format!( + "🔍 Mint: {} | ΔSOL: {:.6} | Slot: {}", mint, delta_sol, txn.slot + )); + + if delta_sol > 0.0 { + entry.add_sol_inflow(delta_sol); + } else if delta_sol < 0.0 { + entry.add_sol_outflow(-delta_sol); + if slot_delta <= 1 { + entry.set_sell_triggered(true); + entry.set_sell_triggered_at(Instant::now()); + info!("{}", format!("💣 Early SOL drain! Fast sell on {}", mint)); + if sell_sender.send((mint.clone(), entry.amount())).await.is_ok() { + info!("{}", format!("📤 Sell sent for {}", mint)); + } + continue; + } + } + + if delta_sol < -min_outflow { + entry.set_sell_triggered(true); + entry.set_sell_triggered_at(Instant::now()); + info!("{}", format!("💣 Outflow sell on {} | ΔSOL: {:.6}", mint, delta_sol)); + if sell_sender.send((mint.clone(), entry.amount())).await.is_ok() { + info!("{}", format!("📤 Sell sent for {}", mint)); + } + continue; + } + + if entry.sol_inflow() >= min_inflow { + entry.set_sell_triggered(true); + entry.set_sell_triggered_at(Instant::now()); + info!("{}", format!("🚀 Inflow sell on {} | Total {:.6} SOL", mint, entry.sol_inflow())); + let mint_c = mint.clone(); let amt = entry.amount(); let tx_s = sell_sender.clone(); + let target_slot = current_slot + 1; + tokio::spawn(async move { + while CURRENT_SLOT.load(Ordering::Relaxed) < target_slot { + tokio::time::sleep(Duration::from_millis(10)).await; + } + if tx_s.send((mint_c.clone(), amt)).await.is_ok() { + info!("📤 Delayed sell sent for {}", mint_c); + } + }); + } + } + } + } + } + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/instruction_account_mapper.rs b/#_sniper (Rust) using jito Shred stream/src/instruction_account_mapper.rs new file mode 100644 index 0000000..bb62b2c --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/instruction_account_mapper.rs @@ -0,0 +1,81 @@ +use crate::serialization::serialize_pubkey; +use serde::{Deserialize, Serialize}; +use solana_program::{program_error::ProgramError, pubkey::Pubkey}; +use solana_sdk::instruction::AccountMeta; + +#[derive(Deserialize)] +struct IdlInstruction { + name: String, + accounts: Vec, +} + +#[derive(Deserialize)] +struct IdlAccount { + name: String, + #[serde(rename = "isMut")] + is_mut: bool, + #[serde(rename = "isSigner")] + is_signer: bool, +} + +#[derive(Deserialize)] +pub struct Idl { + instructions: Vec, +} + +#[derive(Debug, Serialize)] +pub struct AccountMetadata { + #[serde(serialize_with = "serialize_pubkey")] + pub pubkey: Pubkey, + pub is_writable: bool, + pub is_signer: bool, + pub name: String, +} + +pub trait InstructionAccountMapper<'info> { + fn map_accounts<'me>( + &self, + accounts: &[AccountMeta], + instruction_name: &str, + ) -> Result, ProgramError>; +} + +impl<'info> InstructionAccountMapper<'info> for Idl { + fn map_accounts<'me>( + &self, + accounts: &[AccountMeta], + instruction_name: &str, + ) -> Result, ProgramError> { + let instruction = self + .instructions + .iter() + .find(|ix| ix.name == instruction_name) + .ok_or(ProgramError::InvalidArgument)?; + + let mut account_metadata: Vec = accounts + .iter() + .take(instruction.accounts.len()) + .enumerate() + .map(|(i, account)| { + let account_info = &instruction.accounts[i]; + AccountMetadata { + pubkey: account.pubkey, + is_writable: account_info.is_mut, + is_signer: account_info.is_signer, + name: account_info.name.clone(), + } + }) + .collect(); + + for (i, account) in accounts.iter().enumerate().skip(instruction.accounts.len()) { + account_metadata.push(AccountMetadata { + pubkey: account.pubkey, + is_writable: account.is_writable, + is_signer: account.is_signer, + name: format!("Remaining accounts {}", i - instruction.accounts.len() + 1), + }); + } + + Ok(account_metadata) + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/latency_test.rs b/#_sniper (Rust) using jito Shred stream/src/latency_test.rs new file mode 100644 index 0000000..5573fa0 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/latency_test.rs @@ -0,0 +1,3 @@ +pub fn run_latency(block_time_a : i64, block_time_b: i64) -> i64 { + block_time_a - block_time_b +} \ No newline at end of file diff --git a/#_sniper (Rust) using jito Shred stream/src/latest_block.rs b/#_sniper (Rust) using jito Shred stream/src/latest_block.rs new file mode 100644 index 0000000..6f66823 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/latest_block.rs @@ -0,0 +1,14 @@ +use solana_client::rpc_client::RpcClient; +use solana_client::client_error::ClientError; +use anyhow::Context; + + +const API_KEY: &str = "api_key"; + +pub fn get_latest_slot() -> anyhow::Result { + let rpc_url = format!("https://rpc.va.shyft.to?api_key={}", API_KEY); + + let client = RpcClient::new(rpc_url); + + client.get_slot().context("Failed to fetch latest slot") +} diff --git a/#_sniper (Rust) using jito Shred stream/src/lib.rs b/#_sniper (Rust) using jito Shred stream/src/lib.rs new file mode 100644 index 0000000..c8146b5 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/lib.rs @@ -0,0 +1,9 @@ +pub mod common; +pub mod core; +pub mod dex; +pub mod engine; +pub mod services; +pub mod trading_loop; + +pub use trading_loop::get_notify_handle; +pub use trading_loop::start_trading_loop; diff --git a/#_sniper (Rust) using jito Shred stream/src/logger.rs b/#_sniper (Rust) using jito Shred stream/src/logger.rs new file mode 100644 index 0000000..4d6b3e6 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/logger.rs @@ -0,0 +1,90 @@ +use chrono::Local; +use serde_json::json; +use std::{ + fs::OpenOptions, + io::Write, + sync::{Arc, Mutex}, +}; + +const LOG_LEVEL: &str = "LOG"; + +#[derive(Clone)] +pub struct Logger { + prefix: String, + date_format: String, + file: Arc>, +} + +impl Logger { + // Constructor to create a new logger that writes to "logs.json" + pub fn new(prefix: String) -> Self { + let file = OpenOptions::new() + .create(true) + .append(true) + .open("detectionlogs.json") + .expect("Failed to open logs.json for writing"); + + Logger { + prefix, + date_format: String::from("%Y-%m-%d %H:%M:%S"), + file: Arc::new(Mutex::new(file)), + } + } + + pub fn log(&self, message: String) -> String { + let full_log = format!("{} {}", self.prefix_with_date(), message); + println!("{}", full_log); + self.write_json("INFO", &message); + full_log + } + + pub fn debug(&self, message: String) -> String { + let full_log = format!("{} [{}] {}", self.prefix_with_date(), "DEBUG", message); + if LogLevel::new().is_debug() { + println!("{}", full_log); + self.write_json("DEBUG", &message); + } + full_log + } + + pub fn error(&self, message: String) -> String { + let full_log = format!("{} [{}] {}", self.prefix_with_date(), "ERROR", message); + println!("{}", full_log); + self.write_json("ERROR", &message); + full_log + } + + fn prefix_with_date(&self) -> String { + let date = Local::now(); + format!("[{}] {}", date.format(&self.date_format), self.prefix) + } + + fn write_json(&self, level: &str, message: &str) { + let now = Local::now(); + let entry = json!({ + "timestamp": now.to_rfc3339(), + "level": level, + "prefix": self.prefix, + "message": message, + }); + + if let Ok(mut file) = self.file.lock() { + if let Err(e) = writeln!(file, "{}", entry) { + eprintln!("Failed to write to log file: {}", e); + } + } + } +} + +struct LogLevel<'a> { + level: &'a str, +} +impl LogLevel<'_> { + fn new() -> Self { + LogLevel { level: LOG_LEVEL } + } + + fn is_debug(&self) -> bool { + self.level.to_lowercase() == "debug" + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/secondbuy.rs b/#_sniper (Rust) using jito Shred stream/src/secondbuy.rs new file mode 100644 index 0000000..cb7b7c2 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/secondbuy.rs @@ -0,0 +1,157 @@ +#[derive(Debug, Clone, Copy)] +pub enum DetectionStrategy { + TokenCreation, + FirstBuy, + SuspectedCreatorSell, +} + + +pub async fn handle_detection_event( + txn: &ConfirmedTransactionWithStatusMeta, + slot: u64, + strategy: DetectionStrategy, + mint_override: Option, // Only used for creation strategy +) { + match strategy { + DetectionStrategy::TokenCreation => { + if let Some(mint) = mint_override { + let creation_time = current_unix_timestamp(); + let mut creations = TOKEN_CREATIONS.lock().await; + creations.insert(mint.clone(), TokenCreationInfo { + mint, + creation_time, + }); + } + } + + DetectionStrategy::FirstBuy => { + if TOKEN_CREATIONS.lock().await.is_empty() { + return; + } + + if let TransactionWithStatusMeta::Complete(versioned_tx_with_meta) = &txn.tx_with_meta { + if let (Some(pre_token_balances), Some(post_token_balances)) = + (&versioned_tx_with_meta.meta.pre_token_balances, &versioned_tx_with_meta.meta.post_token_balances) + { + for (i, post_tb) in post_token_balances.iter().enumerate() { + if let Some(post_ui) = post_tb.ui_token_amount.ui_amount { + if i >= pre_token_balances.len() { continue; } + + let pre_tb = &pre_token_balances[i]; + if let Some(pre_ui) = pre_tb.ui_token_amount.ui_amount { + let delta = post_ui - pre_ui; + if delta >= 0.0 { continue; } + + let buy_amount = -delta; + let mint = pre_tb.mint.clone(); + let buyer = pre_tb.owner.clone(); + + const DEFAULT_TOTAL_SUPPLY: f64 = SUPPLY_THRESHOLD_UI; + const MIN_BUY_FRACTION: f64 = 0.000001; + const MAX_BUY_FRACTION: f64 = 0.10; + + if pre_ui < DEFAULT_TOTAL_SUPPLY * 0.98 { continue; } + if buy_amount < DEFAULT_TOTAL_SUPPLY * MIN_BUY_FRACTION + || buy_amount > DEFAULT_TOTAL_SUPPLY * MAX_BUY_FRACTION + { + continue; + } + + let mut creations = TOKEN_CREATIONS.lock().await; + if !creations.contains_key(&mint) { + println!("[EVENT] No creation event for {}; skipping first buy.", mint); + continue; + } + + creations.remove(&mint); + drop(creations); + + let mut map = TRACKED_TOKENS.lock().await; + if let Some(entry) = map.get_mut(&mint) { + if entry.suspected_creators.insert(buyer.clone()) { + entry.sell_split_ratio = entry.suspected_creators.len(); + println!( + "[FOLLOW-UP CREATOR] Mint: {} | New suspected creator: {} | Total creators: {}", + mint, buyer, entry.sell_split_ratio + ); + } + } else { + let mut suspected = HashSet::new(); + suspected.insert(buyer.clone()); + + map.insert(mint.clone(), TokenTrackingState { + mint: mint.clone(), + first_buyer: Some(buyer.clone()), + first_buy_amount: buy_amount, + suspected_creators: suspected, + sell_detected: false, + sell_split_ratio: 0, + has_bought: false, + bought_amount: None, + has_sold: false, + open_trade_permit: None, + detected_buy_slot: Some(slot), + }); + + println!("[NEW TOKEN TRACKED] Mint: {} | First Buyer: {} | Buy Amount: {} | Slot: {}", + mint, buyer, buy_amount, slot); + log::info!("New token tracked: {} bought by {}", mint, buyer); + + let notify = get_notify_handle().await; + notify.notify_one(); + } + } + } + } + } + } + } + + DetectionStrategy::SuspectedCreatorSell => { + if let TransactionWithStatusMeta::Complete(versioned_tx_with_meta) = &txn.tx_with_meta { + if let (Some(pre_token_balances), Some(post_token_balances)) = + (&versioned_tx_with_meta.meta.pre_token_balances, &versioned_tx_with_meta.meta.post_token_balances) + { + for (i, post_tb) in post_token_balances.iter().enumerate() { + if let Some(post_ui) = post_tb.ui_token_amount.ui_amount { + if i < pre_token_balances.len() { + let pre_tb = &pre_token_balances[i]; + if let Some(pre_ui) = pre_tb.ui_token_amount.ui_amount { + let delta = post_ui - pre_ui; + if delta >= 0.0 { continue; } + + let mint = pre_tb.mint.clone(); + let seller = pre_tb.owner.clone(); + + let mut map = TRACKED_TOKENS.lock().await; + if let Some(entry) = map.get_mut(&mint) { + if !entry.has_bought || entry.bought_amount.unwrap_or(0) == 0 { + log::info!( + "[SELL IGNORED] Mint {}: Suspected creator {} sold but we haven't bought yet", + mint, seller + ); + return; + } + + if entry.suspected_creators.contains(&seller) && !entry.sell_detected { + entry.sell_detected = true; + entry.sell_split_ratio = entry.suspected_creators.len(); + + log::info!( + "[SELL DETECTED] Mint {}: Seller {} triggered sell | Total suspected creators: {}", + mint, seller, entry.sell_split_ratio + ); + + let notify = get_notify_handle().await; + notify.notify_one(); + } + } + } + } + } + } + } + } + } + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/serialization.rs b/#_sniper (Rust) using jito Shred stream/src/serialization.rs new file mode 100644 index 0000000..94c1f30 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/serialization.rs @@ -0,0 +1,18 @@ +use solana_sdk::pubkey::Pubkey; + +pub fn serialize_pubkey(value: &Pubkey, serializer: S) -> Result +where + S: serde::Serializer, +{ + serializer.serialize_str(&value.to_string()) +} + +pub fn serialize_option_pubkey(value: &Option, serializer: S) -> Result +where + S: serde::Serializer, +{ + match value { + Some(pubkey) => serializer.serialize_str(&pubkey.to_string()), + None => serializer.serialize_none(), + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/services/jito.rs b/#_sniper (Rust) using jito Shred stream/src/services/jito.rs new file mode 100644 index 0000000..1dd33e2 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/services/jito.rs @@ -0,0 +1,180 @@ +use std::{future::Future, str::FromStr, sync::LazyLock, time::Duration}; + +use anyhow::{anyhow, Result}; +use indicatif::{ProgressBar, ProgressStyle}; +use rand::{seq::IteratorRandom, thread_rng}; +use serde::Deserialize; +use serde_json::Value; +use solana_sdk::pubkey::Pubkey; +use tokio::{ + sync::RwLock, + time::{sleep, Instant}, +}; + +use crate::common::utils::import_env_var; + +pub static BLOCK_ENGINE_URL: LazyLock = + LazyLock::new(|| import_env_var("JITO_BLOCK_ENGINE_URL")); +pub static TIP_STREAM_URL: LazyLock = + LazyLock::new(|| import_env_var("JITO_TIP_STREAM_URL")); +pub static TIP_PERCENTILE: LazyLock = + LazyLock::new(|| import_env_var("JITO_TIP_PERCENTILE")); + +pub static TIP_ACCOUNTS: LazyLock>> = LazyLock::new(|| RwLock::new(vec![])); + +#[derive(Debug)] +pub struct TipAccountResult { + pub accounts: Vec, +} + +pub async fn init_tip_accounts() -> Result<()> { + let accounts = TipAccountResult { + accounts: vec![ + "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5".to_string(), + "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe".to_string(), + "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY".to_string(), + "ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49".to_string(), + "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh".to_string(), + "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt".to_string(), + "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL".to_string(), + "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT".to_string(), + ], + }; + let mut tip_accounts = TIP_ACCOUNTS.write().await; + + accounts + .accounts + .iter() + .for_each(|account| tip_accounts.push(account.to_string())); + Ok(()) +} + +pub async fn get_tip_account() -> Result { + let accounts = TIP_ACCOUNTS.read().await; + let mut rng = thread_rng(); + match accounts.iter().choose(&mut rng) { + Some(acc) => Ok(Pubkey::from_str(acc).inspect_err(|err| { + println!("jito: failed to parse Pubkey: {:?}", err); + })?), + None => Err(anyhow!("jito: no tip accounts available")), + } +} +// unit sol +pub async fn get_tip_value() -> Result { + // If TIP_VALUE is set, use it + if let Ok(tip_value) = std::env::var("JITO_TIP_VALUE") { + match f64::from_str(&tip_value) { + Ok(value) => Ok(value), + Err(_) => { + println!( + "Invalid JITO_TIP_VALUE in environment variable: '{}'. Falling back to percentile calculation.", + tip_value + ); + Err(anyhow!("Invalid TIP_VALUE in environment variable")) + } + } + } else { + Err(anyhow!("JITO_TIP_VALUE environment variable not set")) + } +} + +pub async fn fetch_bundle_status(bundle_id: String) -> Result> { + // Example implementation using reqwest: + use reqwest::Client; + let url = format!( + "{}/bundle/{}", + crate::common::utils::import_env_var("JITO_BLOCK_ENGINE_URL"), + bundle_id + ); + let client = Client::new(); + let resp = client.get(&url).send().await?; + let json: Vec = resp.json().await?; + Ok(json) +} + +#[derive(Deserialize, Debug)] +pub struct BundleStatus { + pub bundle_id: String, + pub transactions: Vec, + pub slot: u64, + pub confirmation_status: String, + pub err: ErrorStatus, +} + +#[derive(Deserialize, Debug)] +pub struct ErrorStatus { + #[serde(rename = "Ok")] + pub ok: Option<()>, +} + +pub async fn wait_for_bundle_confirmation( + fetch_statuses: F, + bundle_id: String, + interval: Duration, + timeout: Duration, +) -> Result> +where + F: Fn(String) -> Fut, + Fut: Future>>, +{ + let progress_bar = new_progress_bar(); + let start_time = Instant::now(); + + loop { + let statuses = fetch_statuses(bundle_id.clone()).await?; + + if let Some(status) = statuses.first() { + let bundle_status: BundleStatus = + serde_json::from_value(status.clone()).inspect_err(|err| { + println!( + "Failed to parse JSON when get_bundle_statuses, err: {}", + err, + ); + })?; + + println!("{:?}", bundle_status); + match bundle_status.confirmation_status.as_str() { + "finalized" | "confirmed" => { + progress_bar.finish_and_clear(); + println!( + "Finalized bundle {}: {}", + bundle_id, bundle_status.confirmation_status + ); + // print tx + bundle_status + .transactions + .iter() + .for_each(|tx| println!("https://solscan.io/tx/{}", tx)); + return Ok(bundle_status.transactions); + } + _ => { + progress_bar.set_message(format!( + "Finalizing bundle {}: {}", + bundle_id, bundle_status.confirmation_status + )); + } + } + } else { + progress_bar.set_message(format!("Finalizing bundle {}: {}", bundle_id, "None")); + } + + // check loop exceeded 1 minute, + if start_time.elapsed() > timeout { + println!("Loop exceeded {:?}, breaking out.", timeout); + return Err(anyhow!("Bundle status get timeout")); + } + + // Wait for a certain duration before retrying + sleep(interval).await; + } +} +pub fn new_progress_bar() -> ProgressBar { + let progress_bar = ProgressBar::new(42); + progress_bar.set_style( + ProgressStyle::default_spinner() + .template("{spinner:.green} {wide_msg}") + .expect("ProgressStyle::template direct input to be correct"), + ); + progress_bar.enable_steady_tick(Duration::from_millis(100)); + progress_bar +} diff --git a/#_sniper (Rust) using jito Shred stream/src/services/mod.rs b/#_sniper (Rust) using jito Shred stream/src/services/mod.rs new file mode 100644 index 0000000..d9b889c --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/services/mod.rs @@ -0,0 +1,3 @@ +pub mod jito; +pub mod nextblock; +pub mod zeroslot; diff --git a/#_sniper (Rust) using jito Shred stream/src/services/nextblock.rs b/#_sniper (Rust) using jito Shred stream/src/services/nextblock.rs new file mode 100644 index 0000000..7e32956 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/services/nextblock.rs @@ -0,0 +1,75 @@ +use anyhow::{anyhow, Result}; +use rand::{seq::IteratorRandom, thread_rng}; +use solana_sdk::pubkey::Pubkey; +use std::{str::FromStr, sync::LazyLock}; +use tokio::sync::RwLock; + +use crate::common::utils::import_env_var; + +// Endpoint and auth token from env +pub static NEXTBLOCK_API_URL: LazyLock = + LazyLock::new(|| import_env_var("NEXTBLOCK_API_URL")); +pub static NEXTBLOCK_AUTH_HEADER: LazyLock = + LazyLock::new(|| import_env_var("NEXTBLOCK_AUTH_HEADER")); +pub static NEXTBLOCK_TIP_VALUE: LazyLock = + LazyLock::new(|| import_env_var("NEXTBLOCK_TIP_VALUE")); + +// List of hardcoded tip accounts +pub static TIP_ACCOUNTS: LazyLock>> = LazyLock::new(|| RwLock::new(vec![])); + +#[derive(Debug)] +pub struct TipAccountResult { + pub accounts: Vec, +} + +pub async fn init_tip_accounts() -> Result<()> { + let accounts = TipAccountResult { + accounts: vec![ + "NextbLoCkVtMGcV47JzewQdvBpLqT9TxQFozQkN98pE".to_string(), + "NexTbLoCkWykbLuB1NkjXgFWkX9oAtcoagQegygXXA2".to_string(), + "NeXTBLoCKs9F1y5PJS9CKrFNNLU1keHW71rfh7KgA1X".to_string(), + "NexTBLockJYZ7QD7p2byrUa6df8ndV2WSd8GkbWqfbb".to_string(), + "neXtBLock1LeC67jYd1QdAa32kbVeubsfPNTJC1V5At".to_string(), + "nEXTBLockYgngeRmRrjDV31mGSekVPqZoMGhQEZtPVG".to_string(), + "NEXTbLoCkB51HpLBLojQfpyVAMorm3zzKg7w9NFdqid".to_string(), + "nextBLoCkPMgmG8ZgJtABeScP35qLa2AMCNKntAP7Xc".to_string(), + ], + }; + let mut tip_accounts = TIP_ACCOUNTS.write().await; + + accounts + .accounts + .iter() + .for_each(|account| tip_accounts.push(account.to_string())); + Ok(()) +} + +pub async fn get_tip_account() -> Result { + let accounts = TIP_ACCOUNTS.read().await; + let mut rng = thread_rng(); + match accounts.iter().choose(&mut rng) { + Some(acc) => Ok(Pubkey::from_str(acc).inspect_err(|err| { + println!("nextblock: failed to parse Pubkey: {:?}", err); + })?), + None => Err(anyhow!("nextblock: no tip accounts available")), + } +} + +// unit sol +pub async fn get_tip_value() -> Result { + // If TIP_VALUE is set, use it + if let Ok(tip_value) = std::env::var("NEXTBLOCK_TIP_VALUE") { + match f64::from_str(&tip_value) { + Ok(value) => Ok(value), + Err(_) => { + println!( + "Invalid NEXTBLOCK_TIP_VALUE in environment variable: '{}'. Falling back to percentile calculation.", + tip_value + ); + Err(anyhow!("Invalid TIP_VALUE in environment variable")) + } + } + } else { + Err(anyhow!("NEXTBLOCK_TIP_VALUE environment variable not set")) + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/services/zeroslot.rs b/#_sniper (Rust) using jito Shred stream/src/services/zeroslot.rs new file mode 100644 index 0000000..1f70b02 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/services/zeroslot.rs @@ -0,0 +1,179 @@ +use std::{future::Future, str::FromStr, sync::LazyLock, time::Duration}; + +use anyhow::{anyhow, Result}; +use indicatif::{ProgressBar, ProgressStyle}; +use rand::{seq::IteratorRandom, thread_rng}; +use serde::Deserialize; +use serde_json::Value; +use solana_sdk::pubkey::Pubkey; +use tokio::{ + sync::RwLock, + time::{sleep, Instant}, +}; + +use crate::common::utils::import_env_var; + +pub static BLOCK_ENGINE_URL: LazyLock = + LazyLock::new(|| import_env_var("ZEROSLOT_BLOCK_ENGINE_URL")); +pub static TIP_STREAM_URL: LazyLock = + LazyLock::new(|| import_env_var("ZEROSLOT_TIP_STREAM_URL")); +pub static TIP_PERCENTILE: LazyLock = + LazyLock::new(|| import_env_var("ZEROSLOT_TIP_PERCENTILE")); + +pub static TIP_ACCOUNTS: LazyLock>> = LazyLock::new(|| RwLock::new(vec![])); + +#[derive(Debug)] +pub struct TipAccountResult { + pub accounts: Vec, +} + +pub async fn init_tip_accounts() -> Result<()> { + let accounts = TipAccountResult { + accounts: vec![ + "Eb2KpSC8uMt9GmzyAEm5Eb1AAAgTjRaXWFjKyFXHZxF3".to_string(), + "FCjUJZ1qozm1e8romw216qyfQMaaWKxWsuySnumVCCNe".to_string(), + "ENxTEjSQ1YabmUpXAdCgevnHQ9MHdLv8tzFiuiYJqa13".to_string(), + "6rYLG55Q9RpsPGvqdPNJs4z5WTxJVatMB8zV3WJhs5EK".to_string(), + "Cix2bHfqPcKcM233mzxbLk14kSggUUiz2A87fJtGivXr".to_string(), + ], + }; + let mut tip_accounts = TIP_ACCOUNTS.write().await; + + accounts + .accounts + .iter() + .for_each(|account| tip_accounts.push(account.to_string())); + Ok(()) +} + +pub async fn get_tip_account() -> Result { + let accounts = TIP_ACCOUNTS.read().await; + let mut rng = thread_rng(); + match accounts.iter().choose(&mut rng) { + Some(acc) => Ok(Pubkey::from_str(acc).inspect_err(|err| { + println!("jito: failed to parse Pubkey: {:?}", err); + })?), + None => Err(anyhow!("jito: no tip accounts available")), + } +} +// unit sol +pub async fn get_tip_value() -> Result { + // If TIP_VALUE is set, use it + if let Ok(tip_value) = std::env::var("ZEROSLOT_TIP_VALUE") { + match f64::from_str(&tip_value) { + Ok(value) => Ok(value), + Err(_) => { + println!( + "Invalid ZEROSLOT_TIP_VALUE in environment variable: '{}'. Falling back to percentile calculation.", + tip_value + ); + Err(anyhow!( + "Invalid ZEROSLOT_TIP_VALUE in environment variable" + )) + } + } + } else { + Err(anyhow!("ZEROSLOT_TIP_VALUE environment variable not set")) + } +} + +pub async fn fetch_bundle_status(bundle_id: String) -> Result> { + // Example implementation using reqwest: + use reqwest::Client; + let url = format!( + "{}/bundle/{}", + crate::common::utils::import_env_var("JITO_BLOCK_ENGINE_URL"), + bundle_id + ); + let client = Client::new(); + let resp = client.get(&url).send().await?; + let json: Vec = resp.json().await?; + Ok(json) +} + +#[derive(Deserialize, Debug)] +pub struct BundleStatus { + pub bundle_id: String, + pub transactions: Vec, + pub slot: u64, + pub confirmation_status: String, + pub err: ErrorStatus, +} + +#[derive(Deserialize, Debug)] +pub struct ErrorStatus { + #[serde(rename = "Ok")] + pub ok: Option<()>, +} + +pub async fn wait_for_bundle_confirmation( + fetch_statuses: F, + bundle_id: String, + interval: Duration, + timeout: Duration, +) -> Result> +where + F: Fn(String) -> Fut, + Fut: Future>>, +{ + let progress_bar = new_progress_bar(); + let start_time = Instant::now(); + + loop { + let statuses = fetch_statuses(bundle_id.clone()).await?; + + if let Some(status) = statuses.first() { + let bundle_status: BundleStatus = + serde_json::from_value(status.clone()).inspect_err(|err| { + println!( + "Failed to parse JSON when get_bundle_statuses, err: {}", + err, + ); + })?; + + println!("{:?}", bundle_status); + match bundle_status.confirmation_status.as_str() { + "finalized" | "confirmed" => { + progress_bar.finish_and_clear(); + println!( + "Finalized bundle {}: {}", + bundle_id, bundle_status.confirmation_status + ); + // print tx + bundle_status + .transactions + .iter() + .for_each(|tx| println!("https://solscan.io/tx/{}", tx)); + return Ok(bundle_status.transactions); + } + _ => { + progress_bar.set_message(format!( + "Finalizing bundle {}: {}", + bundle_id, bundle_status.confirmation_status + )); + } + } + } else { + progress_bar.set_message(format!("Finalizing bundle {}: {}", bundle_id, "None")); + } + + // check loop exceeded 1 minute, + if start_time.elapsed() > timeout { + println!("Loop exceeded {:?}, breaking out.", timeout); + return Err(anyhow!("Bundle status get timeout")); + } + + // Wait for a certain duration before retrying + sleep(interval).await; + } +} +pub fn new_progress_bar() -> ProgressBar { + let progress_bar = ProgressBar::new(42); + progress_bar.set_style( + ProgressStyle::default_spinner() + .template("{spinner:.green} {wide_msg}") + .expect("ProgressStyle::template direct input to be correct"), + ); + progress_bar.enable_steady_tick(Duration::from_millis(100)); + progress_bar +} diff --git a/#_sniper (Rust) using jito Shred stream/src/shred_stream.rs b/#_sniper (Rust) using jito Shred stream/src/shred_stream.rs new file mode 100644 index 0000000..9dcb0a1 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/shred_stream.rs @@ -0,0 +1,505 @@ +// src/shred_stream.rs +// Module to replace Geyser-based streams with Jito Shred-stream +use crate::apply_sol_flow_rules; +use crate::MIN_SOL_INFLOW_TRIGGER; +use crate::MIN_SOL_OUTFLOW_TRIGGER; +use crate::PENDING_MINTS; +use crate::PUMP_PROGRAM_PUBKEY; +use crate::{flatten_transaction_response, try_send_buy_if_allowed}; +use anyhow::Context; +use backoff::future::retry; +use backoff::ExponentialBackoff; +use jito_protos::shredstream::{ + shredstream_proxy_client::ShredstreamProxyClient, SubscribeEntriesRequest, +}; +use log::{debug, info, warn}; +use once_cell::sync::Lazy; +use pump_interface::PumpProgramIx; +use shared_state::CURRENT_SLOT; +use shared_state::{BuyOrder, SellOrder, BOUGHT_TOKENS}; +use solana_client::nonblocking::rpc_client::RpcClient; +use solana_entry::entry::Entry as SolanaEntry; +use solana_sdk::message::VersionedMessage; +use solana_sdk::pubkey::Pubkey; +use solana_sdk::transaction::VersionedTransaction; +use solana_transaction_status::{ + ConfirmedTransactionWithStatusMeta, TransactionStatusMeta, TransactionWithStatusMeta, + VersionedTransactionWithStatusMeta, +}; +use std::collections::HashMap; +use std::str::FromStr; +use std::sync::atomic::Ordering; +use std::sync::atomic::Ordering::Relaxed; +use std::sync::Arc; +use std::time::{Duration, Instant}; +use tokio::sync::mpsc::Sender; +use tokio::sync::Mutex; +use tokio_stream::StreamExt; +const FALLBACK_SELL_AFTER_SLOTS: u64 = 50; + +struct MintTracker { + creator: Pubkey, + last_activity: Instant, + sol_inflow: f64, + sol_outflow: f64, + waiting_sw: bool, + silence_until: Instant, +} + +static MINT_TRACKERS: Lazy>> = + Lazy::new(|| Mutex::new(HashMap::new())); + +// Silence window duration before we begin listening for the "second wave" +static SILENCE_DURATION: Lazy = Lazy::new(|| { + let secs = std::env::var("SW_SILENCE_SECS").unwrap_or_else(|_| "60".into()); + Duration::from_secs(secs.parse().unwrap_or(60)) +}); + + +// at top of file, make sure you have: +static SECOND_WAVE_MODE: Lazy = Lazy::new(|| { + std::env::var("SECOND_WAVE_MODE").map(|v| v == "true").unwrap_or(false) +}); + + +/// Begin tracking a newly detected mint, recording its creator +/// and setting up the silence window before second‐wave sniping. +async fn start_tracking_mint(mint: String, creator: Pubkey) { + let now = Instant::now(); + let silence = *SILENCE_DURATION; // from your SW_SILENCE_SECS env + + let tracker = MintTracker { + creator, + last_activity: now, + sol_inflow: 0.0, + sol_outflow: 0.0, + waiting_sw: false, + silence_until: now + silence, + }; + + MINT_TRACKERS.lock().await.insert(mint, tracker); +} + +/// Subscribe to Jito shredstream and manage new‐mint sniping vs. second‐wave mode +pub async fn shred_subscribe_transactions( + url: String, + sell_sender: Sender, + mint_sender: Sender, +) -> anyhow::Result<()> { + let backoff = ExponentialBackoff::default(); + let mut client = retry(backoff, || async { + ShredstreamProxyClient::connect(url.clone()) + .await + .map_err(backoff::Error::transient) + }) + .await?; + + let mut stream = client + .subscribe_entries(SubscribeEntriesRequest::default()) + .await? + .into_inner(); + + while let Some(Ok(batch)) = stream.next().await { + let slot = batch.slot; + CURRENT_SLOT.store(slot, Ordering::Relaxed); + + let entries: Vec = bincode::deserialize(&batch.entries)?; + for sol_entry in entries { + for tx in sol_entry.transactions { + if let Some((mint, creator)) = detect_raw_create(&tx) { + info!("New mint {} @ slot {}", mint, slot); + + // Always start the silence‐window tracker + let mint_clone = mint.clone(); + tokio::spawn(async move { + start_tracking_mint(mint_clone, creator).await; + }); + + // Only fire the *immediate* new‐mint buy if NOT in second‐wave mode + if !*SECOND_WAVE_MODE { + try_send_buy_if_allowed( + &mint, + creator, + true, // first_buy + true, // urgent=false + &mint_sender, + ) + .await; + } + } + + // offload your reconcilers (flows, confirms, sells) + let sell_tx = sell_sender.clone(); + let mint_tx = mint_sender.clone(); + tokio::spawn(async move { + let confirmed = confirm_from_versioned(tx, slot); + reconcile_flows(&confirmed, &sell_tx, &mint_tx).await; + reconcile_buys(&confirmed, slot).await; + reconcile_sells(&confirmed, slot, &sell_tx).await; + }); + } + } + } + + Ok(()) +} +/// Update flows and trigger second-wave sniping, but only after our own buy has confirmed. +async fn reconcile_flows( + confirmed: &ConfirmedTransactionWithStatusMeta, + sell_sender: &Sender, + mint_sender: &Sender, +) { + // only complete transactions + let vtx = match &confirmed.tx_with_meta { + TransactionWithStatusMeta::Complete(v) => v, + _ => return, + }; + let now = Instant::now(); + + for tx_ix in flatten_transaction_response(vtx) { + // skip non-Pump instructions + if tx_ix.instruction.program_id != *PUMP_PROGRAM_PUBKEY { + continue; + } + let mint = tx_ix.instruction.accounts[2].pubkey.to_string(); + + // don’t start counting flows until our buy has landed + { + let tokens = BOUGHT_TOKENS.lock().await; + if tokens.get(&mint).map(|e| e.buy_slot()).unwrap_or(0) == 0 { + continue; + } + } + + if let Some(tracker) = MINT_TRACKERS.lock().await.get_mut(&mint) { + tracker.last_activity = now; + + if let Ok(ix) = PumpProgramIx::deserialize(&tx_ix.instruction.data) { + match ix { + PumpProgramIx::Buy(buy_args) => { + let sol_in = buy_args.max_sol_cost as f64 / 1e9; + tracker.sol_inflow += sol_in; + debug!("SOL inflow +{:.6} on {}", sol_in, mint); + + if tracker.waiting_sw { + info!("🚀 Second wave hit on {} → sniping", mint); + try_send_buy_if_allowed( + &mint, + tracker.creator, + true, + true, + mint_sender, + ).await; + tracker.waiting_sw = false; + } + } + PumpProgramIx::Sell(sell_args) => { + let sol_out = sell_args.min_sol_output as f64 / 1e9; + tracker.sol_outflow += sol_out; + debug!("SOL outflow +{:.6} on {}", sol_out, mint); + } + _ => {} + } + } + + if !tracker.waiting_sw && now >= tracker.silence_until { + tracker.waiting_sw = true; + info!("⏱ {} entered second-wave watch mode", mint); + } + } + } +} + +/// Confirm our buy, then reset that mint’s tracker so we only count SOL flows from now on. +async fn reconcile_buys( + confirmed: &ConfirmedTransactionWithStatusMeta, + slot: u64, +) { + // pull out on-chain signature (if any) + let sig_opt = match &confirmed.tx_with_meta { + TransactionWithStatusMeta::Complete(v) => v.transaction.signatures.get(0).cloned(), + _ => None, + }; + + if let Some(sig) = sig_opt { + let sig_str = sig.to_string(); + let mut tokens = BOUGHT_TOKENS.lock().await; + + // find our minted entry by matching its stored signature + if let Some((mint, entry)) = tokens + .iter_mut() + .find(|(_, e)| e.signature() == Some(&sig_str)) + { + // confirm the buy + entry.set_buy_slot(slot); + entry.set_buy_executed_at(Instant::now()); + PENDING_MINTS.fetch_sub(1, Ordering::Relaxed); + info!("✅ Confirmed BUY for {} @ slot {}", mint, slot); + + // re-arm second-wave tracker + if let Some(tracker) = MINT_TRACKERS.lock().await.get_mut(mint) { + let now = Instant::now(); + tracker.last_activity = now; + tracker.sol_inflow = 0.0; + tracker.sol_outflow = 0.0; + tracker.waiting_sw = false; + tracker.silence_until = now + *SILENCE_DURATION; + info!("🔄 Re-armed second-wave tracker for {}", mint); + } + } + } +} + + + +fn detect_raw_create(vtx: &VersionedTransaction) -> Option<(String, Pubkey)> { + let msg = &vtx.message; + let keys = msg.static_account_keys(); + debug!( + "🔑 static keys (len={}): {:?}", + keys.len(), + keys.iter().take(4).collect::>() + ); + + for instr in msg.instructions() { + let program_key = keys[instr.program_id_index as usize]; + if program_key == *PUMP_PROGRAM_PUBKEY { + debug!( + "🧩 Found PumpProgramIx at idx={} data_prefix={:02x?}", + instr.program_id_index, + &instr.data[..4.min(instr.data.len())] + ); + + match PumpProgramIx::deserialize(&instr.data) { + Ok(PumpProgramIx::Create(args)) => { + let mint_key = keys[instr.accounts[0] as usize]; + debug!("✅ Deserialized Create; mint = {}", mint_key); + return Some((mint_key.to_string(), args.creator)); + } + Ok(other) => { + debug!("ℹ️ Other PumpProgramIx::{:?}, skipping", other); + } + Err(e) => { + debug!("❌ deserialize error: {}", e); + } + } + } + } + + None +} + +/// Quickly wrap a VersionedTransaction in a ConfirmedTransactionWithStatusMeta +fn confirm_from_versioned( + tx: solana_sdk::transaction::VersionedTransaction, + slot: u64, +) -> ConfirmedTransactionWithStatusMeta { + // minimal meta with defaults: + let meta = TransactionStatusMeta { + status: Ok(()), + fee: 0, + pre_balances: vec![], + post_balances: vec![], + inner_instructions: None, + log_messages: None, + pre_token_balances: None, + post_token_balances: None, + rewards: None, + loaded_addresses: Default::default(), + return_data: None, + compute_units_consumed: None, + }; + + let vtx = VersionedTransactionWithStatusMeta { + transaction: tx, + meta, + }; + ConfirmedTransactionWithStatusMeta { + slot, + tx_with_meta: TransactionWithStatusMeta::Complete(vtx), + block_time: None, + } +} +/// Decode raw bytes and slot into ConfirmedTransactionWithStatusMeta +pub fn decode_txn_from_bytes( + raw: &[u8], + slot: u64, +) -> anyhow::Result { + use bincode; + use solana_sdk::transaction::VersionedTransaction; + use solana_transaction_status::TransactionStatusMeta; + + // 1. Deserialize the wire-format VersionedTransaction + let tx: VersionedTransaction = bincode::deserialize(raw) + .context("failed to deserialize VersionedTransaction from shred entry")?; + + // 2. Build a minimal TransactionStatusMeta with defaults + let meta = TransactionStatusMeta { + status: Ok(()), + fee: 0, + pre_balances: vec![], + post_balances: vec![], + inner_instructions: None, + log_messages: None, + pre_token_balances: None, + post_token_balances: None, + rewards: None, + loaded_addresses: Default::default(), + return_data: None, + compute_units_consumed: None, + }; + + // 3. Wrap into VersionedTransactionWithStatusMeta and then into ConfirmedTransactionWithStatusMeta + let vtx = VersionedTransactionWithStatusMeta { + transaction: tx, + meta, + }; + Ok(ConfirmedTransactionWithStatusMeta { + slot, + tx_with_meta: TransactionWithStatusMeta::Complete(vtx), + block_time: None, + }) +} + +const LOW_BUY_FREQ_WINDOW_SLOTS: u64 = 10; +const MIN_BUYS_IN_WINDOW: usize = 6; + +const BUY_CONFIRM_TIMEOUT_SECS: u64 = 60; + +const SELL_CONFIRM_TIMEOUT_SECS: u64 = 60; + +async fn reconcile_sells( + confirmed: &ConfirmedTransactionWithStatusMeta, + slot: u64, + sell_sender: &Sender, +) { + // --- 0) remove any entries that are already confirmed sells, just in case --- + { + let mut tokens = BOUGHT_TOKENS.lock().await; + let to_remove: Vec = tokens + .iter() + .filter_map(|(mint, entry)| { + if entry.sell_confirmed() { + Some(mint.clone()) + } else { + None + } + }) + .collect(); + for mint in to_remove { + tokens.remove(&mint); + } + } + + // 1) On-chain confirmations + if let Some(sig) = match &confirmed.tx_with_meta { + TransactionWithStatusMeta::Complete(v) => { + v.transaction.signatures.get(0).map(|s| s.to_string()) + } + _ => None, + } { + // find mint without holding a mutable borrow across removal + let mint_opt = { + let tokens = BOUGHT_TOKENS.lock().await; + tokens + .iter() + .find(|(_, e)| e.sell_signature().as_deref() == Some(&sig)) + .map(|(m, _)| m.clone()) + }; + + if let Some(mint) = mint_opt { + // confirm + slot in one lock + { + let mut tokens = BOUGHT_TOKENS.lock().await; + if let Some(entry) = tokens.get_mut(&mint) { + entry.confirm_sell(); + entry.set_sell_slot(slot); + } + // guard against underflow + if PENDING_MINTS.load(Relaxed) > 0 { + PENDING_MINTS.fetch_sub(1, Relaxed); + } + } + + // remove in a separate lock + { + let mut tokens = BOUGHT_TOKENS.lock().await; + tokens.remove(&mint); + } + + log::info!("✅ Confirmed SELL for {} @ slot {}", mint, slot); + return; + } + } + + // 2) retry logic + // build stale list under lock + let now = Instant::now(); + let timeout = Duration::from_secs(SELL_CONFIRM_TIMEOUT_SECS); + let stale: Vec = { + let tokens = BOUGHT_TOKENS.lock().await; + tokens + .iter() + .filter_map(|(mint, entry)| { + if entry.sell_signature().is_some() + && !entry.sell_confirmed() + && entry.retry_count() < 3 + && entry + .sell_executed_at() + .map(|t| now.duration_since(t) > timeout) + .unwrap_or(false) + { + Some(mint.clone()) + } else { + None + } + }) + .collect() + }; + + // drop lock, then re-send each stale sell + for mint in stale { + let mut tokens = BOUGHT_TOKENS.lock().await; + if let Some(entry) = tokens.get_mut(&mint) { + entry.increment_retry_count(); + log::info!( + "⌛ Sell for {} timed out; retry #{}, re-sending…", + mint, + entry.retry_count() + ); + let amount = entry.amount(); + let _ = sell_sender + .send(SellOrder { + mint: mint.clone(), + amount, + use_jito: true, + urgent: true, + }) + .await; + // record when we issued this retry + entry.set_sell_executed_at(Instant::now()); + } + } +} + +/// Find mint & creator from Create ix +fn extract_mint_and_creator( + confirmed: &ConfirmedTransactionWithStatusMeta, +) -> Option<(String, Pubkey)> { + if let TransactionWithStatusMeta::Complete(v) = &confirmed.tx_with_meta { + for tx_ix in flatten_transaction_response(v) { + if tx_ix.instruction.program_id == *crate::PUMP_PROGRAM_PUBKEY { + if let Ok(PumpProgramIx::Create(args)) = + PumpProgramIx::deserialize(&tx_ix.instruction.data) + { + // the very first account is the mint + if let Some(meta) = tx_ix.instruction.accounts.get(0) { + // return (mint_pubkey_string, creator_pubkey) + return Some((meta.pubkey.to_string(), args.creator)); + } + } + } + } + } + None +} diff --git a/#_sniper (Rust) using jito Shred stream/src/solana_helper.rs b/#_sniper (Rust) using jito Shred stream/src/solana_helper.rs new file mode 100644 index 0000000..0a87cb9 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/solana_helper.rs @@ -0,0 +1,179 @@ +// src/solana_helpers.rs + +use aes_gcm::{Aes256Gcm, Key, Nonce}; // Or `aes_gcm::Aes256Gcm` +use aes_gcm::aead::{Aead, NewAead}; +use base64::{encode as b64_encode, decode as b64_decode}; +use hex::decode as hex_decode; +use rand::RngCore; +use rand::rngs::OsRng; +use solana_sdk::signature::{Keypair, Signer}; +use solana_sdk::pubkey::Pubkey; +use bip39::{Mnemonic, Language, Seed}; +use anyhow::{Result, Context}; +use serde_json::Value; + +/// Load the AES-256 key from the environment variable `ENCRYPTION_KEY`. +/// The env var should be a hex-encoded 32-byte key (i.e., 64 hex chars). +fn load_encryption_key() -> Result<[u8; 32]> { + let hex = std::env::var("ENCRYPTION_KEY") + .context("ENCRYPTION_KEY env var not set")?; + let bytes = hex_decode(&hex) + .context("Failed to hex-decode ENCRYPTION_KEY")?; + if bytes.len() != 32 { + anyhow::bail!("ENCRYPTION_KEY must be 32 bytes (hex-encoded 64 chars)"); + } + let mut key = [0u8; 32]; + key.copy_from_slice(&bytes); + Ok(key) +} + +/// Encrypt `plaintext` using AES-256-GCM. Returns a base64 string containing nonce||ciphertext. +/// Format: base64( [12-byte nonce] || ciphertext ). +pub fn encrypt_data(plaintext: &str) -> Result { + let key_bytes = load_encryption_key()?; + let key = Key::from_slice(&key_bytes); + let cipher = Aes256Gcm::new(key); + + // Generate a random 12-byte nonce + let mut nonce_bytes = [0u8; 12]; + OsRng.fill_bytes(&mut nonce_bytes); + let nonce = Nonce::from_slice(&nonce_bytes); + + let ciphertext = cipher + .encrypt(nonce, plaintext.as_bytes()) + .context("Encryption failure")?; + + // Prepend nonce + let mut combined = Vec::with_capacity(12 + ciphertext.len()); + combined.extend_from_slice(&nonce_bytes); + combined.extend_from_slice(&ciphertext); + + Ok(b64_encode(&combined)) +} + +/// Decrypt a base64 string produced by `encrypt_data`, returning the plaintext. +pub fn decrypt_data(encoded: &str) -> Result { + let combined = b64_decode(encoded).context("Base64 decode failed")?; + if combined.len() < 12 { + anyhow::bail!("Ciphertext too short"); + } + let (nonce_bytes, ciphertext) = combined.split_at(12); + let key_bytes = load_encryption_key()?; + let key = Key::from_slice(&key_bytes); + let cipher = Aes256Gcm::new(key); + let nonce = Nonce::from_slice(nonce_bytes); + let plaintext = cipher + .decrypt(nonce, ciphertext) + .context("Decryption failure")?; + let s = String::from_utf8(plaintext).context("Decrypted data not valid UTF-8")?; + Ok(s) +} + +/// Derive Solana public address (Pubkey) from a JSON-array keypair string. +/// +/// # Arguments +/// - `json`: a JSON string representing an array of 64 or 32 or 64 u8 values, e.g. `[12,34, ...]`. +/// - If length is 64: interpreted as full keypair bytes. +/// - If length is 32: interpreted as secret seed, but Solana Keypair::from_bytes expects 64; you may need to expand. +/// +/// Returns the `Pubkey` as a base58 string. +pub fn derive_address_from_json_keypair(json: &str) -> Result { + // Parse JSON array + let v: Value = serde_json::from_str(json).context("Invalid JSON")?; + let arr = v.as_array().context("Expected JSON array")?; + // Convert to Vec + let bytes: Vec = arr.iter() + .map(|val| { + val.as_u64() + .and_then(|n| Some(n as u8)) + .ok_or_else(|| anyhow::anyhow!("Invalid byte in array")) + }) + .collect::, _>>()?; + + // Depending on length: + let kp = if bytes.len() == 64 { + Keypair::from_bytes(&bytes).context("Failed to parse keypair from bytes")? + } else if bytes.len() == 32 { + // interpret as secret seed: expand to keypair via `from_seed` + // Note: solana_sdk::signature::Keypair::from_seed requires `Signer` trait; but no direct from_seed in stable. + // We can use ed25519_dalek to expand, then wrap in Keypair. + // Solana Keypair::from_seed is nightly; instead: + // Use solana_sdk::signature::Keypair::from_seed (requires "ed25519-dalek" feature) + Keypair::from_seed(&bytes).context("Failed to derive keypair from 32-byte seed")? + } else { + anyhow::bail!("Keypair JSON must be 32 or 64 bytes"); + }; + + let pubkey = kp.pubkey(); + Ok(pubkey.to_string()) +} + +/// Derive Solana public address from a base58-encoded secret key (64-byte) string. +/// E.g., if user has a base58 of secret key bytes. +/// +/// # Arguments +/// - `b58`: base58 string of 64 bytes. +/// Returns base58 pubkey string. +pub fn derive_address_from_base58_secret(b58: &str) -> Result { + let data = bs58::decode(b58).into_vec().context("Invalid base58")?; + if data.len() == 64 { + let kp = Keypair::from_bytes(&data).context("Failed to parse keypair bytes")?; + Ok(kp.pubkey().to_string()) + } else if data.len() == 32 { + let kp = Keypair::from_seed(&data).context("Failed to derive keypair from seed")?; + Ok(kp.pubkey().to_string()) + } else { + anyhow::bail!("Base58 secret must be 32 or 64 bytes"); + } +} + +/// Derive Solana public address from a BIP39 mnemonic phrase. +/// Uses the standard Solana derivation: m/44'/501'/0'/0' by default, but this can be adjusted. +/// +/// # Arguments +/// - `mnemonic`: the phrase, e.g. "abandon abandon ...". +/// - `passphrase`: optional passphrase for mnemonic (usually empty string). +/// - `account`: u32, default 0. +/// - `change`: u32, default 0. +/// +/// Returns base58 pubkey string. +pub fn derive_address_from_mnemonic( + mnemonic: &str, + passphrase: &str, + account: u32, + change: u32, +) -> Result { + // Parse mnemonic + let mn = Mnemonic::from_phrase(mnemonic, Language::English) + .context("Invalid mnemonic phrase")?; + let seed = Seed::new(&mn, passphrase); + let seed_bytes = seed.as_bytes(); // 64 bytes + + // Derivation path for Solana: m/44'/501'/'/' + // We can use `solana_sdk::derivation_path::DerivationPath` if available, or derive via ed25519-dalek + slip10. + // For simplicity, we use `solana_sdk::derivation_path::DerivationPath` if in scope: + // If not, use `ed25519-dalek-bip32` or similar. Here we assume solana-sdk has `derive_keypair_from_seed_and_path`. + // As of solana-sdk v1.14+, there's `keypair_from_seed_and_derivation_path`. + #[cfg(feature = "solana-derive-keypair")] + { + // Pseudo-code; adjust per your solana-sdk version: + /* + use solana_sdk::derivation_path::DerivationPath; + let path = DerivationPath::new_bip44(Some(501), Some(account), Some(change)); + let kp = Keypair::from_seed_with_derivation(&seed_bytes, &path) + .context("Failed deriving keypair from mnemonic")?; + Ok(kp.pubkey().to_string()) + */ + unimplemented!("Adjust to your solana-sdk version's derivation API"); + } + #[cfg(not(feature = "solana-derive-keypair"))] + { + // As fallback: derive the ED25519 key by directly using the seed (not recommended for multiple accounts). + // Here we just derive from seed_bytes[0..32]: + let seed32 = &seed_bytes[0..32]; + let kp = Keypair::from_seed(seed32).context("Failed to derive keypair from mnemonic seed")?; + Ok(kp.pubkey().to_string()) + } +} + + diff --git a/#_sniper (Rust) using jito Shred stream/src/tginterface.rs b/#_sniper (Rust) using jito Shred stream/src/tginterface.rs new file mode 100644 index 0000000..18e8709 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/tginterface.rs @@ -0,0 +1,44 @@ +// src/tginterface.rs +use teloxide::prelude::*; +use std::env; +use dotenv::dotenv; +use crate::db::Database; +use crate::commands::{handle_command, Command}; + +mod db; +mod models; +mod commands; + +#[tokio::main] +async fn main() { + dotenv().ok(); + env_logger::init(); + + let bot_token = env::var("TELEGRAM_BOT_TOKEN").expect("TELEGRAM_BOT_TOKEN not set"); + let mongo_uri = env::var("MONGODB_URI").expect("MONGODB_URI not set"); + let mongo_db = env::var("MONGODB_DB").unwrap_or_else(|_| "telegram_wallet_bot".to_string()); + let admin_ids: Vec = env::var("ADMIN_IDS") + .unwrap_or_default() + .split(',') + .filter_map(|s| s.trim().parse().ok()) + .collect(); + + let db = Database::new(&mongo_uri, &mongo_db) + .await + .expect("failed to initialize database"); + + let bot = Bot::new(bot_token).auto_send(); + + log::info!("Starting bot..."); + + // Use a cloned Database in handler + teloxide::commands_repl(bot.clone(), move |bot: AutoSend, msg: Message, cmd: Command| { + let db = db.clone(); // Database should be Cloneable or use Arc + let admin_ids = admin_ids.clone(); + async move { + if let Err(e) = handle_command(bot.clone().into_inner(), msg, cmd, db.clone(), admin_ids.clone()).await { + log::error!("Error handling command: {:?}", e); + } + } + }, Command::ty()).await; +} diff --git a/#_sniper (Rust) using jito Shred stream/src/token_serializable.rs b/#_sniper (Rust) using jito Shred stream/src/token_serializable.rs new file mode 100644 index 0000000..309e1bd --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/token_serializable.rs @@ -0,0 +1,200 @@ +use serde::{Deserialize, Serialize}; +use serde_with::{serde_as, DisplayFromStr}; +use solana_program::{program_option::COption, pubkey::Pubkey}; +use spl_token::instruction::{AuthorityType, TokenInstruction}; + +// Helper function to convert COption to Option +fn convert_coption(coption: COption) -> Option { + match coption { + COption::Some(value) => Some(value), + COption::None => None, + } +} + +fn convert_set_authority( + authority_type: AuthorityType, + new_authority: COption, +) -> SerializableSetAuthority { + SerializableSetAuthority { + authority_type: match authority_type { + AuthorityType::MintTokens => "MintTokens".to_string(), + AuthorityType::FreezeAccount => "FreezeAccount".to_string(), + AuthorityType::AccountOwner => "AccountOwner".to_string(), + AuthorityType::CloseAccount => "CloseAccount".to_string(), + }, + new_authority: new_authority.into(), // Convert COption to Option + } +} + +#[serde_as] +#[derive(Serialize, Deserialize)] +pub struct SerializableInitializeMint { + decimals: u8, + #[serde_as(as = "DisplayFromStr")] + mint_authority: Pubkey, + #[serde_as(as = "Option")] + freeze_authority: Option, +} + +#[serde_as] +#[derive(Serialize, Deserialize)] +pub struct SerializableInitializeAccount3 { + #[serde_as(as = "DisplayFromStr")] + owner: Pubkey, +} + +#[serde_as] +#[derive(Serialize, Deserialize)] +pub struct SerializableSetAuthority { + authority_type: String, + #[serde_as(as = "Option")] + new_authority: Option, +} + +#[serde_as] +#[derive(Serialize, Deserialize)] +pub struct SerializableTransfer { + amount: u64, +} + +#[serde_as] +#[derive(Serialize, Deserialize)] +pub enum SerializableTokenInstruction { + InitializeMint(SerializableInitializeMint), + InitializeAccount, + InitializeMultisig { + m: u8, + }, + Transfer(SerializableTransfer), + Approve { + amount: u64, + }, + Revoke, + SetAuthority(SerializableSetAuthority), + MintTo { + amount: u64, + }, + Burn { + amount: u64, + }, + CloseAccount, + FreezeAccount, + ThawAccount, + TransferChecked { + amount: u64, + decimals: u8, + }, + ApproveChecked { + amount: u64, + decimals: u8, + }, + MintToChecked { + amount: u64, + decimals: u8, + }, + BurnChecked { + amount: u64, + decimals: u8, + }, + InitializeAccount2 { + #[serde_as(as = "DisplayFromStr")] + owner: Pubkey, + }, + SyncNative, + InitializeAccount3(SerializableInitializeAccount3), + InitializeMultisig2 { + m: u8, + }, + InitializeMint2(SerializableInitializeMint), + GetAccountDataSize, + InitializeImmutableOwner, + AmountToUiAmount { + amount: u64, + }, + UiAmountToAmount { + ui_amount: String, + }, +} + +// Convert TokenInstruction to SerializableTokenInstruction +pub fn convert_to_serializable(ix: TokenInstruction) -> SerializableTokenInstruction { + match ix { + TokenInstruction::InitializeMint { + decimals, + mint_authority, + freeze_authority, + } => { + SerializableTokenInstruction::InitializeMint(SerializableInitializeMint { + decimals, + mint_authority, + freeze_authority: freeze_authority.into(), // Convert COption to Option + }) + } + TokenInstruction::InitializeAccount => SerializableTokenInstruction::InitializeAccount, + TokenInstruction::InitializeMultisig { m } => { + SerializableTokenInstruction::InitializeMultisig { m } + } + TokenInstruction::Transfer { amount } => { + SerializableTokenInstruction::Transfer(SerializableTransfer { amount }) + } + TokenInstruction::Approve { amount } => SerializableTokenInstruction::Approve { amount }, + TokenInstruction::Revoke => SerializableTokenInstruction::Revoke, + TokenInstruction::SetAuthority { + authority_type, + new_authority, + } => SerializableTokenInstruction::SetAuthority(convert_set_authority( + authority_type, + new_authority, + )), + TokenInstruction::MintTo { amount } => SerializableTokenInstruction::MintTo { amount }, + TokenInstruction::Burn { amount } => SerializableTokenInstruction::Burn { amount }, + TokenInstruction::CloseAccount => SerializableTokenInstruction::CloseAccount, + TokenInstruction::FreezeAccount => SerializableTokenInstruction::FreezeAccount, + TokenInstruction::ThawAccount => SerializableTokenInstruction::ThawAccount, + TokenInstruction::TransferChecked { amount, decimals } => { + SerializableTokenInstruction::TransferChecked { amount, decimals } + } + TokenInstruction::ApproveChecked { amount, decimals } => { + SerializableTokenInstruction::ApproveChecked { amount, decimals } + } + TokenInstruction::MintToChecked { amount, decimals } => { + SerializableTokenInstruction::MintToChecked { amount, decimals } + } + TokenInstruction::BurnChecked { amount, decimals } => { + SerializableTokenInstruction::BurnChecked { amount, decimals } + } + TokenInstruction::InitializeAccount2 { owner } => { + SerializableTokenInstruction::InitializeAccount2 { owner } + } + TokenInstruction::SyncNative => SerializableTokenInstruction::SyncNative, + TokenInstruction::InitializeAccount3 { owner } => { + SerializableTokenInstruction::InitializeAccount3(SerializableInitializeAccount3 { + owner, + }) + } + TokenInstruction::InitializeMultisig2 { m } => { + SerializableTokenInstruction::InitializeMultisig2 { m } + } + TokenInstruction::InitializeMint2 { + decimals, + mint_authority, + freeze_authority, + } => SerializableTokenInstruction::InitializeMint2(SerializableInitializeMint { + decimals, + mint_authority, + freeze_authority: freeze_authority.into(), + }), + TokenInstruction::GetAccountDataSize => SerializableTokenInstruction::GetAccountDataSize, + TokenInstruction::InitializeImmutableOwner => { + SerializableTokenInstruction::InitializeImmutableOwner + } + TokenInstruction::AmountToUiAmount { amount } => { + SerializableTokenInstruction::AmountToUiAmount { amount } + } + TokenInstruction::UiAmountToAmount { ui_amount } => { + SerializableTokenInstruction::UiAmountToAmount { + ui_amount: ui_amount.to_string(), + } + } + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/trade_logger.rs b/#_sniper (Rust) using jito Shred stream/src/trade_logger.rs new file mode 100644 index 0000000..9be6e9d --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/trade_logger.rs @@ -0,0 +1,143 @@ +// trade_logger.rs +use once_cell::sync::Lazy; +use serde::{Deserialize, Serialize}; +use solana_sdk::pubkey::Pubkey; +use std::collections::HashMap; +use std::str::FromStr; +use tokio::io::AsyncWriteExt; +use tokio::sync::Mutex; +// Remove std::io::BufReader / std::fs::File imports for async loading: +use std::collections::HashSet; +use std::sync::RwLock; +use tokio::fs::File; +use tokio::io::{AsyncBufReadExt, BufReader}; + +static SKIP_CREATORS: Lazy>> = Lazy::new(|| RwLock::new(HashSet::new())); + +/// Full record to serialize: +#[derive(Serialize, Deserialize)] +pub struct TradeRecord { + pub mint: String, + pub creator: String, + pub buy_lamports: u64, + pub tokens_received: u64, + pub buy_slot: u64, + pub sell_lamports: u64, + pub tokens_sold: u64, + pub sell_slot: u64, + pub pnl_lamports: i128, + pub timestamp: i64, // unix secs +} + +// At startup, load trade_records.jsonl and populate SKIP_CREATORS. +// Assumes each line is a JSON object matching TradeRecord. +pub async fn load_skip_creators_from_file(path: &str) -> anyhow::Result<()> { + // Use tokio::fs::File so we can await. + let file = match File::open(path).await { + Ok(f) => f, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => { + // No file yet: nothing to skip + return Ok(()); + } + Err(e) => return Err(e.into()), + }; + let reader = BufReader::new(file); + let mut lines = reader.lines(); + + // Acquire write lock synchronously (no `.await`). + let mut skip_set = SKIP_CREATORS.write().unwrap(); + while let Some(line) = lines.next_line().await? { + let line = line.trim(); + if line.is_empty() { + continue; + } + match serde_json::from_str::(line) { + Ok(rec) => { + if rec.pnl_lamports < 0 { + if let Ok(pubkey) = Pubkey::from_str(&rec.creator) { + skip_set.insert(pubkey); + } + } + } + Err(_) => { + log::warn!("Invalid trade record line: {}", line); + } + } + } + Ok(()) +} + +// When a new trade record is written and is negative, also update SKIP_CREATORS in-memory: +pub async fn record_trade_and_maybe_skip(path: &str, rec: &TradeRecord) -> anyhow::Result<()> { + // append to file asynchronously + let mut file = tokio::fs::OpenOptions::new() + .create(true) + .append(true) + .open(path) + .await?; + let json = serde_json::to_string(rec)?; + file.write_all(json.as_bytes()).await?; + file.write_all(b"\n").await?; + if rec.pnl_lamports < 0 { + if let Ok(pubkey) = Pubkey::from_str(&rec.creator) { + // Acquire write lock synchronously: + SKIP_CREATORS.write().unwrap().insert(pubkey); + } + } + Ok(()) +} + +/// In-memory partials keyed by mint: +static PARTIALS: Lazy>> = + Lazy::new(|| Mutex::new(HashMap::new())); + +struct PartialTrade { + creator: String, + buy_lamports: u64, + tokens_received: u64, + buy_slot: u64, +} + +/// Call when a buy is confirmed: +pub async fn record_buy( + mint: &str, + creator: &Pubkey, + buy_lamports: u64, + tokens_received: u64, + buy_slot: u64, +) { + let mut map = PARTIALS.lock().await; + map.insert( + mint.to_string(), + PartialTrade { + creator: creator.to_string(), + buy_lamports, + tokens_received, + buy_slot, + }, + ); +} + +/// Call when a sell is confirmed: +pub async fn record_sell(mint: &str, sell_lamports: u64, tokens_sold: u64, sell_slot: u64) { + let mut map = PARTIALS.lock().await; + if let Some(partial) = map.remove(mint) { + let pnl = sell_lamports as i128 - partial.buy_lamports as i128; + let record = TradeRecord { + mint: mint.to_string(), + creator: partial.creator.clone(), + buy_lamports: partial.buy_lamports, + tokens_received: partial.tokens_received, + buy_slot: partial.buy_slot, + sell_lamports, + tokens_sold, + sell_slot, + pnl_lamports: pnl, + timestamp: chrono::Utc::now().timestamp(), + }; + // Append to file and update skip-set if needed + if let Err(e) = record_trade_and_maybe_skip("trade_records.jsonl", &record).await { + log::error!("Failed to append trade record: {:?}", e); + } + } +} diff --git a/#_sniper (Rust) using jito Shred stream/src/trading_loop.rs b/#_sniper (Rust) using jito Shred stream/src/trading_loop.rs new file mode 100644 index 0000000..34c366d --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/src/trading_loop.rs @@ -0,0 +1,120 @@ +// trading_loop.rs + +use crate::common::utils::{ + create_nonblocking_rpc_client, create_rpc_client, import_env_var, import_wallet, AppState, + SwapExecutionMode, SwapInput, +}; +use crate::core::tx; +use crate::dex::pump_fun::PUMP_PROGRAM; +use crate::engine::swap::pump_swap; +use dotenv::dotenv; +use shared_state::{BuyOrder, SellOrder}; +use solana_sdk::{native_token, pubkey::Pubkey}; +use std::{ + env, + str::FromStr, + sync::{Arc, OnceLock}, +}; +use tokio::sync::{mpsc::Receiver, Notify, OnceCell}; + +static TRIGGER_NOTIFY: OnceCell> = OnceCell::const_new(); + +/// Exposed so `pub use trading_loop::get_notify_handle;` still works. +pub async fn get_notify_handle() -> Arc { + TRIGGER_NOTIFY + .get_or_init(|| async { Arc::new(Notify::new()) }) + .await + .clone() +} + +// Pre-parse these exactly once at program load: +static PUMP_PROGRAM_KEY: OnceLock = OnceLock::new(); +static LAMPORTS_PER_SOL_U64: OnceLock = OnceLock::new(); + +pub async fn start_trading_loop(mut mint_rx: Receiver, mut sell_rx: Receiver) { + // load .env if present + dotenv().ok(); + + // one-time RPC & wallet setup + let rpc = create_rpc_client().unwrap(); + let rpc_nonblocking = create_nonblocking_rpc_client().await.unwrap(); + let wallet = import_wallet().unwrap(); + + let app = AppState { + rpc_client: rpc.clone(), + rpc_nonblocking_client: rpc_nonblocking.clone(), + wallet: wallet.clone(), + }; + + // ─── SPAWN BLOCKHASH REFRESHER ─── + // This will keep a fresh recent‐blockhash in the background so sends never stall + // ─── ONE-TIME TIP‐ENGINE INITIALIZATION ─── + // Read your env vars just once + let block_engine = env::var("BLOCK_ENGINE_PROVIDER").unwrap_or_default(); + let use_nextblock = block_engine.eq_ignore_ascii_case("nextblock"); + let use_priority_tip = env::var("USE_PRIORITY_TIP") + .unwrap_or_default() + .eq_ignore_ascii_case("true"); + // This will create/fetch your tip‐accounts and pull the first tip value + tx::init_tip_state(use_nextblock, use_priority_tip) + .await + .expect("failed to init tip engine"); + // stash env vars once + let slippage_bps = import_env_var("SLIPPAGE").parse::().unwrap_or(15); + let buy_amount_sol = import_env_var("BUY_AMOUNT_SOL") + .parse::() + .unwrap_or(0.01); + + // initialize our OnceLocks + let lamports_per_sol = *LAMPORTS_PER_SOL_U64.get_or_init(|| native_token::LAMPORTS_PER_SOL); + let buy_amount_lamports = (buy_amount_sol * lamports_per_sol as f64) as u64; + let pump_program_key = + *PUMP_PROGRAM_KEY.get_or_init(|| Pubkey::from_str(PUMP_PROGRAM).unwrap()); + + loop { + tokio::select! { + // ───────── BUY ORDERS ───────── + Some(BuyOrder { mint, creator, use_jito, urgent }) = mint_rx.recv() => { + let mint_pk = Pubkey::from_str(&mint).unwrap(); + // derive creator vault address + let (creator_vault, _) = + Pubkey::find_program_address(&[b"creator-vault", creator.as_ref()], &pump_program_key); + + let input = SwapInput { + input_token_mint: spl_token::native_mint::ID, + output_token_mint: mint_pk, + slippage_bps, + amount: buy_amount_lamports, + mode: SwapExecutionMode::ExactIn, + market: None, + creator_vault: Some(creator_vault), + }; + + let app_clone = app.clone(); + tokio::spawn(async move { + let _ = pump_swap(app_clone, input, "buy", use_jito, urgent).await; + }); + } + + // ───────── SELL ORDERS ──────── + Some(SellOrder { mint, amount, use_jito, urgent }) = sell_rx.recv() => { + let mint_pk = Pubkey::from_str(&mint).unwrap(); + + let input = SwapInput { + input_token_mint: mint_pk, + output_token_mint: spl_token::native_mint::ID, + slippage_bps, + amount, + mode: SwapExecutionMode::ExactOut, + market: None, + creator_vault: None, + }; + + let app_clone = app.clone(); + tokio::spawn(async move { + let _ = pump_swap(app_clone, input, "sell", use_jito, urgent).await; + }); + } + } + } +} diff --git a/#_sniper (Rust) using jito Shred stream/trade_records.jsonl b/#_sniper (Rust) using jito Shred stream/trade_records.jsonl new file mode 100644 index 0000000..bbdf3a2 --- /dev/null +++ b/#_sniper (Rust) using jito Shred stream/trade_records.jsonl @@ -0,0 +1,390 @@ +{"mint":"4DxH2nRs2SA4uqqddkSkpAM3mPLbhTK86q3ZahBypump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":153937741,"tokens_received":0,"buy_slot":347311946,"sell_lamports":137943497,"tokens_sold":5000000000000,"sell_slot":347311982,"pnl_lamports":-15994244,"timestamp":1750133620} +{"mint":"F6LCD6eLzLcCivZiGiQddyrvm8xJgAGS31bkTZoLpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174649889,"tokens_received":0,"buy_slot":347316858,"sell_lamports":137297743,"tokens_sold":0,"sell_slot":347316894,"pnl_lamports":-37352146,"timestamp":1750135583} +{"mint":"3P1UMsoUntc5GDJRvnoS38py3K8wNNJyJFAyEo7apump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144623036,"tokens_received":0,"buy_slot":347316984,"sell_lamports":136639943,"tokens_sold":5000000000000,"sell_slot":347317010,"pnl_lamports":-7983093,"timestamp":1750135633} +{"mint":"5AYswZcdHVdu5BCKJPzbNyBCSzaLfTG8bXzcrQZ5pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168758193,"tokens_received":0,"buy_slot":347317104,"sell_lamports":159867553,"tokens_sold":0,"sell_slot":347317120,"pnl_lamports":-8890640,"timestamp":1750135678} +{"mint":"6jusvqh1dUm7KUCcK56hxeBQYkggAMKpmSEaaY8Ef3ZC","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":151494208,"tokens_received":0,"buy_slot":347471412,"sell_lamports":136785977,"tokens_sold":0,"sell_slot":347471446,"pnl_lamports":-14708231,"timestamp":1750197584} +{"mint":"DsSFNuRPxGX9AHhuRSTdKVf232x2Dk3TTRZNEkLUpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":145098776,"tokens_received":0,"buy_slot":347477111,"sell_lamports":137559240,"tokens_sold":0,"sell_slot":347477261,"pnl_lamports":-7539536,"timestamp":1750199923} +{"mint":"E9AdXtfabeBWR7UdJZw29DiNWutRfFb9Jro2cfq2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144420990,"tokens_received":0,"buy_slot":347477343,"sell_lamports":136818639,"tokens_sold":0,"sell_slot":347477427,"pnl_lamports":-7602351,"timestamp":1750199993} +{"mint":"EieqGdcJMwRuqVnSbfULwTJzmYhQRq8JT9idQkCzpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":177810409,"tokens_received":0,"buy_slot":347477727,"sell_lamports":138039943,"tokens_sold":0,"sell_slot":347477745,"pnl_lamports":-39770466,"timestamp":1750200119} +{"mint":"9rNGPghfS2THjDaJQQKmiJM3o26ykyatVZn39fL4pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170546532,"tokens_received":0,"buy_slot":347479142,"sell_lamports":158050354,"tokens_sold":0,"sell_slot":347479146,"pnl_lamports":-12496178,"timestamp":1750200681} +{"mint":"9ceRs9ZwsB3mTAwFGdQ5qSGZeQmgLA8WLMniHJEApump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":171638164,"tokens_received":0,"buy_slot":347479151,"sell_lamports":139039943,"tokens_sold":5000000000000,"sell_slot":347479171,"pnl_lamports":-32598221,"timestamp":1750200691} +{"mint":"CDTDTqqJmL1ft8a3gcPuYBvMXEA9zXNWhoFVEDaipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":146002227,"tokens_received":0,"buy_slot":347487368,"sell_lamports":141102292,"tokens_sold":5000000000000,"sell_slot":347487523,"pnl_lamports":-4899935,"timestamp":1750204042} +{"mint":"Dqp6ats2iFAwXHZrBpV2NsXuo5hW41FLLD8NNRdWpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":163592683,"tokens_received":0,"buy_slot":347488212,"sell_lamports":136639951,"tokens_sold":0,"sell_slot":347488244,"pnl_lamports":-26952732,"timestamp":1750204329} +{"mint":"8Hc3xZydnjDWnmicCiDn57kbLSJFM45EdxZPhSZipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185930736,"tokens_received":0,"buy_slot":347488323,"sell_lamports":177546077,"tokens_sold":0,"sell_slot":347488380,"pnl_lamports":-8384659,"timestamp":1750204384} +{"mint":"DLWq4iKhQintex7j8kghjrFE4H6SPp95aeBRHW9ppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":148677265,"tokens_received":0,"buy_slot":347488678,"sell_lamports":141744160,"tokens_sold":0,"sell_slot":347488831,"pnl_lamports":-6933105,"timestamp":1750204567} +{"mint":"34wqHmwFKdC671bBmE5weWNeXCWQeHHXBaumgnuBpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347491416,"sell_lamports":0,"tokens_sold":0,"sell_slot":347491421,"pnl_lamports":-5000,"timestamp":1750205606} +{"mint":"5Q4QYSeRtVeqoKKv2i7jABuhiMiYJNSrSzHqKmmrpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":148754165,"tokens_received":0,"buy_slot":347491652,"sell_lamports":141819538,"tokens_sold":5000000000000,"sell_slot":347491808,"pnl_lamports":-6934627,"timestamp":1750205760} +{"mint":"CALrEKfSxko4gTgtpxxhjuHJbA35k6MzudADcUteo6xM","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":180453395,"tokens_received":0,"buy_slot":347491892,"sell_lamports":157616043,"tokens_sold":0,"sell_slot":347491903,"pnl_lamports":-22837352,"timestamp":1750205797} +{"mint":"GoLqWvc1DqQGDNpbjx5XFXRqdapcdStXR9CUnvAXKRak","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":147230609,"tokens_received":0,"buy_slot":347491991,"sell_lamports":140785927,"tokens_sold":5000000000000,"sell_slot":347492016,"pnl_lamports":-6444682,"timestamp":1750205843} +{"mint":"DnC6p9dHZnFwGtPy8FwkSaifswVCDVTBQS5zKoqcpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347492108,"sell_lamports":0,"tokens_sold":0,"sell_slot":347492127,"pnl_lamports":-5000,"timestamp":1750205887} +{"mint":"ERy1mi86Yj5bvwkj6ZcPTENqKtMaMz9JiQMHLwbEPpDU","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185361594,"tokens_received":0,"buy_slot":347492217,"sell_lamports":138039950,"tokens_sold":5000000000000,"sell_slot":347492349,"pnl_lamports":-47321644,"timestamp":1750205976} +{"mint":"4z8vxGoPS2HMnNz61WpqqCT2Grpb5exVqRDbsZwCpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":156439422,"tokens_received":0,"buy_slot":347493397,"sell_lamports":136039952,"tokens_sold":0,"sell_slot":347493422,"pnl_lamports":-20399470,"timestamp":1750206407} +{"mint":"5d1sEe8zsjkssyQtYau6ALpCgtiAEiptvAMFPdZppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":148842226,"tokens_received":0,"buy_slot":347493500,"sell_lamports":137945459,"tokens_sold":0,"sell_slot":347493653,"pnl_lamports":-10896767,"timestamp":1750206501} +{"mint":"2xQeszcoYrKsMmnobE8hQYR1AD5EDKBfUcXZFUtCpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":153189012,"tokens_received":0,"buy_slot":347496103,"sell_lamports":134460553,"tokens_sold":5000000000000,"sell_slot":347496508,"pnl_lamports":-18728459,"timestamp":1750207644} +{"mint":"AsFHiuqHUU4mLDE6xUii4UBekk7eXacgR15TXienpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":198747842,"tokens_received":0,"buy_slot":347496774,"sell_lamports":181218546,"tokens_sold":0,"sell_slot":347496777,"pnl_lamports":-17529296,"timestamp":1750207752} +{"mint":"BpaSVkodWrV1ZbxRpGDu5E4VMvXiZjpcykmvYf6ypump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":157954942,"tokens_received":0,"buy_slot":347496856,"sell_lamports":142917329,"tokens_sold":5000000000000,"sell_slot":347496862,"pnl_lamports":-15037613,"timestamp":1750207788} +{"mint":"Fu6PgDj4RkjhyvhG5zVpjQNHPx3A4bUo52CCB8UndmAk","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":186653950,"tokens_received":0,"buy_slot":347496943,"sell_lamports":171048041,"tokens_sold":5000000000000,"sell_slot":347496944,"pnl_lamports":-15605909,"timestamp":1750207821} +{"mint":"5oUFJFHK84hZfMZqPF2BRfWgEh1PfaToM1PzADmepump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":148978986,"tokens_received":0,"buy_slot":347497258,"sell_lamports":134166999,"tokens_sold":0,"sell_slot":347497662,"pnl_lamports":-14811987,"timestamp":1750208108} +{"mint":"H7jqp3g6uTcLydmWQBCnrRnRpzf1H9CkPu4sVURqpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154580474,"tokens_received":0,"buy_slot":347501008,"sell_lamports":135885940,"tokens_sold":0,"sell_slot":347501020,"pnl_lamports":-18694534,"timestamp":1750209465} +{"mint":"EyNzeVDoFPPXfGhDh9LcCrgt2oPjjh9qGcALGzcopump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347502059,"sell_lamports":0,"tokens_sold":0,"sell_slot":347502062,"pnl_lamports":-5000,"timestamp":1750209879} +{"mint":"BuEKpmaJiXgnjZzH8PckLMzNGkFBkZDv1DekgJofpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":165885512,"tokens_received":0,"buy_slot":347502067,"sell_lamports":136684668,"tokens_sold":5000000000000,"sell_slot":347502071,"pnl_lamports":-29200844,"timestamp":1750209883} +{"mint":"AYR3GRRJ5VRwPo591GdmHdFkSyaAfwYHvMZU6cmYpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":161639469,"tokens_received":0,"buy_slot":347502077,"sell_lamports":138479030,"tokens_sold":5000000000000,"sell_slot":347502085,"pnl_lamports":-23160439,"timestamp":1750209888} +{"mint":"DRVqp9uBWfScfjxC2wj3ADbK8K8Ar1WuC6HKA5Aipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":161000817,"tokens_received":0,"buy_slot":347502087,"sell_lamports":134039952,"tokens_sold":0,"sell_slot":347502159,"pnl_lamports":-26960865,"timestamp":1750209919} +{"mint":"H9oC98SM2MnFhHxujKZbayjecf7YM8qiPkd111KJpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":164582588,"tokens_received":0,"buy_slot":347502521,"sell_lamports":136819798,"tokens_sold":0,"sell_slot":347502533,"pnl_lamports":-27762790,"timestamp":1750210066} +{"mint":"5sq6xDoiqnTEXToLpA4ZavJW3UmwuUXeR9GgzeHdpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185047505,"tokens_received":0,"buy_slot":347502738,"sell_lamports":152106430,"tokens_sold":0,"sell_slot":347502784,"pnl_lamports":-32941075,"timestamp":1750210166} +{"mint":"4ZPs2t1TfaXX5QN6Y6KhoKwbs2hZsUFTTYFJWmTQpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":162337130,"tokens_received":0,"buy_slot":347503132,"sell_lamports":152857570,"tokens_sold":0,"sell_slot":347503148,"pnl_lamports":-9479560,"timestamp":1750210310} +{"mint":"aG8kT6wwLZMrrJ55iQ9HanphmrMnstd597QRyCrpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":177645442,"tokens_received":0,"buy_slot":347503403,"sell_lamports":162997634,"tokens_sold":5000000000000,"sell_slot":347503404,"pnl_lamports":-14647808,"timestamp":1750210414} +{"mint":"E5rzqJzBvFDx4zq6mTTEyV5ou8YQg92dj1CeTW9ipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154851919,"tokens_received":0,"buy_slot":347503408,"sell_lamports":140151244,"tokens_sold":5000000000000,"sell_slot":347503585,"pnl_lamports":-14700675,"timestamp":1750210487} +{"mint":"8Jbe8VgaLEVpmE8DRYAsi8c8Rm7WxSfaqYRwykt1pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":180767390,"tokens_received":0,"buy_slot":347503589,"sell_lamports":241765820,"tokens_sold":5000000000000,"sell_slot":347503597,"pnl_lamports":60998430,"timestamp":1750210492} +{"mint":"3BoomWazAARD3yLrtUfvqmkja23GEonVzs6NoJecpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":164766466,"tokens_received":0,"buy_slot":347504654,"sell_lamports":169873045,"tokens_sold":5000000000000,"sell_slot":347504658,"pnl_lamports":5106579,"timestamp":1750210914} +{"mint":"CHeFZPQZ6X4rL6sTvQZVxk7atywWXgv9uq51Uyivpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":169334341,"tokens_received":0,"buy_slot":347504662,"sell_lamports":162480810,"tokens_sold":0,"sell_slot":347504703,"pnl_lamports":-6853531,"timestamp":1750210932} +{"mint":"HhELATZZia8u2KRRrZYLuQjCweCHGf7LS4pMcNmEpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347504706,"sell_lamports":0,"tokens_sold":0,"sell_slot":347504709,"pnl_lamports":-5000,"timestamp":1750210936} +{"mint":"FvaqGvRv4mCm8yRrLe3mwXceUzcubVsc4qbMWXtTpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":177139433,"tokens_received":0,"buy_slot":347504722,"sell_lamports":301752412,"tokens_sold":5000000000000,"sell_slot":347504728,"pnl_lamports":124612979,"timestamp":1750210943} +{"mint":"GPpZtiJ7LEhTjERnuKLaNC2G5i2hXdBJCsjvGGQ4pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":164021069,"tokens_received":0,"buy_slot":347504737,"sell_lamports":139266269,"tokens_sold":5000000000000,"sell_slot":347504743,"pnl_lamports":-24754800,"timestamp":1750210949} +{"mint":"G8zfcGneV7bX3zfme9AfZeYvYHLe3ayMGgyn8y1Tpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":165029947,"tokens_received":0,"buy_slot":347504760,"sell_lamports":162676058,"tokens_sold":5000000000000,"sell_slot":347504776,"pnl_lamports":-2353889,"timestamp":1750210963} +{"mint":"HAVgh5JDKdfW5S6QKUsraLTbr9YduR5YaU8TLCVcpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":179279906,"tokens_received":0,"buy_slot":347504795,"sell_lamports":170518209,"tokens_sold":5000000000000,"sell_slot":347504796,"pnl_lamports":-8761697,"timestamp":1750210970} +{"mint":"AZjq4U89GDYfoD1cSdMccoQE54476KM298M2aPQoyc4H","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347504808,"sell_lamports":0,"tokens_sold":0,"sell_slot":347504814,"pnl_lamports":-5000,"timestamp":1750210978} +{"mint":"9rmEegGhmcipQ91mSdUHLs9JgNHYqhieHXcjW4Gqpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":175512577,"tokens_received":0,"buy_slot":347504817,"sell_lamports":138039951,"tokens_sold":5000000000000,"sell_slot":347504859,"pnl_lamports":-37472626,"timestamp":1750210996} +{"mint":"79WYGn7ANggpawF9QZtFY9XXkfyJwkkZ5jzSNhPMpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":169977975,"tokens_received":0,"buy_slot":347504873,"sell_lamports":146010644,"tokens_sold":0,"sell_slot":347504892,"pnl_lamports":-23967331,"timestamp":1750211010} +{"mint":"GiXb7UQjBjS412uWhbPwBi7MrGmgdqxxcidvNW8dpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":175206230,"tokens_received":0,"buy_slot":347504896,"sell_lamports":169400726,"tokens_sold":0,"sell_slot":347504903,"pnl_lamports":-5805504,"timestamp":1750211014} +{"mint":"CVkEbMhDHe6JawXvmx8eanHHYcZkekHtd13QBpQKpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":160712566,"tokens_received":0,"buy_slot":347504908,"sell_lamports":138662517,"tokens_sold":0,"sell_slot":347505164,"pnl_lamports":-22050049,"timestamp":1750211119} +{"mint":"Aq1wu7GJ4yKGe3SSNvQQnSrU2v1aCs3NSpsRHvocpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":162002474,"tokens_received":0,"buy_slot":347505175,"sell_lamports":147392215,"tokens_sold":5000000000000,"sell_slot":347505196,"pnl_lamports":-14610259,"timestamp":1750211132} +{"mint":"92TWc7kEjprezUTZ2VViz6Aw37fRxJsfLhjRDGVZpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170819668,"tokens_received":0,"buy_slot":347505209,"sell_lamports":159948483,"tokens_sold":0,"sell_slot":347505295,"pnl_lamports":-10871185,"timestamp":1750211172} +{"mint":"8jHMSkXEQiSchfURmxRBBuk6bjXhgSCkfk5nTjRjpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":163799593,"tokens_received":0,"buy_slot":347505300,"sell_lamports":177434405,"tokens_sold":0,"sell_slot":347505321,"pnl_lamports":13634812,"timestamp":1750211181} +{"mint":"1Tp3k5DRKBdQ3B5RYm7CvKLGwZNSFUVUEFBGiC1YFKc","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":175654766,"tokens_received":0,"buy_slot":347506777,"sell_lamports":177981016,"tokens_sold":5000000000000,"sell_slot":347506789,"pnl_lamports":2326250,"timestamp":1750211770} +{"mint":"CDUcTUQMNiYhX3E9vjLc94uau6XdojLQPkE9sYtwC3v9","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":147277924,"tokens_received":0,"buy_slot":347506795,"sell_lamports":138039952,"tokens_sold":5000000000000,"sell_slot":347506857,"pnl_lamports":-9237972,"timestamp":1750211796} +{"mint":"2QmaWwjheohrLUusSB1Zz1fmMcgwSPrfcdjn6sDspump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":167349441,"tokens_received":0,"buy_slot":347507551,"sell_lamports":157050364,"tokens_sold":5000000000000,"sell_slot":347507573,"pnl_lamports":-10299077,"timestamp":1750212084} +{"mint":"9VpmheJu714qmwbWabkWaB3nDCzSjKsvXNduYsaTpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347507578,"sell_lamports":0,"tokens_sold":0,"sell_slot":347507583,"pnl_lamports":-5000,"timestamp":1750212087} +{"mint":"3xP6Ju9pWJ8sRLSc8PxNR1L328vUjC6zYLEjtCkppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":180576243,"tokens_received":0,"buy_slot":347507587,"sell_lamports":142543755,"tokens_sold":5000000000000,"sell_slot":347507591,"pnl_lamports":-38032488,"timestamp":1750212090} +{"mint":"9q5bCnBW6TKNZZeMEW58cLKNVQses6Z7nGMaABCLPXBn","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":178158085,"tokens_received":0,"buy_slot":347507593,"sell_lamports":191063682,"tokens_sold":5000000000000,"sell_slot":347507604,"pnl_lamports":12905597,"timestamp":1750212096} +{"mint":"FWQUcSoU2eGshPGc2hs2MG4sqs2FoT1qXzcoFV2rpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168587994,"tokens_received":0,"buy_slot":347507614,"sell_lamports":183743684,"tokens_sold":0,"sell_slot":347507617,"pnl_lamports":15155690,"timestamp":1750212102} +{"mint":"9ft48QMXug18oo7KghoYcixXFVVVae1Bjhfzgdc8pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":162562531,"tokens_received":0,"buy_slot":347507626,"sell_lamports":149700840,"tokens_sold":5000000000000,"sell_slot":347507641,"pnl_lamports":-12861691,"timestamp":1750212111} +{"mint":"AykmqoiLDHioQxJcgREdThzt6uL2t4kgMjwAhqsvak1N","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347509026,"sell_lamports":0,"tokens_sold":0,"sell_slot":347509036,"pnl_lamports":-5000,"timestamp":1750212674} +{"mint":"FeHNSjVCDiJuDV8ZZdnKTvciz53CWwepUW84XSwjpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":326240564,"tokens_received":0,"buy_slot":347509039,"sell_lamports":453783733,"tokens_sold":10000000000000,"sell_slot":347509043,"pnl_lamports":127543169,"timestamp":1750212676} +{"mint":"9kXVDAQdyiD1shTMgPLXEkQ3fJPVSb2D3ZtnEz4Fsrtz","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":302587330,"tokens_received":0,"buy_slot":347509044,"sell_lamports":278694782,"tokens_sold":10000000000000,"sell_slot":347509061,"pnl_lamports":-23892548,"timestamp":1750212683} +{"mint":"1dpF1Zirs9asqxuXQCFW9Pk7SgbQS1ZkgCdGnWQxFLg","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288086615,"tokens_received":0,"buy_slot":347509081,"sell_lamports":278411315,"tokens_sold":10000000000000,"sell_slot":347509483,"pnl_lamports":-9675300,"timestamp":1750212852} +{"mint":"2fRJApP8puJzynzYihgp2G1CLeHVZrGN4TczDxQ1pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":327159115,"tokens_received":0,"buy_slot":347509487,"sell_lamports":278392945,"tokens_sold":10000000000000,"sell_slot":347509535,"pnl_lamports":-48766170,"timestamp":1750212873} +{"mint":"vkTRLDaFZ8o5NAoE3pD49sCLP8gAjQw6bipp7V9pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":358376754,"tokens_received":0,"buy_slot":347509540,"sell_lamports":351989860,"tokens_sold":10000000000000,"sell_slot":347509541,"pnl_lamports":-6386894,"timestamp":1750212876} +{"mint":"9P9zJWnEVzjfHeiLZVKA7sm4i3xDM7V31RGtgkgpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":311611639,"tokens_received":0,"buy_slot":347509544,"sell_lamports":301452110,"tokens_sold":10000000000000,"sell_slot":347509551,"pnl_lamports":-10159529,"timestamp":1750212880} +{"mint":"7x4KXgQ3h9tULjdQe9jz6dWN2tDZ9uuMzHogASe9pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":337528122,"tokens_received":0,"buy_slot":347509560,"sell_lamports":278392928,"tokens_sold":0,"sell_slot":347509610,"pnl_lamports":-59135194,"timestamp":1750212905} +{"mint":"CU7px7F94bgQP1M4N2pZ1NTf3Wy39eLGGz1bpDaq1aEg","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":391627824,"tokens_received":0,"buy_slot":347509627,"sell_lamports":278392942,"tokens_sold":0,"sell_slot":347509704,"pnl_lamports":-113234882,"timestamp":1750212942} +{"mint":"AputqVucipkN6SKtKSJH1Gt3gd5Xcr5GYCcxgJEVpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":178512891,"tokens_received":0,"buy_slot":347511703,"sell_lamports":138039943,"tokens_sold":5000000000000,"sell_slot":347511745,"pnl_lamports":-40472948,"timestamp":1750213761} +{"mint":"FuSuvNP31ugJ7a3M6j2dxDA686ANEWdLrNtYgCDMpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":191562495,"tokens_received":0,"buy_slot":347511757,"sell_lamports":209372956,"tokens_sold":0,"sell_slot":347511761,"pnl_lamports":17810461,"timestamp":1750213768} +{"mint":"Bx6GthauvET9wPzEX9dhYZFQZREQaZuG2yQNB9jepump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":169450415,"tokens_received":0,"buy_slot":347511780,"sell_lamports":144967615,"tokens_sold":5000000000000,"sell_slot":347511966,"pnl_lamports":-24482800,"timestamp":1750213850} +{"mint":"FYiszCW3gFAG8D1hwU4jKyhdWRwkJaynVnv7KXgVpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168313880,"tokens_received":0,"buy_slot":347512476,"sell_lamports":138039951,"tokens_sold":0,"sell_slot":347512547,"pnl_lamports":-30273929,"timestamp":1750214084} +{"mint":"5Qw1dS2AMFPUcmvgC7xbpaa9LAewHJSNePdSP1Wf2jqJ","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174767935,"tokens_received":0,"buy_slot":347512555,"sell_lamports":160765646,"tokens_sold":5000000000000,"sell_slot":347512584,"pnl_lamports":-14002289,"timestamp":1750214098} +{"mint":"DeW5KqFmH4mBe4nSgpiQm47c139GfJSsUVX4RumApump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":175458276,"tokens_received":0,"buy_slot":347512593,"sell_lamports":138039951,"tokens_sold":5000000000000,"sell_slot":347512657,"pnl_lamports":-37418325,"timestamp":1750214126} +{"mint":"FoFq5ffiipdCoFEejKGkJHDSHKPUPd2N1wrTjFUDoHLt","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185361583,"tokens_received":0,"buy_slot":347512941,"sell_lamports":174028315,"tokens_sold":0,"sell_slot":347512964,"pnl_lamports":-11333268,"timestamp":1750214249} +{"mint":"NNT2Q5cpnKSBbhFSyTyQtZekKyE8sk6bCNfApiipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":166320932,"tokens_received":0,"buy_slot":347512976,"sell_lamports":167804891,"tokens_sold":0,"sell_slot":347512986,"pnl_lamports":1483959,"timestamp":1750214258} +{"mint":"8veaQPsWZ2mDwphJQEs2RbZMh8eUiN7FJGriUkFUpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":180360057,"tokens_received":0,"buy_slot":347512998,"sell_lamports":185120939,"tokens_sold":0,"sell_slot":347513010,"pnl_lamports":4760882,"timestamp":1750214267} +{"mint":"GZk7aLb6fwysRZwHFvNRuDzpTbSaazfStEMmarC8pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154829405,"tokens_received":0,"buy_slot":347513857,"sell_lamports":138711380,"tokens_sold":0,"sell_slot":347513894,"pnl_lamports":-16118025,"timestamp":1750214623} +{"mint":"61SBrndyLQweFvYz1RUC6C9rSwLUcdhDrXspQqz5pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168080857,"tokens_received":0,"buy_slot":347513906,"sell_lamports":157050364,"tokens_sold":5000000000000,"sell_slot":347513924,"pnl_lamports":-11030493,"timestamp":1750214636} +{"mint":"Fp833QMb3YRWHrDoyGnndSq8GoPjz1ZMQeNgwJQY4ynL","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":196274018,"tokens_received":0,"buy_slot":347513929,"sell_lamports":138080471,"tokens_sold":0,"sell_slot":347514014,"pnl_lamports":-58193547,"timestamp":1750214671} +{"mint":"134tbGFATvhQwDUYfp7Dpju79KxmTCYZq2cpGypWpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":175425825,"tokens_received":0,"buy_slot":347514019,"sell_lamports":138085938,"tokens_sold":5000000000000,"sell_slot":347514332,"pnl_lamports":-37339887,"timestamp":1750214800} +{"mint":"6ygocSg36t7su8b52NZqgwbbLHcVG5vii8saSJJvpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":190116418,"tokens_received":0,"buy_slot":347515425,"sell_lamports":194304301,"tokens_sold":5000000000000,"sell_slot":347515426,"pnl_lamports":4187883,"timestamp":1750215240} +{"mint":"FjTSrGt8N1PTWC8ywWjKjuChFGKtaJ3euuNo6qRxpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":167309527,"tokens_received":0,"buy_slot":347515428,"sell_lamports":138039951,"tokens_sold":0,"sell_slot":347515479,"pnl_lamports":-29269576,"timestamp":1750215260} +{"mint":"EAayig1Cqk1eNH9RYJZAsEfEdAcMb3K4ZiXDLuD6pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174767935,"tokens_received":0,"buy_slot":347515485,"sell_lamports":167318194,"tokens_sold":0,"sell_slot":347515513,"pnl_lamports":-7449741,"timestamp":1750215274} +{"mint":"Gi4HkMfywxGwHVJWCDTJsKb1FcKJKPwEQdjozBknpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347515518,"sell_lamports":0,"tokens_sold":0,"sell_slot":347515532,"pnl_lamports":-5000,"timestamp":1750215281} +{"mint":"GYP4aTcDaVkKm7YeDDLmcA2Qni247trgsWt9RiQ8pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":193516428,"tokens_received":0,"buy_slot":347515544,"sell_lamports":224002490,"tokens_sold":0,"sell_slot":347515550,"pnl_lamports":30486062,"timestamp":1750215288} +{"mint":"3gABeNGS5Fj6FEsNwEZtawXCvrrsYHRfABwJEwHqwbDW","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":159118273,"tokens_received":0,"buy_slot":347515563,"sell_lamports":145974801,"tokens_sold":5000000000000,"sell_slot":347515579,"pnl_lamports":-13143472,"timestamp":1750215299} +{"mint":"DCGuj3YVS3dY9BmxMQBn9ahPVn9pp33wDZp53XHcpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168321400,"tokens_received":0,"buy_slot":347515584,"sell_lamports":138039951,"tokens_sold":5000000000000,"sell_slot":347515618,"pnl_lamports":-30281449,"timestamp":1750215315} +{"mint":"GXUHcwp9HDrwoqDHiBPtQeaEpKuL5TUeBiRYGUp8M4Ve","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154536409,"tokens_received":0,"buy_slot":347515624,"sell_lamports":147487282,"tokens_sold":5000000000000,"sell_slot":347515702,"pnl_lamports":-7049127,"timestamp":1750215349} +{"mint":"H3uqskXom9Yo7A5qBLyK55aLxc3nzgsC2tZ4cXC2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":145838296,"tokens_received":0,"buy_slot":347516120,"sell_lamports":139017358,"tokens_sold":5000000000000,"sell_slot":347516151,"pnl_lamports":-6820938,"timestamp":1750215527} +{"mint":"4z7EMkVbcgwjBjrCmB2W7e1xbdhpTU4EW4M5fwiTf8rn","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347516155,"sell_lamports":0,"tokens_sold":0,"sell_slot":347516166,"pnl_lamports":-5000,"timestamp":1750215533} +{"mint":"43DatYePiw5wAx6S5yXHEwcyqtLKMDhQL9ZpNMmJdiqJ","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":196274018,"tokens_received":0,"buy_slot":347516172,"sell_lamports":138039950,"tokens_sold":0,"sell_slot":347516245,"pnl_lamports":-58234068,"timestamp":1750215566} +{"mint":"2BNFmyfcnSjnYgwiRMMwNvrMEHG4EMFRkPJSP8fwpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":164292683,"tokens_received":0,"buy_slot":347516251,"sell_lamports":157050364,"tokens_sold":0,"sell_slot":347516328,"pnl_lamports":-7242319,"timestamp":1750215599} +{"mint":"Epwg2GGZ4ccNeFCUudqUjtxzzWFcQn3W6vz1pgEiLCAg","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185361583,"tokens_received":0,"buy_slot":347516337,"sell_lamports":138039950,"tokens_sold":0,"sell_slot":347516388,"pnl_lamports":-47321633,"timestamp":1750215623} +{"mint":"4resdanSkUpY7Eru1jXbUDpn9XqsEkJRCoLUANzGpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":190977591,"tokens_received":0,"buy_slot":347516390,"sell_lamports":191111142,"tokens_sold":0,"sell_slot":347516392,"pnl_lamports":133551,"timestamp":1750215625} +{"mint":"Buwa3feVdgVZG1sSYYeY4yZhPtEdw72YLS7WqtrFpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":192382339,"tokens_received":0,"buy_slot":347516404,"sell_lamports":167931074,"tokens_sold":5000000000000,"sell_slot":347516409,"pnl_lamports":-24451265,"timestamp":1750215632} +{"mint":"DCR7ZZoFM5KDWjePbVSGXHEK2X7G9JL5y3EkJqVrpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":159901727,"tokens_received":0,"buy_slot":347516437,"sell_lamports":138189808,"tokens_sold":0,"sell_slot":347516440,"pnl_lamports":-21711919,"timestamp":1750215644} +{"mint":"E5Y7atNeq6s4FX2R9Nw2XktMoVPtiFss5HNycQMKpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":160596506,"tokens_received":0,"buy_slot":347516458,"sell_lamports":147392214,"tokens_sold":5000000000000,"sell_slot":347516466,"pnl_lamports":-13204292,"timestamp":1750215655} +{"mint":"CKvzjdVm5jfBymN3LHUZsNQi9fhExaFznwZYTAd9pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144992082,"tokens_received":0,"buy_slot":347516767,"sell_lamports":138251038,"tokens_sold":5000000000000,"sell_slot":347516793,"pnl_lamports":-6741044,"timestamp":1750215786} +{"mint":"4uyLURYRqZHSgWz8xesi7u258QsK2QeojU6mwcgppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":180560153,"tokens_received":0,"buy_slot":347516795,"sell_lamports":225265367,"tokens_sold":5000000000000,"sell_slot":347516801,"pnl_lamports":44705214,"timestamp":1750215790} +{"mint":"3rpp1AkGnSiL2Sn8LMhtm128V9JnDZNj7ktb3aqupump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":165817451,"tokens_received":0,"buy_slot":347516802,"sell_lamports":167423757,"tokens_sold":5000000000000,"sell_slot":347516851,"pnl_lamports":1606306,"timestamp":1750215811} +{"mint":"H1BCkUB7UtjESVcHXDwUAnR4mR3aXp7q4V7JmXAipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":176992067,"tokens_received":0,"buy_slot":347517155,"sell_lamports":176243609,"tokens_sold":0,"sell_slot":347517157,"pnl_lamports":-748458,"timestamp":1750215931} +{"mint":"769QBKCMDFEhyA4kxacJ9VPYiZpVk1y76LGVgN9bpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168128579,"tokens_received":0,"buy_slot":347517173,"sell_lamports":148493513,"tokens_sold":0,"sell_slot":347517178,"pnl_lamports":-19635066,"timestamp":1750215940} +{"mint":"BgBiSYYZ3YC7xzkVaCrx4cWpr2iqrsXFt2N66VYMpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154439412,"tokens_received":0,"buy_slot":347517185,"sell_lamports":139228417,"tokens_sold":5000000000000,"sell_slot":347517190,"pnl_lamports":-15210995,"timestamp":1750215944} +{"mint":"24rpR3wxbd6PHNiXVzYk82Z1KVkyybctmRA98DXjpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154829492,"tokens_received":0,"buy_slot":347517203,"sell_lamports":138217201,"tokens_sold":0,"sell_slot":347517210,"pnl_lamports":-16612291,"timestamp":1750215953} +{"mint":"8qJ2z1Hi4maiTHyP9a6dzsTNPwvnJ8pvvoshpUk1Sgny","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174552930,"tokens_received":0,"buy_slot":347517218,"sell_lamports":187522131,"tokens_sold":5000000000000,"sell_slot":347517220,"pnl_lamports":12969201,"timestamp":1750215957} +{"mint":"DcDnAQqjLR8g5sj3tDTFtjxFXzsaYVYyNmfpZueFpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":176861169,"tokens_received":0,"buy_slot":347517222,"sell_lamports":155874037,"tokens_sold":5000000000000,"sell_slot":347517225,"pnl_lamports":-20987132,"timestamp":1750215960} +{"mint":"CN6b4XxEaHCyUb2Ey2gpV1DY7AHzWrUCtuopMZkm3mGK","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174024140,"tokens_received":0,"buy_slot":347517227,"sell_lamports":160251850,"tokens_sold":5000000000000,"sell_slot":347517237,"pnl_lamports":-13772290,"timestamp":1750215965} +{"mint":"DFQfq3YxQAfFg5BUcLKKJ2TnjHMNGuYCdgsYKtC2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":151914813,"tokens_received":0,"buy_slot":347517240,"sell_lamports":142488375,"tokens_sold":0,"sell_slot":347517318,"pnl_lamports":-9426438,"timestamp":1750215997} +{"mint":"GaAAvMGR8TNECm9LN7BhHJGHsMSZE9H2bFR5eeFvpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":166320932,"tokens_received":0,"buy_slot":347517333,"sell_lamports":159232051,"tokens_sold":0,"sell_slot":347517344,"pnl_lamports":-7088881,"timestamp":1750216007} +{"mint":"Dh3uEWobcyERQJZGFdavTdNPxgKjCWrBj91YWUv6d7xM","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170619703,"tokens_received":0,"buy_slot":347517889,"sell_lamports":163252094,"tokens_sold":0,"sell_slot":347517891,"pnl_lamports":-7367609,"timestamp":1750216229} +{"mint":"69uHdZNRzPYFJvRifAhfUqnd7UePPfEhfgqzEbehpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":166320932,"tokens_received":0,"buy_slot":347517893,"sell_lamports":437980310,"tokens_sold":5000000000000,"sell_slot":347517899,"pnl_lamports":271659378,"timestamp":1750216232} +{"mint":"6bFKPWTUD6Xep3M3BWdVxGrRM7kLoe5uSmJgBHK9pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":151717366,"tokens_received":0,"buy_slot":347517908,"sell_lamports":142497725,"tokens_sold":0,"sell_slot":347517986,"pnl_lamports":-9219641,"timestamp":1750216267} +{"mint":"8dpmBfMGcsFdNRT3B3k112X8QnpgPGeTjVcEwuF9pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":150175534,"tokens_received":0,"buy_slot":347518199,"sell_lamports":141266384,"tokens_sold":5000000000000,"sell_slot":347518257,"pnl_lamports":-8909150,"timestamp":1750216376} +{"mint":"9aDtA41UDhBUnts6V1pGR4uM2zAnewWG4FxuXGPBpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":177686389,"tokens_received":0,"buy_slot":347518267,"sell_lamports":179128076,"tokens_sold":0,"sell_slot":347518277,"pnl_lamports":1441687,"timestamp":1750216385} +{"mint":"DoBuLF4oGf4c7pYYupuXxWTfu8ZhrKexUUPSF1o2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":153471252,"tokens_received":0,"buy_slot":347518284,"sell_lamports":138039943,"tokens_sold":5000000000000,"sell_slot":347518329,"pnl_lamports":-15431309,"timestamp":1750216406} +{"mint":"5vHnVZRetzwVoGq7rkXtgxWpH6YANDeAaaRa7bx4pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":184101706,"tokens_received":0,"buy_slot":347518339,"sell_lamports":269163656,"tokens_sold":5000000000000,"sell_slot":347518344,"pnl_lamports":85061950,"timestamp":1750216412} +{"mint":"85ArwijitJ8pUqpQNiP6zrrWgxUYebyRzVDyWoX5pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":189889436,"tokens_received":0,"buy_slot":347518349,"sell_lamports":152248365,"tokens_sold":0,"sell_slot":347518354,"pnl_lamports":-37641071,"timestamp":1750216416} +{"mint":"C1NdJvJmxnunUPUWqPG9AcjRsH68XmkYDPBTfpJjpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170507468,"tokens_received":0,"buy_slot":347518366,"sell_lamports":148344253,"tokens_sold":0,"sell_slot":347518370,"pnl_lamports":-22163215,"timestamp":1750216422} +{"mint":"7RMQre4vQMtQdjWJt5SkRGYHBby4EKxpgEhQrWW3pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":202376021,"tokens_received":0,"buy_slot":347518379,"sell_lamports":193518242,"tokens_sold":5000000000000,"sell_slot":347518384,"pnl_lamports":-8857779,"timestamp":1750216428} +{"mint":"A9Tabone9NJ3sK193DjSJvT7ShGKTxpmXktFW5aYpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":158382562,"tokens_received":0,"buy_slot":347518401,"sell_lamports":147392215,"tokens_sold":0,"sell_slot":347518409,"pnl_lamports":-10990347,"timestamp":1750216438} +{"mint":"5mrnPovjnpypbebb7mvUoVmCEmyzpHG5kufvnaSZpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170609809,"tokens_received":0,"buy_slot":347518442,"sell_lamports":153843546,"tokens_sold":0,"sell_slot":347518452,"pnl_lamports":-16766263,"timestamp":1750216455} +{"mint":"DtrrKkCah7iXtwPUYokDymTCRgyycANwipAFvXEjFpLE","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154536400,"tokens_received":0,"buy_slot":347518932,"sell_lamports":147487282,"tokens_sold":0,"sell_slot":347519010,"pnl_lamports":-7049118,"timestamp":1750216678} +{"mint":"5rjvHdcF2B1ArjmFB9RJiVxP2tCVPN4bSdrZGWrkpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":181826373,"tokens_received":0,"buy_slot":347519017,"sell_lamports":144277064,"tokens_sold":0,"sell_slot":347519022,"pnl_lamports":-37549309,"timestamp":1750216682} +{"mint":"4YobXovMLVeEqVGzs3oPAe3JQYEywKsgG2CQu1XEpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154738234,"tokens_received":0,"buy_slot":347519031,"sell_lamports":138045462,"tokens_sold":5000000000000,"sell_slot":347519040,"pnl_lamports":-16692772,"timestamp":1750216690} +{"mint":"7Q4FJRc8vgAMSJAdgUtA5os4MYEjEBA8mydvTCQbpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347519050,"sell_lamports":0,"tokens_sold":0,"sell_slot":347519063,"pnl_lamports":-5000,"timestamp":1750216699} +{"mint":"7zT8ZNqJtMmSXgAhmCPRXuiTyQEToHYWcicecbiypump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":180873334,"tokens_received":0,"buy_slot":347519352,"sell_lamports":175450475,"tokens_sold":0,"sell_slot":347519353,"pnl_lamports":-5422859,"timestamp":1750216817} +{"mint":"6DrHbBvBPQTyLcwwWZFYiHnAbcqfwR7bx9iUK8eXpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174767935,"tokens_received":0,"buy_slot":347519355,"sell_lamports":142699951,"tokens_sold":0,"sell_slot":347519360,"pnl_lamports":-32067984,"timestamp":1750216820} +{"mint":"HGMCJkXHyJDEd1MzJxCf6i7hSr6kKo6YCy1tWVsgpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":169365309,"tokens_received":0,"buy_slot":347519373,"sell_lamports":162022550,"tokens_sold":0,"sell_slot":347519375,"pnl_lamports":-7342759,"timestamp":1750216826} +{"mint":"7CyK5ZK3GAg8zedHGr5wCy5ptpVTshYQsm5Cz4rTpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":154407936,"tokens_received":0,"buy_slot":347519380,"sell_lamports":149430944,"tokens_sold":0,"sell_slot":347519389,"pnl_lamports":-4976992,"timestamp":1750216831} +{"mint":"Gt8XznFv5hN2K6YZyyiwF5d5UJowRKqDdzBvpt9upump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":160154094,"tokens_received":0,"buy_slot":347519392,"sell_lamports":164607744,"tokens_sold":0,"sell_slot":347519393,"pnl_lamports":4453650,"timestamp":1750216832} +{"mint":"3jGDUnFJj2tFUts4t9RLK9bLhrYE4ZZ1rRUEnLECpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":152664321,"tokens_received":0,"buy_slot":347519401,"sell_lamports":142299640,"tokens_sold":0,"sell_slot":347519480,"pnl_lamports":-10364681,"timestamp":1750216867} +{"mint":"8r6VZKDbJjTTBf6mcmfY2qAAWFRm8KsQmSr9gcyzpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185466956,"tokens_received":0,"buy_slot":347519770,"sell_lamports":179967098,"tokens_sold":0,"sell_slot":347519776,"pnl_lamports":-5499858,"timestamp":1750216987} +{"mint":"37KSUe76NCu4pUWUDX6nNpLhmmanx6Rst7MhuivPpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347519792,"sell_lamports":0,"tokens_sold":0,"sell_slot":347519797,"pnl_lamports":-5000,"timestamp":1750216995} +{"mint":"AgpMKK3Q8FBYD4CfCbFZZoUfv9kgwRprATUYcwqepump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168464311,"tokens_received":0,"buy_slot":347519836,"sell_lamports":138039951,"tokens_sold":0,"sell_slot":347519848,"pnl_lamports":-30424360,"timestamp":1750217016} +{"mint":"BHfyTvcM89GvgoqbJ8EVs2WvLtvRtYR6y2fF7Chypump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347519856,"sell_lamports":0,"tokens_sold":0,"sell_slot":347519863,"pnl_lamports":-5000,"timestamp":1750217021} +{"mint":"Ds7Mcxg9x8mPAkFXvGyP2LKHZ2LFR3CQdFnRPxR154Jc","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":182110735,"tokens_received":0,"buy_slot":347519876,"sell_lamports":174516121,"tokens_sold":5000000000000,"sell_slot":347519878,"pnl_lamports":-7594614,"timestamp":1750217027} +{"mint":"8YyvwW6eB2gZSNH7pFX1sQ8TthFukDSeYE3JNXJspump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168716762,"tokens_received":0,"buy_slot":347519885,"sell_lamports":161059462,"tokens_sold":0,"sell_slot":347519886,"pnl_lamports":-7657300,"timestamp":1750217031} +{"mint":"7e8EjeHCbSzvPXuxQwsF8fpWrXYZnJDG7mdSD7mRpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":156404624,"tokens_received":0,"buy_slot":347519891,"sell_lamports":147392215,"tokens_sold":0,"sell_slot":347519909,"pnl_lamports":-9012409,"timestamp":1750217040} +{"mint":"GSbFoKiHuWSuNRRMXW6c8ExGN8XpXwzqVujbgHh5pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":194272644,"tokens_received":0,"buy_slot":347519917,"sell_lamports":186436673,"tokens_sold":5000000000000,"sell_slot":347519918,"pnl_lamports":-7835971,"timestamp":1750217044} +{"mint":"91HjAWvPBhDZADUySKK4JKaeBVJsoCDChT3QhHncpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":150442710,"tokens_received":0,"buy_slot":347519942,"sell_lamports":143667871,"tokens_sold":5000000000000,"sell_slot":347519943,"pnl_lamports":-6774839,"timestamp":1750217054} +{"mint":"4jsQHqshVcfJ5wy3xBREKy5VbkXK4eCyWPT8zXicpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":149598851,"tokens_received":0,"buy_slot":347519956,"sell_lamports":141744160,"tokens_sold":0,"sell_slot":347519958,"pnl_lamports":-7854691,"timestamp":1750217060} +{"mint":"B2MMargytCabncwmDfz7JzrcGXcUhYnNPx1BWdvcpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":165817461,"tokens_received":0,"buy_slot":347519975,"sell_lamports":157050364,"tokens_sold":0,"sell_slot":347519982,"pnl_lamports":-8767097,"timestamp":1750217070} +{"mint":"8VQd57yZoTNESX2MhyAuoK5YYV2Jdfij8QTJW9Vwpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":185466953,"tokens_received":0,"buy_slot":347519987,"sell_lamports":179967095,"tokens_sold":5000000000000,"sell_slot":347519988,"pnl_lamports":-5499858,"timestamp":1750217072} +{"mint":"G9ETocYppB3Ek6ew4Xy32RuhMq63UxtqRyMLsSTmpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":150167351,"tokens_received":0,"buy_slot":347520013,"sell_lamports":143204750,"tokens_sold":0,"sell_slot":347520018,"pnl_lamports":-6962601,"timestamp":1750217084} +{"mint":"4xrTSPjXxYoVE4UU1Bfpds9SvFB2ub9rdxgytmrjpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":157523807,"tokens_received":0,"buy_slot":347520019,"sell_lamports":151468252,"tokens_sold":5000000000000,"sell_slot":347520020,"pnl_lamports":-6055555,"timestamp":1750217085} +{"mint":"ErfaH7fMh1QgDbY3JpqgHt2seygUkATcwDsoX38yr2Mz","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347520036,"sell_lamports":0,"tokens_sold":0,"sell_slot":347520040,"pnl_lamports":-5000,"timestamp":1750217092} +{"mint":"BoA5ib3xAUxyMrdHkZBscY2id4q6P5ifjbW8CsZSpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":165416759,"tokens_received":0,"buy_slot":347520057,"sell_lamports":164583479,"tokens_sold":0,"sell_slot":347520067,"pnl_lamports":-833280,"timestamp":1750217103} +{"mint":"F9nXCqW5u1ZH3jS35U9UcuC3HNumEqEWfx7mrdAgpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":173429492,"tokens_received":0,"buy_slot":347520089,"sell_lamports":166006254,"tokens_sold":5000000000000,"sell_slot":347520090,"pnl_lamports":-7423238,"timestamp":1750217112} +{"mint":"D4umoMz2nTrm9L2XqdbpjrJsctaZyYpvaNpQSMvbpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":172910222,"tokens_received":0,"buy_slot":347520104,"sell_lamports":166001070,"tokens_sold":0,"sell_slot":347520110,"pnl_lamports":-6909152,"timestamp":1750217121} +{"mint":"DLDZ88ZFDVm25RuqqbsSCa2NxVde2yCdC4YfmVY5pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":163410441,"tokens_received":0,"buy_slot":347520130,"sell_lamports":153130600,"tokens_sold":0,"sell_slot":347520153,"pnl_lamports":-10279841,"timestamp":1750217139} +{"mint":"79u2TnaXemucTGGtxrWmte8isX19u6Uebx96tz9npump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":163909844,"tokens_received":0,"buy_slot":347520168,"sell_lamports":156675114,"tokens_sold":0,"sell_slot":347520171,"pnl_lamports":-7234730,"timestamp":1750217147} +{"mint":"2zMCWe2Y79hJutHmbYwy47UUPF7LN8cmQ6LQayXPpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":165773028,"tokens_received":0,"buy_slot":347520186,"sell_lamports":158501404,"tokens_sold":0,"sell_slot":347520187,"pnl_lamports":-7271624,"timestamp":1750217153} +{"mint":"EzvRjRBQoLSfiLJXuAfK2Lwj8ve6QdCg7xx2LQdupump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":163589942,"tokens_received":0,"buy_slot":347520208,"sell_lamports":158655803,"tokens_sold":5000000000000,"sell_slot":347520209,"pnl_lamports":-4934139,"timestamp":1750217163} +{"mint":"E4PzfTZo5NY4Ug9oDTJJ2YZVT8yP7Y8eZx22moqUpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":158382552,"tokens_received":0,"buy_slot":347520226,"sell_lamports":151257273,"tokens_sold":0,"sell_slot":347520227,"pnl_lamports":-7125279,"timestamp":1750217169} +{"mint":"3EaWwNWkWHJFxGH5c82uxE8aAxzmtAapozi7Ch8Xpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":181872778,"tokens_received":0,"buy_slot":347520229,"sell_lamports":175205215,"tokens_sold":0,"sell_slot":347520232,"pnl_lamports":-6667563,"timestamp":1750217171} +{"mint":"5kxqRb3g6s7DYzpMN72LK8D4rW4pByZPE2z8ZW2DKH7n","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":179139900,"tokens_received":0,"buy_slot":347520241,"sell_lamports":171603585,"tokens_sold":0,"sell_slot":347520242,"pnl_lamports":-7536315,"timestamp":1750217176} +{"mint":"BJ5qNX9rt3cYa71u1w6vsebYhgrJMSA69qCmMFLPpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":160281832,"tokens_received":0,"buy_slot":347520722,"sell_lamports":153118943,"tokens_sold":5000000000000,"sell_slot":347520727,"pnl_lamports":-7162889,"timestamp":1750217368} +{"mint":"EpY1rVa2FPAD1rFQvGcdVysdETBNurFy5tBQRD9ipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":164798544,"tokens_received":0,"buy_slot":347520739,"sell_lamports":147088682,"tokens_sold":0,"sell_slot":347520752,"pnl_lamports":-17709862,"timestamp":1750217378} +{"mint":"66cJUuYv69g6i9PyViWHojX7vPXraFuFcKdVyc94pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170144542,"tokens_received":0,"buy_slot":347520762,"sell_lamports":142764913,"tokens_sold":5000000000000,"sell_slot":347520763,"pnl_lamports":-27379629,"timestamp":1750217382} +{"mint":"DoREj57VkS1jrAyMYCdzY5qDSEk6jhSU5Hxm8nkapump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":168341659,"tokens_received":0,"buy_slot":347520768,"sell_lamports":159018702,"tokens_sold":5000000000000,"sell_slot":347520789,"pnl_lamports":-9322957,"timestamp":1750217392} +{"mint":"2RaQQ7k8tHCV7GApk1ZorLA9KrwBc4EmQArXbkHjDHGM","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":196274029,"tokens_received":0,"buy_slot":347520822,"sell_lamports":138039950,"tokens_sold":5000000000000,"sell_slot":347520898,"pnl_lamports":-58234079,"timestamp":1750217436} +{"mint":"7ZZJbeCPkQm6nZ56DtNLGs1c2GFUjPuxcTZc5vJapump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":147697046,"tokens_received":0,"buy_slot":347520909,"sell_lamports":172967400,"tokens_sold":0,"sell_slot":347520962,"pnl_lamports":25270354,"timestamp":1750217461} +{"mint":"C1NKN93pkT3zTtM7JecwnuYrtVEorUptXzTS4Csapump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":178904976,"tokens_received":0,"buy_slot":347521102,"sell_lamports":173808497,"tokens_sold":5000000000000,"sell_slot":347521104,"pnl_lamports":-5096479,"timestamp":1750217517} +{"mint":"2Sk19LDFmd9bnQyg2KDyk6N7tvNU2cBVfjQ2zNnnpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":182813629,"tokens_received":0,"buy_slot":347521106,"sell_lamports":177549144,"tokens_sold":5000000000000,"sell_slot":347521107,"pnl_lamports":-5264485,"timestamp":1750217518} +{"mint":"9k8BFvvtMzRqtovmodjSbi7wMcnGEDdRCsCi9Wt6pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":176452042,"tokens_received":0,"buy_slot":347521109,"sell_lamports":168968941,"tokens_sold":0,"sell_slot":347521110,"pnl_lamports":-7483101,"timestamp":1750217519} +{"mint":"F85S3X1wEhbrAzPCTagcNUngCVNuY7dFtGuuQs7kpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170144542,"tokens_received":0,"buy_slot":347521131,"sell_lamports":162786354,"tokens_sold":5000000000000,"sell_slot":347521133,"pnl_lamports":-7358188,"timestamp":1750217529} +{"mint":"99dYt5XHu7gJ7Q4KsuJ2xn1EqyodbCzhMBVECMBVMTMK","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347521147,"sell_lamports":0,"tokens_sold":0,"sell_slot":347521153,"pnl_lamports":-5000,"timestamp":1750217537} +{"mint":"HaaHpJJXw3vWorMP5yABnJNBXUDHTQoPmiRg8wr2Jw5C","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":188535477,"tokens_received":0,"buy_slot":347521157,"sell_lamports":180813111,"tokens_sold":0,"sell_slot":347521159,"pnl_lamports":-7722366,"timestamp":1750217539} +{"mint":"2TkEpjRjDT9GmxnyEA6GVuXHEd351XvVtMTuB3Rmpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":153171339,"tokens_received":0,"buy_slot":347521163,"sell_lamports":146142931,"tokens_sold":0,"sell_slot":347521184,"pnl_lamports":-7028408,"timestamp":1750217549} +{"mint":"AppAUHfC2USYs8eoDjbg91AbGdMGbJhtaSRj3UvLpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":163410441,"tokens_received":0,"buy_slot":347521187,"sell_lamports":162039233,"tokens_sold":0,"sell_slot":347521200,"pnl_lamports":-1371208,"timestamp":1750217556} +{"mint":"CRLwGR99o9HJyNbjn34gd5oc7RSMjGUYyZ4pzoXMg99E","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347521249,"sell_lamports":0,"tokens_sold":0,"sell_slot":347521262,"pnl_lamports":-5000,"timestamp":1750217582} +{"mint":"3pCkxnvU9vX5vp2o8LYtpwDYJxaq8sKSDxrCDTqKpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":174612538,"tokens_received":0,"buy_slot":347521269,"sell_lamports":167165865,"tokens_sold":5000000000000,"sell_slot":347521270,"pnl_lamports":-7446673,"timestamp":1750217585} +{"mint":"6tqLq2FK5cXbxDTqHBcqeqvAdrQhczGshNkqqgeTpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":173978664,"tokens_received":0,"buy_slot":347521275,"sell_lamports":161945257,"tokens_sold":5000000000000,"sell_slot":347521281,"pnl_lamports":-12033407,"timestamp":1750217589} +{"mint":"85Xm7XbRaP4nWZwhg3gFzKdJRZHgeC66WsNcHuuapump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144916986,"tokens_received":0,"buy_slot":347521297,"sell_lamports":138131808,"tokens_sold":0,"sell_slot":347521302,"pnl_lamports":-6785178,"timestamp":1750217598} +{"mint":"DuvPcmGHwkXcrF5MxwxatU2AjtY8HhM2sKxPVzmGpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347522916,"sell_lamports":0,"tokens_sold":0,"sell_slot":347522921,"pnl_lamports":-5000,"timestamp":1750218248} +{"mint":"5xpTAv5mEYJKk5KgMPi1xuXwnr8qPAjH4DdQtSBupump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":152418032,"tokens_received":0,"buy_slot":347522992,"sell_lamports":142488375,"tokens_sold":0,"sell_slot":347523070,"pnl_lamports":-9929657,"timestamp":1750218308} +{"mint":"CgofhQEowd5bU5j5vjcKTmTrRLSLPtqzjVNKCJrdpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523088,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523093,"pnl_lamports":-5000,"timestamp":1750218317} +{"mint":"DQvmGbuchtC9PevTzpu4Pt6bYxEkhAoXEL2AogtWpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":145085980,"tokens_received":0,"buy_slot":347523095,"sell_lamports":138251351,"tokens_sold":5000000000000,"sell_slot":347523106,"pnl_lamports":-6834629,"timestamp":1750218322} +{"mint":"72fxuwMXixzJgkpGqA8vW3Dp381QRdPER2tfwuwBpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523118,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523136,"pnl_lamports":-5000,"timestamp":1750218335} +{"mint":"R5daazaATfx5vaA2axFHdvpZJ3uKspSteSaRJRRpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523161,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523167,"pnl_lamports":-5000,"timestamp":1750218347} +{"mint":"FnEbgV2fy9WwcTxN85DUujxHYjzQnRpq8V2Kc4STpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":145838304,"tokens_received":0,"buy_slot":347523181,"sell_lamports":139146182,"tokens_sold":5000000000000,"sell_slot":347523241,"pnl_lamports":-6692122,"timestamp":1750218377} +{"mint":"4ryoNE6jq92dpLrDSAoVUea3NC7fYznKsRit7Rtkpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523268,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523273,"pnl_lamports":-5000,"timestamp":1750218390} +{"mint":"5YNJDStETkwmjq4uhmgQ5Qw3ZCrd3XyDYYQPnCq9pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523281,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523288,"pnl_lamports":-5000,"timestamp":1750218396} +{"mint":"8H1UiWLhPEqXBN4bCyVfu8Dbd1gptYo2ULzb32VSpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523302,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523307,"pnl_lamports":-5000,"timestamp":1750218403} +{"mint":"6jrnjH8MgohX9NdtLMFEpW7ERnZjRn6W6CchrWE2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523310,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523318,"pnl_lamports":-5000,"timestamp":1750218408} +{"mint":"R5jY9aieD42yJr5ebagtF9eUmZSabqWHgF3Pq3ppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523352,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523364,"pnl_lamports":-5000,"timestamp":1750218426} +{"mint":"2JzgWCs4sBCNfhrBLKg2i6TGLJMak2FzhgLfwA7Mpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523367,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523379,"pnl_lamports":-5000,"timestamp":1750218432} +{"mint":"7wyNUAerada8d2biycudofwPTaz3zQmibn7Y4h4NFLV9","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":147532319,"tokens_received":0,"buy_slot":347523401,"sell_lamports":140628344,"tokens_sold":5000000000000,"sell_slot":347523408,"pnl_lamports":-6903975,"timestamp":1750218444} +{"mint":"7UVFcESedP2bqHH3vogpTSMjvbXoc76vPpu2tTqY4Tok","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144898214,"tokens_received":0,"buy_slot":347523412,"sell_lamports":166418629,"tokens_sold":5000000000000,"sell_slot":347523422,"pnl_lamports":21520415,"timestamp":1750218449} +{"mint":"R6Uzwg7ekTd2gUW1MZ8p8r1GNMEhvsDUG4H3aFDpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523428,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523435,"pnl_lamports":-5000,"timestamp":1750218454} +{"mint":"GdEh9vmcGNXzfqBtuuLqtZTDvCN6bw4SgZJQ4CjZekDh","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523451,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523453,"pnl_lamports":-5000,"timestamp":1750218462} +{"mint":"8NDjtwUV9Hcdi36xjn7PggJfxGhoKESJdeY5hti8pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":155218132,"tokens_received":0,"buy_slot":347523472,"sell_lamports":148361381,"tokens_sold":5000000000000,"sell_slot":347523477,"pnl_lamports":-6856751,"timestamp":1750218472} +{"mint":"H4qiPNnbpBn7DrtrMWdTZFDNZ1crakZioE9LQSSJpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523486,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523507,"pnl_lamports":-5000,"timestamp":1750218484} +{"mint":"5WuTwnqNa1GcocTpXmdwbgW5hrMrUt1ANqysr2pMpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":149963610,"tokens_received":0,"buy_slot":347523522,"sell_lamports":141390129,"tokens_sold":5000000000000,"sell_slot":347523526,"pnl_lamports":-8573481,"timestamp":1750218492} +{"mint":"R6mbY1YUufeS1cpGEA1zrgXmNaURF2EB269vyFWpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523535,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523546,"pnl_lamports":-5000,"timestamp":1750218500} +{"mint":"ewJSLCqhrcZq3V3EZ8JE1SbPFtEpqLxa4o5jSzfpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523556,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523567,"pnl_lamports":-5000,"timestamp":1750218508} +{"mint":"HTdPEk7uqWJayi4k9Uasy5vK6QiQQA7ZMMmS4sLipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523581,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523588,"pnl_lamports":-5000,"timestamp":1750218517} +{"mint":"v87i1Tmpm9eppeKqW1LJccvyU9tCAHi8Y7px1oEpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523611,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523616,"pnl_lamports":-5000,"timestamp":1750218529} +{"mint":"Da1v3xajSxzAszjWGkAPg9G9WA6rCLkr6UA1Y9p1pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":147318183,"tokens_received":0,"buy_slot":347523627,"sell_lamports":141364787,"tokens_sold":5000000000000,"sell_slot":347523629,"pnl_lamports":-5953396,"timestamp":1750218534} +{"mint":"3jeSGwURoNdTaQFqgXuY2Ab2bjhqiDo1dsFND6cTpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523654,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523678,"pnl_lamports":-5000,"timestamp":1750218554} +{"mint":"5iSjy2hiBXQiQWnerf2j841pvUDNte4oNhhCDnZypump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144992082,"tokens_received":0,"buy_slot":347523680,"sell_lamports":138159846,"tokens_sold":5000000000000,"sell_slot":347523683,"pnl_lamports":-6832236,"timestamp":1750218556} +{"mint":"6dnA1DmnGEgBHsN4AhNmhkxzVx2KWxeztGnBefwnpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523686,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523690,"pnl_lamports":-5000,"timestamp":1750218559} +{"mint":"R6nWKdqBatoS6BnzeCBkcoGgwQSfpsXzDTVqrHwpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523696,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523703,"pnl_lamports":-5000,"timestamp":1750218564} +{"mint":"CPxLWQWxojneW2yiu5ypFtdgMZD2638aRmFNSNVqpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523717,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523720,"pnl_lamports":-5000,"timestamp":1750218571} +{"mint":"GMG83dGQapxy8gZjCSZQRRnEnXuQAAvQNfPGWpVwstfZ","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523729,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523775,"pnl_lamports":-5000,"timestamp":1750218592} +{"mint":"9Ybv8kCJnVCDgkiYvTDyRuToMm2xL9DstaoMrq6XNckT","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523779,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523782,"pnl_lamports":-5000,"timestamp":1750218595} +{"mint":"5sAAvfFmp1VPZrkZe4a8JjhAHLgYJMXygweFyyFekXaJ","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523791,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523799,"pnl_lamports":-5000,"timestamp":1750218602} +{"mint":"bnUshhvY3LAthpDgvdNJpTfPRoTkoTxuBqpn1kXHNGk","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347523815,"sell_lamports":0,"tokens_sold":0,"sell_slot":347523823,"pnl_lamports":-5000,"timestamp":1750218611} +{"mint":"GTguetbZkuH5dBHQ2bE7YxZRG8jbWukbcweQKMhtpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":33686594,"tokens_received":0,"buy_slot":347651814,"sell_lamports":22383525,"tokens_sold":0,"sell_slot":347651819,"pnl_lamports":-11303069,"timestamp":1750269868} +{"mint":"DjeTfNx91DzBHXQYJSX1Kmddy9VC2HivFS92QeUDpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":31314865,"tokens_received":0,"buy_slot":347651828,"sell_lamports":26724424,"tokens_sold":0,"sell_slot":347651907,"pnl_lamports":-4590441,"timestamp":1750269904} +{"mint":"Cxr6B2E1KuEDzcs9JaexX1FwFpWu59Cs5H1mijupump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":103977367,"tokens_received":0,"buy_slot":347651912,"sell_lamports":91412904,"tokens_sold":0,"sell_slot":347651925,"pnl_lamports":-12564463,"timestamp":1750269911} +{"mint":"E4fniLy4uk2c6qpWHhcamCAK5TbMbLHcecrbY7MhH5Am","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":41010893,"tokens_received":0,"buy_slot":347651927,"sell_lamports":26871354,"tokens_sold":0,"sell_slot":347651942,"pnl_lamports":-14139539,"timestamp":1750269917} +{"mint":"DTCZd58vQ6UBsQjGCtyZSjwErWCt7oMSvJbS6RQfpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":41394187,"tokens_received":0,"buy_slot":347651954,"sell_lamports":32864512,"tokens_sold":1000000000000,"sell_slot":347651962,"pnl_lamports":-8529675,"timestamp":1750269925} +{"mint":"HVqKyb8qzKjdMT5cm196ZKugJe4QoTJ8qe3yPP9Rpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":35568697,"tokens_received":0,"buy_slot":347651970,"sell_lamports":23875372,"tokens_sold":1000000000000,"sell_slot":347651972,"pnl_lamports":-11693325,"timestamp":1750269929} +{"mint":"CMKt348vhbRbSRoeRnUqGexKMTmQkVLdmjygqs3Vpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":36813604,"tokens_received":0,"buy_slot":347651977,"sell_lamports":25504182,"tokens_sold":0,"sell_slot":347651988,"pnl_lamports":-11309422,"timestamp":1750269936} +{"mint":"8eY3nivHeQpofx4zCnxrLdBZG6M9xGxvV2BK56WKpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":33636182,"tokens_received":0,"buy_slot":347651992,"sell_lamports":19718522,"tokens_sold":0,"sell_slot":347652000,"pnl_lamports":-13917660,"timestamp":1750269941} +{"mint":"CPkAyHABqZYxnj83tuL6AB3C6xkiuSrqDzopaXwppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":31309207,"tokens_received":0,"buy_slot":347652002,"sell_lamports":19705766,"tokens_sold":1000000000000,"sell_slot":347652009,"pnl_lamports":-11603441,"timestamp":1750269944} +{"mint":"EFfQuW5n8PxTCDSQg7znVFr6nWs4M43j9zHyPU1zpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":31309209,"tokens_received":0,"buy_slot":347652032,"sell_lamports":19714901,"tokens_sold":1000000000000,"sell_slot":347652064,"pnl_lamports":-11594308,"timestamp":1750269965} +{"mint":"2ZNttFyToZn4xzGAWPiecgJMCmGw3YiqwbX7LcDkpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144973597,"tokens_received":0,"buy_slot":347657917,"sell_lamports":135113842,"tokens_sold":0,"sell_slot":347657931,"pnl_lamports":-9859755,"timestamp":1750272320} +{"mint":"FTaje9uPJ3goHcSHmx6qGfrYyzfHcJRKtNpYhqktpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":159277773,"tokens_received":0,"buy_slot":347657947,"sell_lamports":144392215,"tokens_sold":0,"sell_slot":347657976,"pnl_lamports":-14885558,"timestamp":1750272339} +{"mint":"7fc1XyeSgX4bqbFprQsj83kVvSjiJsnrnNFkfUoHpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":170315856,"tokens_received":0,"buy_slot":347657995,"sell_lamports":159954265,"tokens_sold":5000000000000,"sell_slot":347658004,"pnl_lamports":-10361591,"timestamp":1750272350} +{"mint":"FCfPzzrX2RcYKBjEGQpXUxrhseLibo1nDzTfKZp3pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":186326929,"tokens_received":0,"buy_slot":347658016,"sell_lamports":222443290,"tokens_sold":0,"sell_slot":347658019,"pnl_lamports":36116361,"timestamp":1750272356} +{"mint":"4PGQ1HQH5LtGD927w4sizLWBkD8GMu8iLx4pHecppump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347658027,"sell_lamports":0,"tokens_sold":0,"sell_slot":347658036,"pnl_lamports":-5000,"timestamp":1750272363} +{"mint":"B6YJ7vKJBsWts9Ecd8mPEf9q5fPvCyEpMyJAdFzFpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":144898232,"tokens_received":0,"buy_slot":347658047,"sell_lamports":135067837,"tokens_sold":5000000000000,"sell_slot":347658049,"pnl_lamports":-9830395,"timestamp":1750272368} +{"mint":"9P8ct4q8ZARFtaA2JRYXS2BEDEXkoQUpWtwbz3Hvpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":156502233,"tokens_received":0,"buy_slot":347658091,"sell_lamports":135175315,"tokens_sold":5000000000000,"sell_slot":347658104,"pnl_lamports":-21326918,"timestamp":1750272389} +{"mint":"7Cj2BiXpNKVneyQcYDo1a2M1tpXyGkcuiwU3wc11n2z5","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":378638037,"tokens_received":0,"buy_slot":347660845,"sell_lamports":366151276,"tokens_sold":10000000000000,"sell_slot":347660847,"pnl_lamports":-12486761,"timestamp":1750273487} +{"mint":"39Dyg4x5Qns6SWVEuVYBnfpMwTbE74osrV9ekuUQpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":291249420,"tokens_received":0,"buy_slot":347660879,"sell_lamports":280493105,"tokens_sold":10000000000000,"sell_slot":347660909,"pnl_lamports":-10756315,"timestamp":1750273512} +{"mint":"AaSFnZ9c1HJb6sUncmoWYyvTu2GGHMcsVKVApAR3pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":307306228,"tokens_received":0,"buy_slot":347660911,"sell_lamports":277392946,"tokens_sold":0,"sell_slot":347660941,"pnl_lamports":-29913282,"timestamp":1750273524} +{"mint":"GjFD4BD2ZXfDj2uRiWKL2bk5Vwjw6FbQKLdRQHiCpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":319624088,"tokens_received":0,"buy_slot":347660945,"sell_lamports":319423640,"tokens_sold":0,"sell_slot":347660958,"pnl_lamports":-200448,"timestamp":1750273531} +{"mint":"29LDXaLQyMfxVMaYFN49Pkq2DN3128W5Xs1cod5gpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":321597674,"tokens_received":0,"buy_slot":347660966,"sell_lamports":310240424,"tokens_sold":0,"sell_slot":347660967,"pnl_lamports":-11357250,"timestamp":1750273534} +{"mint":"9mYZUZ6q2YYSZyb89mnqqktLBpBhNDpaNcBquSaXpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":407502529,"tokens_received":0,"buy_slot":347660969,"sell_lamports":277393061,"tokens_sold":10000000000000,"sell_slot":347660974,"pnl_lamports":-130109468,"timestamp":1750273537} +{"mint":"H7p6mqKyVjYeEQTgAsHRExy3pz3pC6eqKwaJS6xxpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":355242021,"tokens_received":0,"buy_slot":347660993,"sell_lamports":315691735,"tokens_sold":0,"sell_slot":347660997,"pnl_lamports":-39550286,"timestamp":1750273547} +{"mint":"6SP2Ft7RDu1xKtH3fpHsm94Z84SL1NN57BX4Bb4Npump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":351861219,"tokens_received":0,"buy_slot":347664296,"sell_lamports":332772812,"tokens_sold":10000000000000,"sell_slot":347664313,"pnl_lamports":-19088407,"timestamp":1750274867} +{"mint":"DLkQ8GVG7EmSjNhNDygW9sVzrcDwUXdXrabWzpU2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":350764564,"tokens_received":0,"buy_slot":347664324,"sell_lamports":457910398,"tokens_sold":0,"sell_slot":347664327,"pnl_lamports":107145834,"timestamp":1750274873} +{"mint":"ZpoARLgzJmVTjnU1N62Nfiunyd2omcumccXjhbisL4Y","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347664339,"sell_lamports":0,"tokens_sold":0,"sell_slot":347664350,"pnl_lamports":-5000,"timestamp":1750274883} +{"mint":"7D38JZZ6C3azhFggWtxeNnGL8eoyw7tYPnePcBe1pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":351446695,"tokens_received":0,"buy_slot":347664355,"sell_lamports":276614126,"tokens_sold":0,"sell_slot":347664361,"pnl_lamports":-74832569,"timestamp":1750274888} +{"mint":"G4cccQhUouzAWCGpPWmkqXvJUbq8BBkC9HxM6xHspump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":369435393,"tokens_received":0,"buy_slot":347664377,"sell_lamports":354130840,"tokens_sold":10000000000000,"sell_slot":347664378,"pnl_lamports":-15304553,"timestamp":1750274894} +{"mint":"8QpZwfj98wi6v6sWD9c4TRjxTdH8MWCXeauhxSf6PF5w","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":472864273,"tokens_received":0,"buy_slot":347682852,"sell_lamports":506578913,"tokens_sold":0,"sell_slot":347682856,"pnl_lamports":33714640,"timestamp":1750282288} +{"mint":"BRNWNzumrc9x6rZBdwXoTgDgh8s1hehpcRGSMsUrpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":332048230,"tokens_received":0,"buy_slot":347682893,"sell_lamports":287515097,"tokens_sold":0,"sell_slot":347682900,"pnl_lamports":-44533133,"timestamp":1750282306} +{"mint":"3WsRWtCvYjf4hkQPesLSmPWU31u36MmF1TfWChUNvYAY","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347683876,"sell_lamports":0,"tokens_sold":0,"sell_slot":347683882,"pnl_lamports":-5000,"timestamp":1750282706} +{"mint":"GnTE6mHszVGDkz9QXcqKQvPNW66W7gv8fEwRbF3zBP6D","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347683903,"sell_lamports":0,"tokens_sold":0,"sell_slot":347683984,"pnl_lamports":-5000,"timestamp":1750282747} +{"mint":"jydouknW2GaN2rXZidBYfV1ozQkwUnEAXNSChctdsnN","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":479870273,"tokens_received":0,"buy_slot":347683996,"sell_lamports":481255002,"tokens_sold":0,"sell_slot":347684002,"pnl_lamports":1384729,"timestamp":1750282756} +{"mint":"H4F2vsKRzHJ8qiUT5Lp38ggE9PgB3dbx4oFMEAAh8W7j","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":5000,"tokens_received":0,"buy_slot":347684120,"sell_lamports":0,"tokens_sold":0,"sell_slot":347684123,"pnl_lamports":-5000,"timestamp":1750282803} +{"mint":"Aqof3jsSFkk19FeRtCR7HzHB9CUSn83sg7TRjCuSS3BM","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":403098867,"tokens_received":0,"buy_slot":347684174,"sell_lamports":388850105,"tokens_sold":0,"sell_slot":347684184,"pnl_lamports":-14248762,"timestamp":1750282828} +{"mint":"JALaa12J3tBoXSTSr3iwQAyugnpAzaLJGpHniZwVpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":295924374,"tokens_received":0,"buy_slot":347684224,"sell_lamports":285373372,"tokens_sold":10000000000000,"sell_slot":347684227,"pnl_lamports":-10551002,"timestamp":1750282846} +{"mint":"4tKgCaKthWAaHZoru2hazfgvtronp8RjKBTBmrK5pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":327811783,"tokens_received":0,"buy_slot":347684231,"sell_lamports":412300142,"tokens_sold":0,"sell_slot":347684236,"pnl_lamports":84488359,"timestamp":1750282849} +{"mint":"Cd64Z7G4mDs79JqMvHGq1AvUWNNqopA1CFkwnHeYpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":313154743,"tokens_received":0,"buy_slot":347684247,"sell_lamports":302994274,"tokens_sold":0,"sell_slot":347684249,"pnl_lamports":-10160469,"timestamp":1750282855} +{"mint":"5kW1YP7emJebpeFkZCJSWkM7DqkmJubecEhfBPKqpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":317753321,"tokens_received":0,"buy_slot":347684276,"sell_lamports":284052007,"tokens_sold":0,"sell_slot":347684285,"pnl_lamports":-33701314,"timestamp":1750282869} +{"mint":"8PiREhyPeRErKPqsnfQkiHHborRJpb8iiWknDxSCpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288464426,"tokens_received":0,"buy_slot":347685760,"sell_lamports":278763277,"tokens_sold":0,"sell_slot":347685838,"pnl_lamports":-9701149,"timestamp":1750283491} +{"mint":"HnjY5HJk9C66vx4j7VEi31yMBraVTg4m5iW2fQGWpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":305700847,"tokens_received":0,"buy_slot":347685924,"sell_lamports":274745221,"tokens_sold":0,"sell_slot":347685937,"pnl_lamports":-30955626,"timestamp":1750283529} +{"mint":"2XQ6wdbry1t6mhNsb6JY8XT4cy4NwYfyPmBmyeKypump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":311001924,"tokens_received":0,"buy_slot":347685951,"sell_lamports":274392928,"tokens_sold":0,"sell_slot":347686011,"pnl_lamports":-36608996,"timestamp":1750283557} +{"mint":"FdJsMFv4P71ty3CrRGEWZFCnDAhY8ELxC65gNDJvpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":344984494,"tokens_received":0,"buy_slot":347686029,"sell_lamports":435820988,"tokens_sold":10000000000000,"sell_slot":347686031,"pnl_lamports":90836494,"timestamp":1750283565} +{"mint":"7KHsbXfhQhQGfbAX5CCpV8La5BvzTyGiLhtVmxeJpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288653993,"tokens_received":0,"buy_slot":347686046,"sell_lamports":278392928,"tokens_sold":0,"sell_slot":347686128,"pnl_lamports":-10261065,"timestamp":1750283604} +{"mint":"CRFwRUrcxwAy4Up4r63NM2MCnT7tyNPVK3yAJj9vpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":305324623,"tokens_received":0,"buy_slot":347686259,"sell_lamports":275320147,"tokens_sold":0,"sell_slot":347686264,"pnl_lamports":-30004476,"timestamp":1750283657} +{"mint":"12y2Q8evxufgCmnBsAXP5L9dwEB3xvNv32DXbhuuuFnS","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":289042032,"tokens_received":0,"buy_slot":347686324,"sell_lamports":278392928,"tokens_sold":10000000000000,"sell_slot":347686405,"pnl_lamports":-10649104,"timestamp":1750283714} +{"mint":"8th48ghUL8tdmNwizWVtgvzhCy9mGEPJPZV21YZVv3ND","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":435128951,"tokens_received":0,"buy_slot":347686412,"sell_lamports":387127712,"tokens_sold":10000000000000,"sell_slot":347686418,"pnl_lamports":-48001239,"timestamp":1750283720} +{"mint":"6yRiSqPnaDPCQSB2SkSXdZELaEvEgYb41xUPkkVZpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":329175211,"tokens_received":0,"buy_slot":347686456,"sell_lamports":312419643,"tokens_sold":0,"sell_slot":347686505,"pnl_lamports":-16755568,"timestamp":1750283756} +{"mint":"4FqiHcXQJCWTE92anDMNq1KyJ5uYjN4dD4tEm1ex6H5Z","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":341956180,"tokens_received":0,"buy_slot":347686531,"sell_lamports":327195789,"tokens_sold":10000000000000,"sell_slot":347686536,"pnl_lamports":-14760391,"timestamp":1750283767} +{"mint":"9qm3muJEU1UUzv2SJKZ9qKorvFtg9jSni3FRVfxrpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":311720649,"tokens_received":0,"buy_slot":347686616,"sell_lamports":297364174,"tokens_sold":0,"sell_slot":347686622,"pnl_lamports":-14356475,"timestamp":1750283802} +{"mint":"9XZupxgDtySniAuTSxHNNW25nF3tvWsQJATg37MMpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":291310898,"tokens_received":0,"buy_slot":347686655,"sell_lamports":275674460,"tokens_sold":0,"sell_slot":347686657,"pnl_lamports":-15636438,"timestamp":1750283816} +{"mint":"VfnRfXhgaLxxgxpeEonko84ZhqT9cxVvd6PcqvZxWqM","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":435128951,"tokens_received":0,"buy_slot":347686659,"sell_lamports":387127712,"tokens_sold":0,"sell_slot":347686663,"pnl_lamports":-48001239,"timestamp":1750283819} +{"mint":"66xb6Q6AE6dFTsqRZBdXXD2FHcdXRwodWgS9bwk1pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":322282591,"tokens_received":0,"buy_slot":347686701,"sell_lamports":307911758,"tokens_sold":0,"sell_slot":347686703,"pnl_lamports":-14370833,"timestamp":1750283834} +{"mint":"8QAEP3JX1j1a11JCoDLcs2q4prDRvNxPhU4SGeicpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288088506,"tokens_received":0,"buy_slot":347686708,"sell_lamports":278394781,"tokens_sold":10000000000000,"sell_slot":347686789,"pnl_lamports":-9693725,"timestamp":1750283868} +{"mint":"Hn8TxYAYywRSMSKSfFCaSztCQG7za7qTpv4heSarpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":292534049,"tokens_received":0,"buy_slot":347686817,"sell_lamports":282752296,"tokens_sold":10000000000000,"sell_slot":347686898,"pnl_lamports":-9781753,"timestamp":1750283913} +{"mint":"7M12yzD1ASQjmBanzhSuR6DuM3ZCFDBuDFFjAA8vpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":321048816,"tokens_received":0,"buy_slot":347686905,"sell_lamports":276620856,"tokens_sold":0,"sell_slot":347686912,"pnl_lamports":-44427960,"timestamp":1750283919} +{"mint":"8f9wP7iHBA5pyGDaRUu5fbZGu4UCZmJEkZtQmegCoBHz","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":435128951,"tokens_received":0,"buy_slot":347686915,"sell_lamports":323648283,"tokens_sold":10000000000000,"sell_slot":347686920,"pnl_lamports":-111480668,"timestamp":1750283922} +{"mint":"ARqTuFKGb62WmE7vJBg7gbCX5U2yk95hpmrfowmUpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":314140763,"tokens_received":0,"buy_slot":347686922,"sell_lamports":299931173,"tokens_sold":0,"sell_slot":347686923,"pnl_lamports":-14209590,"timestamp":1750283923} +{"mint":"D8ckMoJ4ZqKaS62sPxdWrbN4wYp7snyWRX8nuEzkpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":290169595,"tokens_received":0,"buy_slot":347686955,"sell_lamports":276248915,"tokens_sold":10000000000000,"sell_slot":347686973,"pnl_lamports":-13920680,"timestamp":1750283942} +{"mint":"AbdSJ2xPafdUahWRdGdPuz4bKCvax2DVx1W5s4Q2pump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":392170980,"tokens_received":0,"buy_slot":347687017,"sell_lamports":379647746,"tokens_sold":0,"sell_slot":347687018,"pnl_lamports":-12523234,"timestamp":1750283960} +{"mint":"3VhMRcxzUmWpqgoRv71pnAUWzCoWUWTxcGgbqvXRpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288464615,"tokens_received":0,"buy_slot":347687070,"sell_lamports":274763463,"tokens_sold":10000000000000,"sell_slot":347687072,"pnl_lamports":-13701152,"timestamp":1750283982} +{"mint":"9aY4rmAvtFUAGgZ2iHKz3CuxewgYz2NH4UcoY8Tipump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":306733320,"tokens_received":0,"buy_slot":347687087,"sell_lamports":292476124,"tokens_sold":10000000000000,"sell_slot":347687098,"pnl_lamports":-14257196,"timestamp":1750283991} +{"mint":"Cb3Gpk6nqRzLZm2PvKACin8qgZqUXGaksVnNCqEupump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":291120836,"tokens_received":0,"buy_slot":347687106,"sell_lamports":275488788,"tokens_sold":10000000000000,"sell_slot":347687109,"pnl_lamports":-15632048,"timestamp":1750283997} +{"mint":"3KiYcBcBBnMzyhFgBMVAD3xytRP1tjt6ezWNSaWrpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":313967694,"tokens_received":0,"buy_slot":347687150,"sell_lamports":303369747,"tokens_sold":10000000000000,"sell_slot":347687153,"pnl_lamports":-10597947,"timestamp":1750284013} +{"mint":"8juTw5JwFTQCu48MLGWAqvw99VuxjiXqaHLJVoVepump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288407738,"tokens_received":0,"buy_slot":347687176,"sell_lamports":274522535,"tokens_sold":0,"sell_slot":347687191,"pnl_lamports":-13885203,"timestamp":1750284028} +{"mint":"9QDvRhURSoHeXiRBRegc9viGPsrUA5YbUGwBHCMXpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":329122976,"tokens_received":0,"buy_slot":347687204,"sell_lamports":284051989,"tokens_sold":10000000000000,"sell_slot":347687212,"pnl_lamports":-45070987,"timestamp":1750284036} +{"mint":"A2ehpGjMkeCryNN6ygV459bB7DyDgUuv9tGxn8UGpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":365496699,"tokens_received":0,"buy_slot":347687223,"sell_lamports":321844504,"tokens_sold":10000000000000,"sell_slot":347687227,"pnl_lamports":-43652195,"timestamp":1750284042} +{"mint":"HhsynLsfhq322wmRJ7jhEdKK8CLB8g3fEuTaWWT2yR7k","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":435128951,"tokens_received":0,"buy_slot":347687270,"sell_lamports":387127710,"tokens_sold":10000000000000,"sell_slot":347687272,"pnl_lamports":-48001241,"timestamp":1750284061} +{"mint":"ENx4DytUYunhxVDXMoQazMDzuHviKLNpQNjY7pMJpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":305324640,"tokens_received":0,"buy_slot":348530992,"sell_lamports":275320162,"tokens_sold":0,"sell_slot":348530999,"pnl_lamports":-30004478,"timestamp":1750623238} +{"mint":"3ZvCMKFVmunNzMt71M9PfrPjsbLjfTBB8ZH2mRvUpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288086634,"tokens_received":0,"buy_slot":348535865,"sell_lamports":274392966,"tokens_sold":10000000000000,"sell_slot":348535871,"pnl_lamports":-13693668,"timestamp":1750625194} +{"mint":"pVJz467uLWsEjpM8S7dhMCLZztwpFWBZtnAgo88eAVW","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":294237211,"tokens_received":0,"buy_slot":348538810,"sell_lamports":283649685,"tokens_sold":0,"sell_slot":348538819,"pnl_lamports":-10587526,"timestamp":1750626384} +{"mint":"7RV1MNLsPNnS2pw9Lxz1dJ8FtSndQtJmHAFDPxBspump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":312446438,"tokens_received":0,"buy_slot":348539436,"sell_lamports":275320162,"tokens_sold":0,"sell_slot":348539448,"pnl_lamports":-37126276,"timestamp":1750626637} +{"mint":"3o7Hty7d2Wj99FkXYYpYFjJURj9x1sRzgMg4bUNMpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":288266294,"tokens_received":0,"buy_slot":348539473,"sell_lamports":276116188,"tokens_sold":0,"sell_slot":348539545,"pnl_lamports":-12150106,"timestamp":1750626677} +{"mint":"EqDG46R2eRrhu53ywcE3St5qRFxnUPoE8UTY4xrFpump","creator":"6s86v9Scfo6FwhgMJ6gAQtecKYKi4u5y5tHnbSVqGYBM","buy_lamports":317753341,"tokens_received":0,"buy_slot":348740038,"sell_lamports":283734905,"tokens_sold":0,"sell_slot":348740047,"pnl_lamports":-34018436,"timestamp":1750707421} +{"mint":"88qNZrT2W13ytxjnCayT7j1yrM5wo8h4QQjZxC2Dpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":34822021,"tokens_received":0,"buy_slot":348749679,"sell_lamports":24711721,"tokens_sold":1000000000000,"sell_slot":348749684,"pnl_lamports":-10110300,"timestamp":1750711298} +{"mint":"B3t3RnV8Q2XGuT5vKMPso6AZgEaxu91bVAatkyxipump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33499429,"tokens_received":0,"buy_slot":348749733,"sell_lamports":24847074,"tokens_sold":1000000000000,"sell_slot":348749740,"pnl_lamports":-8652355,"timestamp":1750711320} +{"mint":"EtqDQssJeHtzHRRPuKBkDrhJyLTWknXzdTLQMNXDpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":32630843,"tokens_received":0,"buy_slot":348749764,"sell_lamports":23436892,"tokens_sold":1000000000000,"sell_slot":348749771,"pnl_lamports":-9193951,"timestamp":1750711331} +{"mint":"9bAF3JQJayKw1H4km9ZMmACpr61KapdoJYsTLTQeivqy","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":36366188,"tokens_received":0,"buy_slot":348755001,"sell_lamports":29260596,"tokens_sold":0,"sell_slot":348755004,"pnl_lamports":-7105592,"timestamp":1750713435} +{"mint":"FSbSa9Uypd2rvquFCLAo9fpYTKQurAXiPP9VF9b7pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33474832,"tokens_received":0,"buy_slot":348755009,"sell_lamports":26883483,"tokens_sold":0,"sell_slot":348755018,"pnl_lamports":-6591349,"timestamp":1750713440} +{"mint":"88rPZtRTfXtq7J1DkT697zzQg2pda3wYV1cK8aKwpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33204059,"tokens_received":0,"buy_slot":348812776,"sell_lamports":28557558,"tokens_sold":0,"sell_slot":348812779,"pnl_lamports":-4646501,"timestamp":1750736664} +{"mint":"AkCPPeaTa4CXzMDuSPWyZq13oEdUaSWWnN6nLRswpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":56033618,"tokens_received":0,"buy_slot":348813757,"sell_lamports":50817696,"tokens_sold":0,"sell_slot":348813765,"pnl_lamports":-5215922,"timestamp":1750737058} +{"mint":"7qxFW16XW1UWWY1wyGvFpPHAyE8FGk1o1TRJ2jzXpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":32250132,"tokens_received":0,"buy_slot":348814248,"sell_lamports":27078277,"tokens_sold":1000000000000,"sell_slot":348814326,"pnl_lamports":-5171855,"timestamp":1750737285} +{"mint":"i4ksN5rHgktSehPjkhbCcRCthGzbRFBKVbsX6Wxpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":31361989,"tokens_received":0,"buy_slot":348815496,"sell_lamports":26751960,"tokens_sold":1000000000000,"sell_slot":348815503,"pnl_lamports":-4610029,"timestamp":1750737756} +{"mint":"9AeRMCq3K6qkZRARQM9WxVbdamEXSgtdDaKgi16Apump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":34346346,"tokens_received":0,"buy_slot":348815629,"sell_lamports":26718522,"tokens_sold":1000000000000,"sell_slot":348815638,"pnl_lamports":-7627824,"timestamp":1750737810} +{"mint":"GHXRJqNM2cyUQc8VrvLi1Ztz6prwQeGiVYfqGMDxpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33337197,"tokens_received":0,"buy_slot":348815680,"sell_lamports":27996655,"tokens_sold":0,"sell_slot":348815686,"pnl_lamports":-5340542,"timestamp":1750737830} +{"mint":"AuGFGJwd296eMAQYuQfKQq65wWPVCBY4eeTBPQGrpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":35303726,"tokens_received":0,"buy_slot":348815713,"sell_lamports":29991635,"tokens_sold":0,"sell_slot":348815720,"pnl_lamports":-5312091,"timestamp":1750737843} +{"mint":"3J1xNU6kSPqZ1ZMs78RYNtpbGmyenfMmvRyj6339pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33011009,"tokens_received":0,"buy_slot":348816097,"sell_lamports":26851735,"tokens_sold":0,"sell_slot":348816500,"pnl_lamports":-6159274,"timestamp":1750738155} +{"mint":"ESEF31DFwc4ZWABSDB6g3KbssZduRYe6rTgbJvGrV6oA","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":31309207,"tokens_received":0,"buy_slot":348816781,"sell_lamports":26719259,"tokens_sold":1000000000000,"sell_slot":348817184,"pnl_lamports":-4589948,"timestamp":1750738431} +{"mint":"B7GTauiL3TovWhkGJ3VESZEBzdAKJdau1X8Qm5yzpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33300595,"tokens_received":0,"buy_slot":348818123,"sell_lamports":26709449,"tokens_sold":1000000000000,"sell_slot":348818213,"pnl_lamports":-6591146,"timestamp":1750738842} +{"mint":"4giCz8P46ADLqmxTyivtGnCguYqGH4EBd2CbFLGHpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":35150107,"tokens_received":0,"buy_slot":348819072,"sell_lamports":30950293,"tokens_sold":1000000000000,"sell_slot":348819077,"pnl_lamports":-4199814,"timestamp":1750739190} +{"mint":"CoMMuhRaH9iLZxHC9E6RRd3yyE7dx2yniGyixrKMXh1P","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":31309207,"tokens_received":0,"buy_slot":348831244,"sell_lamports":26818359,"tokens_sold":1000000000000,"sell_slot":348832247,"pnl_lamports":-4490848,"timestamp":1750744486} +{"mint":"64MQsQ8HWxLJkrDEHESCv12jnDyjygnvPsJ93RUgCWdq","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":31309207,"tokens_received":0,"buy_slot":348832312,"sell_lamports":26793653,"tokens_sold":1000000000000,"sell_slot":348833362,"pnl_lamports":-4515554,"timestamp":1750744938} +{"mint":"5kMazLt27ieg9STMtYJ34f1fabxNmuEYcJhrXrVh26M7","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":31309207,"tokens_received":0,"buy_slot":348833394,"sell_lamports":26700224,"tokens_sold":1000000000000,"sell_slot":348834397,"pnl_lamports":-4608983,"timestamp":1750745353} +{"mint":"DjMhGUMwo4MPbzw2DGuVvymPTKKfgTCeR6yhSfRypump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33397128,"tokens_received":0,"buy_slot":348834398,"sell_lamports":27067350,"tokens_sold":1000000000000,"sell_slot":348834408,"pnl_lamports":-6329778,"timestamp":1750745358} +{"mint":"7ssjU8pYAr2cEqwvkagzRzM2CH28RiNb5MEq78QZHP5i","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":59626914,"tokens_received":0,"buy_slot":348835300,"sell_lamports":55182365,"tokens_sold":0,"sell_slot":348835322,"pnl_lamports":-4444549,"timestamp":1750745726} +{"mint":"BYU4vT8qWQbb2wWDemv1S33Kb3Mg8oPDvtYfasuupump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":65716073,"tokens_received":0,"buy_slot":348835329,"sell_lamports":57647290,"tokens_sold":0,"sell_slot":348835336,"pnl_lamports":-8068783,"timestamp":1750745732} +{"mint":"95GgR39yenDuxWJAJmyAnSzamW7bfVxNDkMuVEdBQDc5","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":59626914,"tokens_received":0,"buy_slot":348835382,"sell_lamports":54546531,"tokens_sold":0,"sell_slot":348835435,"pnl_lamports":-5080383,"timestamp":1750745772} +{"mint":"38UdutHoZXsrt8CgYFGte2MKjWGfwnNqkfJUMt5RnYfG","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":59627292,"tokens_received":0,"buy_slot":348840114,"sell_lamports":50457557,"tokens_sold":0,"sell_slot":348840128,"pnl_lamports":-9169735,"timestamp":1750747663} +{"mint":"2s7PnQyG2bLjt68jncLx6oZMyxDqb3z2NVx1hygmpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63930981,"tokens_received":0,"buy_slot":348840171,"sell_lamports":50824219,"tokens_sold":0,"sell_slot":348840180,"pnl_lamports":-13106762,"timestamp":1750747685} +{"mint":"3EM51q1mX12WLFpF96YcZkpRMutDsTysCg8Av3Vfpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63643571,"tokens_received":0,"buy_slot":348840696,"sell_lamports":50551763,"tokens_sold":2000000000000,"sell_slot":348840703,"pnl_lamports":-13091808,"timestamp":1750747894} +{"mint":"2wnUBZeKbAP1FgkDKbg38zvJaJi1vfADH95Nhtyypump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":61892059,"tokens_received":0,"buy_slot":348840710,"sell_lamports":52677486,"tokens_sold":0,"sell_slot":348840711,"pnl_lamports":-9214573,"timestamp":1750747897} +{"mint":"XnvGxuhRJ5qKykyCsSCLdQ8mNtCQfDpXPgGr7VEpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":70515426,"tokens_received":0,"buy_slot":348840723,"sell_lamports":61207149,"tokens_sold":0,"sell_slot":348840724,"pnl_lamports":-9308277,"timestamp":1750747903} +{"mint":"8tx9X4zhqLtpT8qLfxY65kCfQgJLYfNGUdUFZuGjpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":62293709,"tokens_received":0,"buy_slot":348840733,"sell_lamports":53071178,"tokens_sold":2000000000000,"sell_slot":348840734,"pnl_lamports":-9222531,"timestamp":1750747907} +{"mint":"4tXD7WHgn2ccxmkbCZ3s81CKKXGEDMiEp6qTvvqXpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":154426662,"tokens_received":0,"buy_slot":348841422,"sell_lamports":139611451,"tokens_sold":5000000000000,"sell_slot":348841431,"pnl_lamports":-14815211,"timestamp":1750748189} +{"mint":"Hv66WMPFagcSbW5kNRQ37Vvudf4uTjAv7oVZQKtZpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":144899153,"tokens_received":0,"buy_slot":348841457,"sell_lamports":138040862,"tokens_sold":5000000000000,"sell_slot":348841759,"pnl_lamports":-6858291,"timestamp":1750748324} +{"mint":"DDiUg3cmaEAt2uZTAnw4hciyrC5re5ZPuofwADA5pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":156083841,"tokens_received":0,"buy_slot":348841764,"sell_lamports":139250703,"tokens_sold":5000000000000,"sell_slot":348841773,"pnl_lamports":-16833138,"timestamp":1750748329} +{"mint":"EtHhzzKgeqMJVEqj8kcMctEy9v7hMeD6VMNPGWo9pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":144992007,"tokens_received":0,"buy_slot":348841778,"sell_lamports":139088741,"tokens_sold":5000000000000,"sell_slot":348842081,"pnl_lamports":-5903266,"timestamp":1750748453} +{"mint":"5KPEoMgmhQjs5LxAN2aAt5bubQQcYoHkJrPKQPBnpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":154426682,"tokens_received":0,"buy_slot":348843341,"sell_lamports":146879709,"tokens_sold":0,"sell_slot":348843349,"pnl_lamports":-7546973,"timestamp":1750748959} +{"mint":"4JE5RU41HiWy6A1C4zPW1hCnCdANhsSgWJZGvAbsdDMS","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":144898214,"tokens_received":0,"buy_slot":348843440,"sell_lamports":138039952,"tokens_sold":0,"sell_slot":348843643,"pnl_lamports":-6858262,"timestamp":1750749078} +{"mint":"Dx6JEfVaqey9ZAAAnvrKv42AWVCWpwiJt3NJYydypump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":163277721,"tokens_received":0,"buy_slot":348843644,"sell_lamports":158473874,"tokens_sold":0,"sell_slot":348843652,"pnl_lamports":-4803847,"timestamp":1750749082} +{"mint":"ByvKVN91Jcw3rpeM8bSGX7aVG8ALkCFeqCoKZ8S7pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":5000,"tokens_received":0,"buy_slot":348843670,"sell_lamports":0,"tokens_sold":0,"sell_slot":348843677,"pnl_lamports":-5000,"timestamp":1750749091} +{"mint":"4wW6FvqqhCwpp54xXPyQnqwnCeHLYGUygfpjDCz2pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":144992082,"tokens_received":0,"buy_slot":348843696,"sell_lamports":139705382,"tokens_sold":0,"sell_slot":348843899,"pnl_lamports":-5286700,"timestamp":1750749182} +{"mint":"BywScsj9XgcxUCmizhD2ZsCTWnvm2AYPf3rLh7ggpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":313193009,"tokens_received":0,"buy_slot":348845062,"sell_lamports":296730083,"tokens_sold":0,"sell_slot":348845068,"pnl_lamports":-16462926,"timestamp":1750749649} +{"mint":"FWYeJNcKckKD5gEkofe81BqQsxXyzGqf4o86ACG3pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":313195045,"tokens_received":0,"buy_slot":348845137,"sell_lamports":296731976,"tokens_sold":10000000000000,"sell_slot":348845143,"pnl_lamports":-16463069,"timestamp":1750749680} +{"mint":"Ghf16Uo4S6FmVzqUWejiT23ydWxiK3pQoPfPKvNLcFZN","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":288086634,"tokens_received":0,"buy_slot":348845505,"sell_lamports":278392947,"tokens_sold":10000000000000,"sell_slot":348845658,"pnl_lamports":-9693687,"timestamp":1750749887} +{"mint":"CEiBAsaG1jSYkvYtv65vrgxqLVyPgbtAodxNCRYspump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":314419813,"tokens_received":0,"buy_slot":348845670,"sell_lamports":277892928,"tokens_sold":10000000000000,"sell_slot":348845677,"pnl_lamports":-36526885,"timestamp":1750749895} +{"mint":"2SdcFK2nXiVJWTyG1qxUsQuPZA4BmUex77mxXGRnpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":337630594,"tokens_received":0,"buy_slot":348845684,"sell_lamports":298424223,"tokens_sold":10000000000000,"sell_slot":348845693,"pnl_lamports":-39206371,"timestamp":1750749901} +{"mint":"Hb9a7eSFQdauPaC9uT9SmtTugRGVAutLFGwbJF9upump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":158164387,"tokens_received":0,"buy_slot":348846820,"sell_lamports":147665459,"tokens_sold":0,"sell_slot":348846824,"pnl_lamports":-10498928,"timestamp":1750750359} +{"mint":"G6wD1MiBDwhChjTwNMxQFke71CYK3wSG8ouRMUwZp5SV","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":144898214,"tokens_received":0,"buy_slot":348847162,"sell_lamports":138039952,"tokens_sold":5000000000000,"sell_slot":348847248,"pnl_lamports":-6858262,"timestamp":1750750531} +{"mint":"5PAAjsJta7j5fobWM9YMBs6w1quq1faYxLpRmbKZpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":163277710,"tokens_received":0,"buy_slot":348847272,"sell_lamports":145386402,"tokens_sold":5000000000000,"sell_slot":348847310,"pnl_lamports":-17891308,"timestamp":1750750556} +{"mint":"3U2MfYZxdFRQT9nGb8ZfMbiTp115ddH3FNKbHqbspump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":240557728,"tokens_received":0,"buy_slot":348848043,"sell_lamports":225797371,"tokens_sold":8000000000000,"sell_slot":348848049,"pnl_lamports":-14760357,"timestamp":1750750854} +{"mint":"B87cFXzCEFG8xko4y1vTroFfd2Bx3z6w9o5fzgXvpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":262531414,"tokens_received":0,"buy_slot":348848071,"sell_lamports":243690170,"tokens_sold":8000000000000,"sell_slot":348848073,"pnl_lamports":-18841244,"timestamp":1750750864} +{"mint":"59M9CEptdEKVRHiJhifJEppJAP1tHK7cigQJ1Rp2pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":230649918,"tokens_received":0,"buy_slot":348848113,"sell_lamports":222093654,"tokens_sold":0,"sell_slot":348848165,"pnl_lamports":-8556264,"timestamp":1750750903} +{"mint":"W1m7WqD8gaMU24fPamTCa21vMuVyq1RkxYAi48qpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":32893681,"tokens_received":0,"buy_slot":348850445,"sell_lamports":29311907,"tokens_sold":1000000000000,"sell_slot":348850455,"pnl_lamports":-3581774,"timestamp":1750751827} +{"mint":"7q1NLLamka5W2HMiYuY9WiZEX53gYtcGxDUA6eutpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":35298671,"tokens_received":0,"buy_slot":348850469,"sell_lamports":29310040,"tokens_sold":0,"sell_slot":348850475,"pnl_lamports":-5988631,"timestamp":1750751835} +{"mint":"7afH9uykpURnQ4iZwzvG56UVe12U3xaqgA59WKA9pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":38113536,"tokens_received":0,"buy_slot":348850489,"sell_lamports":37218322,"tokens_sold":0,"sell_slot":348850491,"pnl_lamports":-895214,"timestamp":1750751841} +{"mint":"DYvBqTkRBb4a1Rq6qQynGHvJx8mUXJ57HbnqZPFGpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":32887781,"tokens_received":0,"buy_slot":348850517,"sell_lamports":29677597,"tokens_sold":0,"sell_slot":348850524,"pnl_lamports":-3210184,"timestamp":1750751854} +{"mint":"2SuZKRgnv79boZfAmWaWGNB1eh1u4TeCS6t2A8aypump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":30336949,"tokens_received":0,"buy_slot":348851141,"sell_lamports":27707612,"tokens_sold":0,"sell_slot":348851173,"pnl_lamports":-2629337,"timestamp":1750752115} +{"mint":"6SSroMAYNH2ALPXDjcUabeLhCJ9Pf3GYBBtzSJeDpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":31077283,"tokens_received":0,"buy_slot":348851184,"sell_lamports":27766686,"tokens_sold":0,"sell_slot":348851189,"pnl_lamports":-3310597,"timestamp":1750752123} +{"mint":"G3wAS3VSCbup1WFgZFRqDBdXJhPJgLeEDwLpg2k3pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":36911512,"tokens_received":0,"buy_slot":348851741,"sell_lamports":38879167,"tokens_sold":0,"sell_slot":348851744,"pnl_lamports":1967655,"timestamp":1750752347} +{"mint":"8E1Nga4Ks6vaaZseotTh3gsJKaTGChqXihRLy9M5pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":32998500,"tokens_received":0,"buy_slot":348851790,"sell_lamports":29510227,"tokens_sold":1000000000000,"sell_slot":348851793,"pnl_lamports":-3488273,"timestamp":1750752368} +{"mint":"9hTNAimEz3D9Xv2gwqGEanhE3QzriKVt6NHqhFaEpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":35090224,"tokens_received":0,"buy_slot":348851816,"sell_lamports":31536764,"tokens_sold":1000000000000,"sell_slot":348851818,"pnl_lamports":-3553460,"timestamp":1750752378} +{"mint":"CMRaF9TmsJvk6aRX95vzgZFQtoyRi6EvyXMKmjw9pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":34544665,"tokens_received":0,"buy_slot":348851831,"sell_lamports":30413481,"tokens_sold":0,"sell_slot":348851832,"pnl_lamports":-4131184,"timestamp":1750752383} +{"mint":"nX8Det3HEpa1m2VAXrkeF75CFzkG18vvuEvdPtMpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":33083505,"tokens_received":0,"buy_slot":348851842,"sell_lamports":31023264,"tokens_sold":0,"sell_slot":348851848,"pnl_lamports":-2060241,"timestamp":1750752389} +{"mint":"CGfSih9Ls2f6ngnxMHcPeVerLxfyQDE4F8iowupBpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":58672448,"tokens_received":0,"buy_slot":348852512,"sell_lamports":55844128,"tokens_sold":2000000000000,"sell_slot":348852595,"pnl_lamports":-2828320,"timestamp":1750752687} +{"mint":"EBDgRzqq26677T7xbA4jhyDcRHmzboEg1Y6FYZtzpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":58674304,"tokens_received":0,"buy_slot":348852605,"sell_lamports":56542102,"tokens_sold":2000000000000,"sell_slot":348852688,"pnl_lamports":-2132202,"timestamp":1750752724} +{"mint":"C37mTvcaiL3jgVHDE86KrG1mNBZ8rABQBnrAaTn3pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":334214149,"tokens_received":0,"buy_slot":348852699,"sell_lamports":327276460,"tokens_sold":2000000000000,"sell_slot":348852714,"pnl_lamports":-6937689,"timestamp":1750752734} +{"mint":"56PoMj2gagSkA3dXzomZAH23X5GrkGnexThgzBWWpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":59707519,"tokens_received":0,"buy_slot":348853382,"sell_lamports":56496588,"tokens_sold":0,"sell_slot":348853465,"pnl_lamports":-3210931,"timestamp":1750753038} +{"mint":"3fxc1hJ7JQ4LQjoS1NrCHtMViRe4eU7MhyJh16sZpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":68240263,"tokens_received":0,"buy_slot":348853486,"sell_lamports":64895234,"tokens_sold":0,"sell_slot":348853489,"pnl_lamports":-3345029,"timestamp":1750753047} +{"mint":"55w2WX4VVC6bPYUspCs6ZCDBW2YZ6dTCAfXTQvRsvuPB","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":58640691,"tokens_received":0,"buy_slot":348853530,"sell_lamports":55537060,"tokens_sold":2000000000000,"sell_slot":348853613,"pnl_lamports":-3103631,"timestamp":1750753096} +{"mint":"GytSoBW3hPr1uEYobsyYmdJLowHDnEjgsVfqAGZ8pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":83452730,"tokens_received":0,"buy_slot":348853650,"sell_lamports":79257200,"tokens_sold":2000000000000,"sell_slot":348853655,"pnl_lamports":-4195530,"timestamp":1750753113} +{"mint":"7qwYv16DNYCD5yHuvQtU5ZxbY9vodBfBrf73r8Kepump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63401503,"tokens_received":0,"buy_slot":348853683,"sell_lamports":62121470,"tokens_sold":2000000000000,"sell_slot":348853687,"pnl_lamports":-1280033,"timestamp":1750753126} +{"mint":"7BRQYQosZBLGzPeNCqRVMbMovEPyyVgv4P8SNpvHpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":60653849,"tokens_received":0,"buy_slot":348853694,"sell_lamports":57138474,"tokens_sold":2000000000000,"sell_slot":348853776,"pnl_lamports":-3515375,"timestamp":1750753164} +{"mint":"Go6g4aZXZ3RsgXFRNANvYp1pPztyLrS2rDTk4LaHpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":64411884,"tokens_received":0,"buy_slot":348853820,"sell_lamports":59904272,"tokens_sold":2000000000000,"sell_slot":348853825,"pnl_lamports":-4507612,"timestamp":1750753184} +{"mint":"EJZJ22gQqf9XgtjZ9N31pJCRtakjyd4YCmcdmFwLpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":87052436,"tokens_received":0,"buy_slot":348855812,"sell_lamports":83361598,"tokens_sold":0,"sell_slot":348855865,"pnl_lamports":-3690838,"timestamp":1750754013} +{"mint":"GBBrsJEjVomNxGYt2Dkrhfi4wJbzwUsP8RTyW9Rzpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":90031336,"tokens_received":0,"buy_slot":348859474,"sell_lamports":84832357,"tokens_sold":3000000000000,"sell_slot":348859556,"pnl_lamports":-5198979,"timestamp":1750755507} +{"mint":"3hmxuDesxQD7ZrVXn28QnhWwF6C91fbPvxBudCZipump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":94947622,"tokens_received":0,"buy_slot":348859569,"sell_lamports":95767332,"tokens_sold":0,"sell_slot":348859604,"pnl_lamports":819710,"timestamp":1750755526} +{"mint":"FaGKu4x2gx7xMLnZSd8M6Aq6eNZKRNcdBUgUrtuLpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":87007606,"tokens_received":0,"buy_slot":348859744,"sell_lamports":83317598,"tokens_sold":0,"sell_slot":348859789,"pnl_lamports":-3690008,"timestamp":1750755600} +{"mint":"HqAhSCmcCVLtGdXoPeomAmQs3Jebk94TgeybRGSUpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":98105407,"tokens_received":0,"buy_slot":348859840,"sell_lamports":88903282,"tokens_sold":0,"sell_slot":348859849,"pnl_lamports":-9202125,"timestamp":1750755625} +{"mint":"WFdd1g4EY54QKixKLgnpU7WhP1Re7PE3soka8EKpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":5000,"tokens_received":0,"buy_slot":348859860,"sell_lamports":0,"tokens_sold":0,"sell_slot":348859868,"pnl_lamports":-5000,"timestamp":1750755632} +{"mint":"BzbwMagMLkU5y7SaywZneiUuznwcwgEmFLGWDRGr78Lv","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":79093510,"tokens_received":0,"buy_slot":348921450,"sell_lamports":79088938,"tokens_sold":2000000000000,"sell_slot":348921453,"pnl_lamports":-4572,"timestamp":1750780447} +{"mint":"25y7YcNghk9TMHYynYZwKYgBUK9x4tuhhaJbnHJ2pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63601160,"tokens_received":0,"buy_slot":348921487,"sell_lamports":59132111,"tokens_sold":0,"sell_slot":348921494,"pnl_lamports":-4469049,"timestamp":1750780463} +{"mint":"5n4iU2VP4k4rNaqPsWxgVcHz28a8j1CMGnHWbWqLpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":65198490,"tokens_received":0,"buy_slot":348921528,"sell_lamports":59132115,"tokens_sold":2000000000000,"sell_slot":348921535,"pnl_lamports":-6066375,"timestamp":1750780479} +{"mint":"YVrBU2ZxMSi8gdMDTRxcofKnSYmWs9Vm9sbnvHWpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":77811086,"tokens_received":0,"buy_slot":348921549,"sell_lamports":75745702,"tokens_sold":0,"sell_slot":348921552,"pnl_lamports":-2065384,"timestamp":1750780486} +{"mint":"FBDFQdN1ztSVy4thoPibtECeZg3kZ35Nw3FdMCNEe19e","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":65566214,"tokens_received":0,"buy_slot":348921597,"sell_lamports":56409159,"tokens_sold":0,"sell_slot":348921601,"pnl_lamports":-9157055,"timestamp":1750780506} +{"mint":"7KGg12TnBD497VvTUyBEx9WndmTrtokWSTe33FGtpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":66800206,"tokens_received":0,"buy_slot":348921609,"sell_lamports":60570130,"tokens_sold":0,"sell_slot":348921615,"pnl_lamports":-6230076,"timestamp":1750780511} +{"mint":"7to5A8SaV8jM4L86CV2FRd7X7mcoF3fmk2ZmigbQPsZa","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":85237997,"tokens_received":0,"buy_slot":348921634,"sell_lamports":75458701,"tokens_sold":0,"sell_slot":348921639,"pnl_lamports":-9779296,"timestamp":1750780521} +{"mint":"4BrkzdZaNzs4rN5VoeqQjN9496c1U7sKPgQmzizTpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":69490872,"tokens_received":0,"buy_slot":348921648,"sell_lamports":83127494,"tokens_sold":2000000000000,"sell_slot":348921649,"pnl_lamports":13636622,"timestamp":1750780525} +{"mint":"HBFKY3oeXsTBj2hzXZgPiQze2Q8PgtKzEesfzPFhAe7E","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":58674678,"tokens_received":0,"buy_slot":348921685,"sell_lamports":55444203,"tokens_sold":2000000000000,"sell_slot":348921705,"pnl_lamports":-3230475,"timestamp":1750780549} +{"mint":"GzRmd7nD8dbggpCxFiMwEmE4fwJE5KwgzXa98mXLpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63647684,"tokens_received":0,"buy_slot":348921772,"sell_lamports":55833614,"tokens_sold":2000000000000,"sell_slot":348921780,"pnl_lamports":-7814070,"timestamp":1750780579} +{"mint":"81enfW3nvwMuUZPP3fB3m7X4FrTB3jF3bXSMKnEKpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":61397067,"tokens_received":0,"buy_slot":348921810,"sell_lamports":61590721,"tokens_sold":2000000000000,"sell_slot":348921812,"pnl_lamports":193654,"timestamp":1750780592} +{"mint":"YWHvhAWSMddbnWMtZ1yV1nhDNVAtA4SPJwJnc7Cpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":76060939,"tokens_received":0,"buy_slot":348921836,"sell_lamports":84497393,"tokens_sold":2000000000000,"sell_slot":348921839,"pnl_lamports":8436454,"timestamp":1750780603} +{"mint":"7YcGpgdcGe12mPgQSGqvbBUjTBQrnQ7ncZwhJD6spump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":65789598,"tokens_received":0,"buy_slot":348921884,"sell_lamports":78228983,"tokens_sold":2000000000000,"sell_slot":348921886,"pnl_lamports":12439385,"timestamp":1750780621} +{"mint":"F9p4NK7kQyik7PTyESZP7Qq9LB2Mi7e4YSvvApAqpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":62940981,"tokens_received":0,"buy_slot":348921923,"sell_lamports":55774219,"tokens_sold":2000000000000,"sell_slot":348921930,"pnl_lamports":-7166762,"timestamp":1750780638} +{"mint":"H9YKYRF3QSaN6gLiSHXLgN9jkLL8YNy3N6LfiQ7Zpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":66451413,"tokens_received":0,"buy_slot":348921948,"sell_lamports":58970843,"tokens_sold":2000000000000,"sell_slot":348921956,"pnl_lamports":-7480570,"timestamp":1750780649} +{"mint":"DHAkZieMnbcNBBoRaPriKRhyJL96r4SSnazbaQJpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":62835541,"tokens_received":0,"buy_slot":348921988,"sell_lamports":58377427,"tokens_sold":0,"sell_slot":348921996,"pnl_lamports":-4458114,"timestamp":1750780666} +{"mint":"2iMHfPLU1mVKQ1LA1wxX141ppXRebbFJaPRiq4QGpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":77534598,"tokens_received":0,"buy_slot":348922008,"sell_lamports":74746215,"tokens_sold":0,"sell_slot":348922061,"pnl_lamports":-2788383,"timestamp":1750780690} +{"mint":"5sKaSuEjnKCk78dhCnMHrBw8hibkuvAu4wXBvr18pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63612975,"tokens_received":0,"buy_slot":348922082,"sell_lamports":59132115,"tokens_sold":2000000000000,"sell_slot":348922094,"pnl_lamports":-4480860,"timestamp":1750780704} +{"mint":"GqBGxcrFURRRzmSDVBAWbvdCaAr7ZiS46u9xF5BTpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":58640654,"tokens_received":0,"buy_slot":348922095,"sell_lamports":55446996,"tokens_sold":0,"sell_slot":348922131,"pnl_lamports":-3193658,"timestamp":1750780719} +{"mint":"Gz9fgqH1zdjrQcGSAKM3p1LhbjwSYZYFbUEgaxdkpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":64099711,"tokens_received":0,"buy_slot":348922139,"sell_lamports":60112225,"tokens_sold":0,"sell_slot":348922141,"pnl_lamports":-3987486,"timestamp":1750780723} +{"mint":"JAULmkXKAYPb7LtzLwKRvv9RuhKfa2BHqLRnFzCUpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":62354825,"tokens_received":0,"buy_slot":348922192,"sell_lamports":57422024,"tokens_sold":2000000000000,"sell_slot":348922201,"pnl_lamports":-4932801,"timestamp":1750780747} +{"mint":"5qWm348XTs6n5fygzumMHmjr8K7CggSgPQfMo3Sepump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":66035518,"tokens_received":0,"buy_slot":348922228,"sell_lamports":68444613,"tokens_sold":2000000000000,"sell_slot":348922230,"pnl_lamports":2409095,"timestamp":1750780759} +{"mint":"9yzz3jASKveAsFy28eCE67DMTtFukMBsqY23RAYzpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":58636918,"tokens_received":0,"buy_slot":348922259,"sell_lamports":57536067,"tokens_sold":2000000000000,"sell_slot":348922260,"pnl_lamports":-1100851,"timestamp":1750780771} +{"mint":"DC8hVnwsNKAdFDfDrhULLTHQewyBYxd7DhQvw3LfkMSx","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":66559643,"tokens_received":0,"buy_slot":348922283,"sell_lamports":58968010,"tokens_sold":0,"sell_slot":348922288,"pnl_lamports":-7591633,"timestamp":1750780782} +{"mint":"HWAy2jF9YxwkkYCakuB4oXUMwiAWoHWNz7L9CKWzpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":69276780,"tokens_received":0,"buy_slot":348922298,"sell_lamports":61562354,"tokens_sold":2000000000000,"sell_slot":348922308,"pnl_lamports":-7714426,"timestamp":1750780791} +{"mint":"5gSAhjhryMaLurtSPTmmXcq83J2A7xkc9EqYCWT2pump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":5000,"tokens_received":0,"buy_slot":348924397,"sell_lamports":0,"tokens_sold":0,"sell_slot":348924482,"pnl_lamports":-5000,"timestamp":1750781674} +{"mint":"Dzc9wxBKcGjaeKJQQnyqnxfYDXa5AZdqSK4wVAaUpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":63641160,"tokens_received":0,"buy_slot":348924497,"sell_lamports":58932115,"tokens_sold":2000000000000,"sell_slot":348924504,"pnl_lamports":-4709045,"timestamp":1750781682} +{"mint":"3hdnm9VmE8XeaFmLJj9LwfTjWXzbgC1QS13t7BFHpump","creator":"ETiN5Tdx2zGfJGuB5XN29sGybPk7i1rZrYzLeSY1BviH","buy_lamports":62820272,"tokens_received":0,"buy_slot":348924517,"sell_lamports":56834800,"tokens_sold":2000000000000,"sell_slot":348924525,"pnl_lamports":-5985472,"timestamp":1750781691} diff --git a/1_solana sniper bot(node) using gRPC/README.md b/1_solana sniper bot(node) using gRPC/README.md new file mode 100644 index 0000000..ddf0761 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/README.md @@ -0,0 +1,286 @@ +# 🚀 Solana Raydium Sniper Bot + +A high-performance Solana trading bot that automatically snipes new token launches on Raydium, PumpFun, and PumpSwap using gRPC streaming for real-time transaction monitoring. + +## ✨ Features + +- **Real-time Monitoring**: Uses gRPC streaming to detect new token launches instantly +- **Multi-Pool Support**: Supports Raydium LaunchLab, PumpFun, PumpSwap, and Raydium CPMM +- **Automated Trading**: Automatically buys and sells tokens based on configurable parameters +- **Risk Management**: Built-in stop-loss, profit-taking, and position monitoring +- **Multiple Swap Methods**: Support for Solana, JITO, Nozomi, and 0slot trading +- **Position Tracking**: Monitors active positions and manages exit strategies +- **Graceful Shutdown**: Safely closes all positions before stopping + +## 🏗️ Architecture + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ gRPC Stream │───▶│ Transaction │───▶│ Trading Engine │ +│ (Triton One) │ │ Parser │ │ (Main Bot) │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Pool Detection │ │ Position │ + │ (PumpFun, etc.) │ │ Management │ + └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Jupiter API │ │ Profit/Loss │ + │ Swap Execution │ │ Monitoring │ + └─────────────────┘ └─────────────────┘ +``` + +## 🚀 Quick Start + +### 1. Prerequisites + +- Node.js 16+ +- Solana wallet with SOL balance +- Triton One gRPC access +- RPC endpoint (Helius, QuickNode, etc.) + +### 2. Installation + +```bash +# Clone the repository +git clone +cd solana-sniper-bot + +# Install dependencies +npm install + +# Copy environment template +cp env.template .env +``` + +### 3. Configuration + +Edit the `.env` file with your configuration: + +```bash +# Essential Configuration +PRIVATE_KEY=your_wallet_private_key +RPC_URL=https://your-rpc-endpoint.com +GRPC_ENDPOINT=https://your-grpc-endpoint.com +GRPCTOKEN=your_grpc_token + +# Trading Parameters +SNIPERAMOUNT=0.1 # SOL amount per snipe +PROFIT_TARGET=2.0 # 2x profit target +STOP_LOSS=0.5 # 50% stop loss +MAX_HOLD_TIME=300000 # 5 minutes max hold +MIN_LIQUIDITY=10 # Minimum liquidity in SOL +``` + +### 4. Run the Bot + +```bash +# Start the sniper bot +npm start + +# Or for development with auto-restart +npm run dev +``` + +## ⚙️ Configuration Options + +### Trading Parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `SNIPERAMOUNT` | 0.1 | SOL amount to use for each snipe | +| `PROFIT_TARGET` | 2.0 | Profit target multiplier (2x) | +| `STOP_LOSS` | 0.5 | Stop loss multiplier (50% loss) | +| `MAX_HOLD_TIME` | 300000 | Maximum time to hold position (5 min) | +| `MIN_LIQUIDITY` | 10 | Minimum liquidity required in SOL | + +### Swap Methods + +| Method | Description | Use Case | +|--------|-------------|----------| +| `solana` | Standard Solana prioritization | General trading | +| `race` | JITO MEV protection | MEV protection | +| `nozomi` | Nozomi RPC with tips | Ultra-fast execution | +| `0slot` | 0-slot transaction | Maximum speed | + +### Pool Types Supported + +- **Raydium LaunchLab**: New token launches +- **PumpFun**: Pump.fun platform +- **PumpSwap**: PumpSwap platform +- **Raydium CPMM**: Constant Product Market Maker + +## 📊 How It Works + +### 1. Transaction Monitoring +- Bot connects to Solana gRPC stream via Triton One +- Monitors for `MintTo` instructions indicating new token launches +- Filters transactions by SOL transfer amounts (1-85 SOL) + +### 2. Transaction Parsing +- Parses transaction data to identify pool type and parameters +- Extracts liquidity, fees, and trading direction +- Determines if transaction meets sniper criteria + +### 3. Trading Execution +- Automatically executes buy orders when criteria are met +- Uses Jupiter API for optimal swap routing +- Implements configurable slippage and prioritization fees + +### 4. Position Management +- Tracks active positions with entry/exit criteria +- Monitors for profit targets and stop losses +- Automatically closes positions based on conditions + +## 🔧 Advanced Configuration + +### Custom Pool Filters + +```javascript +// Enable/disable specific pool types +ENABLE_PUMPFUN=true +ENABLE_PUMPSWAP=true +ENABLE_RAYDIUM_LAUNCHLAB=true +ENABLE_RAYDIUM_CPMM=true +``` + +### Risk Management + +```javascript +// Maximum concurrent positions +MAX_POSITIONS=5 + +// Minimum transaction age +MIN_TX_AGE=1 +``` + +### Notifications + +```javascript +// Telegram notifications +TELEGRAM_BOT_TOKEN=your_bot_token +TELEGRAM_CHAT_ID=your_chat_id + +// Email notifications +SMTP_HOST=smtp.gmail.com +SMTP_USER=your_email@gmail.com +SMTP_PASS=your_app_password +``` + +## 📈 Trading Strategies + +### Conservative Strategy +```bash +SNIPERAMOUNT=0.05 +PROFIT_TARGET=1.5 +STOP_LOSS=0.7 +MAX_HOLD_TIME=600000 +MIN_LIQUIDITY=20 +``` + +### Aggressive Strategy +```bash +SNIPERAMOUNT=0.2 +PROFIT_TARGET=3.0 +STOP_LOSS=0.3 +MAX_HOLD_TIME=180000 +MIN_LIQUIDITY=5 +``` + +## 🛡️ Safety Features + +- **Balance Checks**: Verifies wallet balance before trading +- **Liquidity Validation**: Ensures sufficient pool liquidity +- **Position Limits**: Maximum concurrent position management +- **Graceful Shutdown**: Safely closes all positions on exit +- **Error Handling**: Comprehensive error handling and logging +- **Retry Logic**: Automatic retry for failed transactions + +## 📝 Logging + +The bot provides detailed logging with color-coded output: + +- 🚀 **Blue**: Bot startup and configuration +- 🎯 **Green**: Successful trades and profit targets +- 🛑 **Red**: Errors and stop losses +- ⚠️ **Yellow**: Warnings and position updates +- 📊 **Cyan**: Position information and PnL + +## 🚨 Important Notes + +### Security +- **Never share your private key** +- Use dedicated trading wallets +- Regularly rotate API keys +- Monitor bot activity + +### Risk Disclaimer +- This bot is for educational purposes +- Cryptocurrency trading involves significant risk +- Past performance doesn't guarantee future results +- Use at your own risk + +### Legal Compliance +- Ensure compliance with local regulations +- Check tax implications of automated trading +- Consult with financial advisors if needed + +## 🔍 Troubleshooting + +### Common Issues + +1. **gRPC Connection Failed** + - Verify `GRPC_ENDPOINT` and `GRPCTOKEN` + - Check network connectivity + - Ensure Triton One subscription is active + +2. **Transaction Failures** + - Verify wallet has sufficient SOL + - Check RPC endpoint status + - Adjust slippage tolerance + +3. **No Trades Executing** + - Verify transaction filters + - Check liquidity requirements + - Review pool type settings + +### Debug Mode + +Enable debug logging by setting: +```bash +DEBUG=true +LOG_LEVEL=debug +``` + +## 🤝 Contributing + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Add tests if applicable +5. Submit a pull request + +## 📄 License + +This project is licensed under the MIT License - see the LICENSE file for details. + +## 🙏 Acknowledgments + +- [Triton One](https://triton.one/) for gRPC streaming +- [Jupiter](https://jup.ag/) for swap aggregation +- [Solana Labs](https://solana.com/) for the blockchain +- [Raydium](https://raydium.io/) for the DEX platform + +## 📞 Support + +For support and questions: +- Create an issue on GitHub +- Join our Discord community +- Check the documentation + +--- + +**⚠️ Disclaimer: This software is for educational purposes only. Use at your own risk. The authors are not responsible for any financial losses.** \ No newline at end of file diff --git a/1_solana sniper bot(node) using gRPC/SETUP.md b/1_solana sniper bot(node) using gRPC/SETUP.md new file mode 100644 index 0000000..ead5c9a --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/SETUP.md @@ -0,0 +1,84 @@ +# 🚀 Quick Setup Guide + +## ⚡ 5-Minute Setup + +### 1. Install Dependencies +```bash +npm install +``` + +### 2. Configure Environment +```bash +# Copy the template +cp env.template .env + +# Edit .env with your settings +# At minimum, you need: +PRIVATE_KEY=your_wallet_private_key +RPC_URL=https://your-rpc-endpoint.com +GRPC_ENDPOINT=https://your-grpc-endpoint.com +GRPCTOKEN=your_grpc_token +``` + +### 3. Test Configuration +```bash +npm run test-config +``` + +### 4. Run Demo (Optional) +```bash +npm run demo +``` + +### 5. Start Trading +```bash +npm start +``` + +## 🔑 Required Services + +- **Solana Wallet**: Phantom, Solflare, or private key +- **RPC Endpoint**: [Helius](https://helius.xyz/), [QuickNode](https://quicknode.com/), or [Alchemy](https://alchemy.com/) +- **gRPC Access**: [Triton One](https://triton.one/) subscription + +## 💰 Minimum Requirements + +- **Wallet Balance**: At least 1 SOL +- **Sniper Amount**: 0.1 SOL (configurable) +- **Network**: Stable internet connection + +## 🚨 First Time Setup + +1. **Test with small amounts first** +2. **Use a dedicated trading wallet** +3. **Monitor the bot initially** +4. **Adjust parameters based on performance** + +## 📱 Quick Commands + +| Command | Description | +|---------|-------------| +| `npm start` | Start the sniper bot | +| `npm run dev` | Start with auto-restart | +| `npm run test-config` | Verify configuration | +| `npm run demo` | Run demo mode | +| `start.bat` | Windows startup script | +| `start.sh` | Linux/Mac startup script | + +## 🔧 Troubleshooting + +### Common Issues: +- **"Private key invalid"** → Check key format (base58/base64/JSON) +- **"RPC connection failed"** → Verify RPC URL and network +- **"gRPC error"** → Check Triton One subscription +- **"No trades executing"** → Verify transaction filters + +### Need Help? +1. Check the README.md +2. Run `npm run test-config` +3. Check console logs for errors +4. Verify all environment variables + +--- + +**⚡ Ready to snipe? Run `npm start` and watch the magic happen!** diff --git a/1_solana sniper bot(node) using gRPC/env.template b/1_solana sniper bot(node) using gRPC/env.template new file mode 100644 index 0000000..b4d33bf --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/env.template @@ -0,0 +1,24 @@ +# Nozomi settings (optional) +NOZOMI_URL= +NOZOMI_UUID= + +# Private key (required) +PRIVATE_KEY= + +# gRPC settings (📞Contact us to receive a one-time trial version) +GRPCTOKEN= +GRPC_ENDPOINT= +RPC_URL=https://api.mainnet-beta.solana.com + +# Sniper amount (in SOL) +SNIPERAMOUNT=0.1 + +# Swap method: "0slot", "nozomi", "race", "solana" +SWAP_METHOD=solana +ENABLE_SWAP_TIP=true +SLIPPAGE_BPS=5000 +PRIORITIZATION_FEE_LAMPORTS=20001 + +# Retry settings +MAX_RETRIES=2 +RETRY_DELAY=500 diff --git a/1_solana sniper bot(node) using gRPC/fuc.js b/1_solana sniper bot(node) using gRPC/fuc.js new file mode 100644 index 0000000..1f9abac --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/fuc.js @@ -0,0 +1,182 @@ +import { Connection, PublicKey, LAMPORTS_PER_SOL, Keypair } from "@solana/web3.js"; +import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token"; +import chalk from "chalk"; +import dotenv from "dotenv"; +import bs58 from "bs58"; +dotenv.config(); +import { swap } from "./swap.js"; +// import { buy_pumpfun, buy_pumpswap, sell_pumpfun, sell_pumpswap } from "./swapsdk_0slot.js"; +// import { buy_raydium_CPMM, buy_raydium_launchpad, sell_raydium_CPMM, sell_raydium_launchpad } from "./swapRaydium.js"; + +const RPC_URL = process.env.RPC_URL; +const connection = new Connection(RPC_URL, "confirmed"); + +//============functions============// +export const token_buy = async (mint, sol_amount, pool_status, context) => { + + if (!mint) { + throw new Error("mint is required and was not provided."); + } + const currentUTC = new Date(); + const txid = await swap("BUY", mint, sol_amount * LAMPORTS_PER_SOL); + // let txid = ""; + console.log(chalk.green(`🟢BUY tokenAmount:::${sol_amount} pool_status: ${pool_status} `)); + + //============off chain sign ultra fast============// + // if (pool_status == "pumpfun") { + // txid = await buy_pumpfun(mint, sol_amount * LAMPORTS_PER_SOL, context);//off chain sign ultra fast + // } else if (pool_status == "pumpswap") { + + // txid = await buy_pumpswap(mint, sol_amount * LAMPORTS_PER_SOL, context.pool); + // } else if (pool_status == "raydium_launchlab") { + // txid = await buy_raydium_launchpad(mint, sol_amount * LAMPORTS_PER_SOL, context); + // } else { + // txid = await buy_raydium_CPMM(mint, sol_amount * LAMPORTS_PER_SOL); + // } + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ Total BUY time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + return txid; +}; + +export const token_sell = async (mint, tokenAmount, pool_status, isFull, context) => { + try { + + if (!mint) { + throw new Error("mint is required and was not provided."); + } + console.log(chalk.red(`🔴SELL tokenAmount:::${tokenAmount} pool_status: ${pool_status} `)); + + const currentUTC = new Date(); + + //============off chain sign ultra fast============// + // let txid = ""; + // if (pool_status == "pumpfun") { + // txid = await sell_pumpfun(mint, tokenAmount, isFull, context); + // } else if (pool_status == "pumpswap") { + // txid = await sell_pumpswap(mint, tokenAmount, context.pool, isFull); + // } else if (pool_status == "raydium_launchlab") { + // txid = await sell_raydium_launchpad(mint, tokenAmount, isFull); + // } else { + // txid = await sell_raydium_CPMM(mint, tokenAmount, isFull); + // } + const txid = await swap("SELL", mint, tokenAmount); + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ Total SELL time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + + if (txid === "stop") { + console.log(chalk.red(`[${new Date().toISOString()}] 🛑 Swap returned "stop" - no balance for ${mint}`)); + return "stop"; + } + + if (txid) { + console.log(chalk.green(`Successfully sold ${tokenAmount} tokens : https://solscan.io/tx/${txid}`)); + return txid; + } + + return null; + } catch (error) { + console.error("Error in token_sell:", error.message); + if (error.response?.data) { + console.error("API Error details:", error.response.data); + } + return null; + } +}; + + +export const getSplTokenBalance = async (mint) => { + if (!mint) { + console.log("🔄 Token balance error: Mint address is undefined or null."); + throw new Error("Mint address is undefined or null."); + } + + let mintPubkey; + try { + mintPubkey = new PublicKey(mint); + } catch (err) { + console.log("🔄 Token balance error: Invalid mint address provided."); + throw err; + } + + // const publicKey = getPublicKeyFromPrivateKey(); + const publicKey = getPublicKeyFromPrivateKey(); + const ata = await getAssociatedTokenAddress(mintPubkey, new PublicKey(publicKey)); + + let account; + try { + account = await getAccount(connection, ata); + } catch (err) { + // Handle TokenAccountNotFoundError gracefully + if ( + err.name === "TokenAccountNotFoundError" || + (err.message && ( + err.message.includes("Failed to find account") || + err.message.includes("Account does not exist") || + err.message.includes("could not find account") + )) + ) { + // No account found, treat as zero balance + console.log("🔄 Token balance: Account not found, returning 0."); + return null; + } + // If the error is related to an invalid mint, log and throw error + if (err.message && err.message.includes("Invalid param")) { + console.log("🔄 Token balance error: Invalid mint param."); + throw err; + } + // Other errors + console.log("🔄 Token balance error:", err.message || err); + throw err; + } + + return Number(account.amount); // Convert BigInt to Number +}; +export const checkWalletBalance = async () => { + try { + const pubkey = getPublicKeyFromPrivateKey(); + const balanceLamports = await connection.getBalance(pubkey); + const balance = balanceLamports / LAMPORTS_PER_SOL; + return { balance }; + } catch (err) { + console.error("Error checking wallet balance:", err.message || err); + throw err; + } +}; + +export const getKeypairFromPrivateKey = (privateKeyString) => { + try { + // Try base58 first + try { + const decoded = bs58.decode(privateKeyString); + return Keypair.fromSecretKey(decoded); + } catch (e) { + // Not base58, try base64 + try { + const decoded = Buffer.from(privateKeyString, 'base64'); + return Keypair.fromSecretKey(decoded); + } catch (e2) { + // Not base64, try JSON array + try { + const arr = JSON.parse(privateKeyString); + const uint8arr = new Uint8Array(arr); + return Keypair.fromSecretKey(uint8arr); + } catch (e3) { + throw new Error('Invalid private key format. Supported formats: base58, base64, or JSON array'); + } + } + } + } catch (err) { + throw new Error('Failed to decode private key: ' + err.message); + } +}; +export const getPublicKeyFromPrivateKey = () => { + const privateKey = process.env.PRIVATE_KEY; + if (!privateKey) { + throw new Error("Private key is required and was not provided."); + } + const keypair = getKeypairFromPrivateKey(privateKey); + return keypair.publicKey.toString(); +}; + diff --git a/1_solana sniper bot(node) using gRPC/grpc.js b/1_solana sniper bot(node) using gRPC/grpc.js new file mode 100644 index 0000000..714618b --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/grpc.js @@ -0,0 +1,204 @@ +import "dotenv/config"; +import Client from "@triton-one/yellowstone-grpc"; +import { CommitmentLevel } from "@triton-one/yellowstone-grpc"; +import { decodeInstruction } from '@solana/spl-token'; +import { Connection, Keypair } from '@solana/web3.js'; +import chalk from "chalk"; +import { tOutPut } from "./parsingtransaction.js"; +import { handleNewTokenLaunch } from "./main.js"; +import dotenv from 'dotenv' +dotenv.config(); +const GRPCTOKEN=process.env.GRPCTOKEN +const GRPC_ENDPOINT = process.env.GRPC_ENDPOINT + +// Pre-define constants +const SOLANA_TOKEN = "So11111111111111111111111111111111111111112"; +const RAYDIUM_FEE = "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"//"7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"; +const Raydium_launchpad_authority = "WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh" +// Create default client +const defaultClient = new Client( + GRPC_ENDPOINT, + GRPCTOKEN +); + +export let isNewLaunchRunning = true; +export const stopNewLaunch = () => { + isNewLaunchRunning = false; + console.log(chalk.red("New launch monitoring stopped")); +}; + +// Default request args +const defaultArgs = { + accounts: {}, + slots: {}, + transactions: { + pumpfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [RAYDIUM_FEE], + accountExclude: [], + accountRequired: [], + }, + }, + transactionsStatus: {}, + entry: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + ping: undefined, + commitment: CommitmentLevel.PROCESSED, +}; + +// This function checks for MintTo instructions by comparing with log messages +async function checkMintTo(data) { + const tx = data.transaction?.transaction; + const meta = data.transaction; + if (!tx || !meta?.transaction?.meta?.logMessages) return; + // Find if MintTo is present in log messages + const mintToLog = meta.transaction.meta.logMessages.find((log) => + typeof log === "string" && log.toLowerCase().includes("instruction: mintto") + ); + + if (mintToLog) { + console.log("🩸🩸🩸🩸🩸 MintTo found in logs!"); + return true + } else { + // No MintTo found in logs + return false + } +} + + +async function handleStream(client = defaultClient, args = defaultArgs) { + const stream = await client.subscribe(args); + + const streamClosed = new Promise((resolve, reject) => { + stream.on("error", (error) => { + console.error("Stream Error:", error); + reject(error); + stream.end(); + }); + stream.on("end", resolve); + stream.on("close", resolve); + }); + + stream.on("data", async (data) => { + // Return early if monitoring is disabled + if (!isNewLaunchRunning) { + stream.end(); + return; + } + + try { + // console.log(chalk.green("start__________new token streaming_________")); + if (!data?.transaction?.transaction) { + return null; + } + const mintTo = await checkMintTo(data) + if(!mintTo){ + return null + } + console.log(`[${new Date().toISOString()}] 🩸🩸🩸🩸🩸 MintTo found in logs!`); + + const preTokenBalances = data?.transaction?.transaction?.meta?.preTokenBalances; + const postTokenBalances = data?.transaction?.transaction?.meta?.postTokenBalances; + + if (!preTokenBalances || !postTokenBalances) { + console.log("Token balances not found in transaction data"); + return null; + } + + let pre_sol = 0; + let post_sol = 0; + let pre_token = 0; + let post_token = 0; + let token_mint = ""; + let token_owner = ""; + + + for (const balance of postTokenBalances) { + if (balance.owner !== Raydium_launchpad_authority) { + if (balance.mint !== SOLANA_TOKEN) { + post_token = balance.uiTokenAmount.uiAmount || 0; + token_mint = balance.mint; + token_owner = balance.owner; + } + } else { + post_sol = balance.uiTokenAmount.uiAmount || 0; + } + } + + for (const balance of preTokenBalances) { + if (balance.owner !== Raydium_launchpad_authority) { + if (balance.mint !== SOLANA_TOKEN) { + pre_token = balance.uiTokenAmount.uiAmount || 0; + } + } + } + + const solChanges = post_sol-pre_sol; + const tokenChanges = post_token-pre_token; + console.log(chalk.bgBlue.bold(`🪙 Token Mint:`), chalk.white(token_mint)); + console.log(chalk.bgMagenta.bold(`👤 Token Owner:`), chalk.white(token_owner)); + console.log(chalk.bgYellow.bold(`💸 SOL Balance Change:`), chalk.yellow(`${solChanges > 0 ? "+" : ""}${solChanges}`)); + console.log(chalk.bgCyan.bold(`🔄 Token Balance Change:`), chalk.cyan(`${tokenChanges > 0 ? "+" : ""}${tokenChanges}`)); + + + if (solChanges> 0.1) { + console.log(chalk.bgGreen("Found large SOL transfer:", solChanges)); + + // Parse transaction data to get pool information + const parsedData = await tOutPut(data); + if (parsedData) { + console.log(chalk.cyan(`Pool status: Raydium launchpad`)); + + // Call the main bot logic to handle the new token launch + await handleNewTokenLaunch(token_mint, parsedData.pool_status, parsedData.context); + } else { + console.log(chalk.yellow("Failed to parse transaction data")); + } + + return token_mint; + } + + return null; + } catch (error) { + console.error("Error processing transaction data:", error); + return null; + } + }); + + try { + await stream.write(args); + } catch (error) { + console.error("Subscription request failed:", error); + throw error; + } + + await streamClosed; +} + +export async function newlunched_subscribeCommand(client = defaultClient, args = defaultArgs) { + // Set monitoring flag to true when starting + isNewLaunchRunning = true; + console.log(chalk.green("New launch monitoring started")); + + while (isNewLaunchRunning) { + try { + await handleStream(client, args); + } catch (error) { + console.error("Stream error, restarting in 1 second...", error); + // Only wait and retry if monitoring is still enabled + if (isNewLaunchRunning) { + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + } + } + console.log("New launch monitoring stopped"); +} + +// Export client and args for external use +export { defaultClient, defaultArgs }; +// Remove the auto-execution to prevent conflicts +// newlunched_subscribeCommand() \ No newline at end of file diff --git a/1_solana sniper bot(node) using gRPC/index.js b/1_solana sniper bot(node) using gRPC/index.js new file mode 100644 index 0000000..01d57e0 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/index.js @@ -0,0 +1,28 @@ + +import { pump_geyser } from "./main.js"; +import dotenv from "dotenv"; +dotenv.config() + +const privateKey = process.env.PRIVATE_KEY; // Use private key directly + +if (!privateKey) { + console.error("Error: PRIVATE_KEY is not set in environment variables."); + process.exit(1); +} + +(async () => { + try { + const { getBalance } = await import("./swap.js"); + const balance = await getBalance(); + if (balance < 1) { + console.error("Error: Wallet balance is below 1 SOL. Current balance:", balance, "SOL"); + process.exit(1); + } + } catch (err) { + console.error("Error checking wallet balance:", err.message); + process.exit(1); + } +})(); + +pump_geyser() + diff --git a/1_solana sniper bot(node) using gRPC/main.js b/1_solana sniper bot(node) using gRPC/main.js new file mode 100644 index 0000000..ba95433 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/main.js @@ -0,0 +1,194 @@ +import { newlunched_subscribeCommand, stopNewLaunch } from "./grpc.js"; +import { token_buy, token_sell, getSplTokenBalance, getPublicKeyFromPrivateKey } from "./fuc.js"; +import chalk from "chalk"; +import dotenv from "dotenv"; + +dotenv.config(); + +// Trading configuration +const SNIPER_AMOUNT = parseFloat(process.env.SNIPERAMOUNT || "0.1"); // SOL amount to snipe with +const PROFIT_TARGET = parseFloat(process.env.PROFIT_TARGET || "2.0"); // 2x profit target +const STOP_LOSS = parseFloat(process.env.STOP_LOSS || "0.5"); // 50% stop loss +const MAX_HOLD_TIME = parseInt(process.env.MAX_HOLD_TIME || "300000"); // 5 minutes in ms + +// Track active positions +const activePositions = new Map(); + +export const pump_geyser = async () => { + try { + const walletKey = getPublicKeyFromPrivateKey(); + // INSERT_YOUR_CODE + console.log(chalk.magentaBright(` + ██████╗██████╗ ██╗ ██╗██████╗ ████████╗ ██████╗ ██╗ ██╗██╗███╗ ██╗ ██████╗ + ██╔════╝██╔══██╗██║ ██║██╔══██╗╚══██╔══╝██╔═══██╗██║ ██╔╝██║████╗ ██║██╔════╝ + ██║ ██████╔╝ ██║ ██╔╝██████╔╝ ██║ ██║ ██║█████╔╝ ██║██╔██╗ ██║██║ ██╗ + ██║ ██╔══██╗ ██╔═╝ ██╔═══╝ ██║ ██║ ██║██╔═██╗ ██║██║╚██╗██║██║ ██║ + ╚██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝██║ ██╗██║██║ ╚████║╚██████╔╝ + ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ + `)); + console.log(chalk.blue.bold("🚀 Starting Solana Raydium Sniper Bot...")); + console.log(chalk.blue(`🔑 Wallet Public Key: ${chalk.yellow(walletKey)}`)); + console.log(chalk.blue(`💰 Sniper Amount: ${chalk.green(SNIPER_AMOUNT)} SOL`)); + console.log(chalk.blue(`🎯 Profit Target: ${chalk.green(PROFIT_TARGET)}x`)); + console.log(chalk.blue(`🛑 Stop Loss: ${chalk.green(STOP_LOSS)}x`)); + console.log(chalk.blue(`⏱️ Max Hold Time: ${chalk.green(MAX_HOLD_TIME/1000)}s`)); + + // Start monitoring for new token launches + await newlunched_subscribeCommand(); + + // Set up position monitoring + setInterval(monitorPositions, 5000); // Check positions every 5 seconds + + // Set up graceful shutdown + process.on('SIGINT', async () => { + console.log(chalk.yellow("\n🛑 Shutting down sniper bot...")); + stopNewLaunch(); + + // Close all positions before exit + for (const [mint, position] of activePositions) { + try { + console.log(chalk.yellow(`🔄 Closing position for ${mint}...`)); + await closePosition(mint, position); + } catch (error) { + console.error(chalk.red(`Error closing position for ${mint}:`, error.message)); + } + } + + process.exit(0); + }); + + } catch (error) { + console.error(chalk.red("Error in pump_geyser:", error)); + throw error; + } +}; + +// Monitor active positions for profit taking or stop loss +async function monitorPositions() { + for (const [mint, position] of activePositions) { + try { + const currentBalance = await getSplTokenBalance(mint); + if (!currentBalance || currentBalance <= 0) { + console.log(chalk.yellow(`⚠️ No balance for ${mint}, removing from active positions`)); + activePositions.delete(mint); + continue; + } + + const currentValue = currentBalance * position.currentPrice; + const profitRatio = currentValue / position.entryValue; + const holdTime = Date.now() - position.entryTime; + + // Check profit target + if (profitRatio >= PROFIT_TARGET) { + console.log(chalk.green(`🎯 Profit target reached for ${mint}: ${profitRatio.toFixed(2)}x`)); + await closePosition(mint, position); + continue; + } + + // Check stop loss + if (profitRatio <= STOP_LOSS) { + console.log(chalk.red(`🛑 Stop loss triggered for ${mint}: ${profitRatio.toFixed(2)}x`)); + await closePosition(mint, position); + continue; + } + + // Check max hold time + if (holdTime >= MAX_HOLD_TIME) { + console.log(chalk.yellow(`⏰ Max hold time reached for ${mint}, closing position`)); + await closePosition(mint, position); + continue; + } + + // Update current price (you might want to implement price fetching here) + // For now, we'll use a simple approach + position.currentPrice = position.entryPrice; // Placeholder + + } catch (error) { + console.error(chalk.red(`Error monitoring position for ${mint}:`, error.message)); + } + } +} + +// Close a position by selling tokens +async function closePosition(mint, position) { + try { + const currentBalance = await getSplTokenBalance(mint); + if (!currentBalance || currentBalance <= 0) { + console.log(chalk.yellow(`No balance to sell for ${mint}`)); + activePositions.delete(mint); + return; + } + + console.log(chalk.blue(`🔄 Closing position for ${mint}, selling ${currentBalance} tokens`)); + + const txid = await token_sell(mint, currentBalance, position.poolStatus, true, position.context); + + if (txid && txid !== "stop") { + console.log(chalk.green(`✅ Position closed for ${mint}: ${txid}`)); + + // Calculate final PnL + const finalValue = currentBalance * position.currentPrice; + const pnl = finalValue - position.entryValue; + const pnlRatio = (pnl / position.entryValue) * 100; + + console.log(chalk.cyan(`📊 Final PnL for ${mint}: ${pnl.toFixed(4)} SOL (${pnlRatio.toFixed(2)}%)`)); + } else { + console.log(chalk.red(`❌ Failed to close position for ${mint}`)); + } + + activePositions.delete(mint); + + } catch (error) { + console.error(chalk.red(`Error closing position for ${mint}:`, error.message)); + } +} + +// Function to handle new token launches (called from grpc.js) +export const handleNewTokenLaunch = async (tokenMint, poolStatus, context) => { + try { + console.log(chalk.green(`🎯 New token launch detected: ${tokenMint}`)); + console.log(chalk.blue(`🏊 Pool type: ${poolStatus}`)); + + // Check if we already have a position in this token + if (activePositions.has(tokenMint)) { + console.log(chalk.yellow(`⚠️ Already have position in ${tokenMint}, skipping`)); + return; + } + + + + // Execute snipe + console.log(chalk.blue(`🚀 Sniping ${tokenMint} with ${SNIPER_AMOUNT} SOL...`)); + + const txid = await token_buy(tokenMint, SNIPER_AMOUNT, poolStatus, context); + + if (txid) { + console.log(chalk.green(`✅ Snipe successful! TX: ${txid}`)); + + // Add to active positions + activePositions.set(tokenMint, { + entryTime: Date.now(), + entryValue: SNIPER_AMOUNT, + entryPrice: 1, // Placeholder - you might want to calculate actual price + currentPrice: 1, + poolStatus: poolStatus, + context: context, + txid: txid + }); + + console.log(chalk.cyan(`📊 Position opened for ${tokenMint}`)); + console.log(chalk.cyan(`💰 Entry Value: ${SNIPER_AMOUNT} SOL`)); + console.log(chalk.cyan(`🎯 Profit Target: ${PROFIT_TARGET}x`)); + console.log(chalk.cyan(`🛑 Stop Loss: ${STOP_LOSS}x`)); + + } else { + console.log(chalk.red(`❌ Snipe failed for ${tokenMint}`)); + } + + } catch (error) { + console.error(chalk.red(`Error handling new token launch for ${tokenMint}:`, error.message)); + } +}; + +// // Export for external use +// export { activePositions, handleNewTokenLaunch }; \ No newline at end of file diff --git a/1_solana sniper bot(node) using gRPC/package-lock.json b/1_solana sniper bot(node) using gRPC/package-lock.json new file mode 100644 index 0000000..88f10e8 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/package-lock.json @@ -0,0 +1,10961 @@ +{ + "name": "solana-trading-bot", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "solana-trading-bot", + "version": "1.0.0", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@degenfrends/solana-rugchecker": "^0.0.16", + "@project-serum/anchor": "^0.26.0", + "@pump-fun/pump-sdk": "^1.3.4", + "@pump-fun/pump-swap-sdk": "^0.0.1-beta.36", + "@raydium-io/raydium-sdk": "^1.3.1-beta.0", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "@triton-one/yellowstone-grpc": "^4.0.0", + "axios": "^1.7.9", + "bs58": "^6.0.0", + "chalk": "^5.3.0", + "dotenv": "^16.4.7", + "fs": "^0.0.1-security", + "helius-sdk": "^1.4.2", + "node-fetch": "^3.3.2", + "node-telegram-bot-api": "^0.63.0", + "pump-swap-core-v1": "^2.0.0", + "readline-sync": "^1.4.10", + "require": "^0.4.4", + "tweetnacl": "^1.0.3", + "util": "^0.12.5", + "web3-fb": "^1.2.2", + "websocket": "^1.0.35", + "ws": "^8.18.1" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@coral-xyz/anchor": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", + "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.30.1", + "@coral-xyz/borsh": "^0.30.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@coral-xyz/anchor-errors": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz", + "integrity": "sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@coral-xyz/borsh": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz", + "integrity": "sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@degenfrends/solana-rugchecker": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@degenfrends/solana-rugchecker/-/solana-rugchecker-0.0.16.tgz", + "integrity": "sha512-JsHNulIiIpfhc/J3ZbSmnYJVgJ4l1xYlksYpfwbhQvRua9z1id7U5TeQXoa9Mr3weyt19LmliPs6Q071FYVPBg==", + "license": "MIT", + "dependencies": { + "@metaplex-foundation/js": "^0.20.1", + "@raydium-io/raydium-sdk": "1.3.1-beta.54", + "@solana/web3.js": "^1.92.3", + "axios": "^1.7.2", + "dotenv": "^16.4.5", + "helius-sdk": "^1.3.3", + "validator": "^13.12.0", + "web3": "^4.9.0", + "whois": "^2.14.2", + "whois-json": "^2.0.4" + } + }, + "node_modules/@degenfrends/solana-rugchecker/node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.54", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.54.tgz", + "integrity": "sha512-pDrYDg739eQ0G6LqvPOGP2oSIMiK/NGO0vPE75oQQlU5u/Mdia1C7PSa6BgGhx3P6ofVC5nziVUKF2KozO+9lg==", + "license": "GPL-3.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0" + }, + "peerDependencies": { + "@solana/web3.js": "^1.73.0" + } + }, + "node_modules/@degenfrends/solana-rugchecker/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", + "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.6.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@irys/arweave": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/arweave/-/arweave-0.0.2.tgz", + "integrity": "sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==", + "license": "MIT", + "dependencies": { + "asn1.js": "^5.4.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64-js": "^1.5.1", + "bignumber.js": "^9.1.1" + } + }, + "node_modules/@irys/query": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.1.tgz", + "integrity": "sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==", + "license": "MIT", + "dependencies": { + "async-retry": "^1.3.3", + "axios": "^1.4.0" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "node_modules/@irys/sdk": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.0.2.tgz", + "integrity": "sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==", + "deprecated": "Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", + "@irys/query": "^0.0.1", + "@near-js/crypto": "^0.0.3", + "@near-js/keystores-browser": "^0.0.3", + "@near-js/providers": "^0.0.4", + "@near-js/transactions": "^0.1.0", + "@solana/web3.js": "^1.36.0", + "@supercharge/promise-pool": "^3.0.0", + "algosdk": "^1.13.1", + "aptos": "=1.8.5", + "arbundles": "^0.10.0", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64url": "^3.0.1", + "bignumber.js": "^9.0.1", + "bs58": "5.0.0", + "commander": "^8.2.0", + "csv": "5.5.3", + "inquirer": "^8.2.0", + "js-sha256": "^0.9.0", + "mime-types": "^2.1.34", + "near-seed-phrase": "^0.2.0" + }, + "bin": { + "irys": "build/cjs/node/cli.js", + "irys-esm": "build/esm/node/cli.js" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "node_modules/@irys/sdk/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@irys/sdk/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@metaplex-foundation/beet": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.1.tgz", + "integrity": "sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/beet-solana": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", + "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/cusper": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz", + "integrity": "sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==", + "license": "Apache-2.0" + }, + "node_modules/@metaplex-foundation/js": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/js/-/js-0.20.1.tgz", + "integrity": "sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "dependencies": { + "@irys/sdk": "^0.0.2", + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/mpl-auction-house": "^2.3.0", + "@metaplex-foundation/mpl-bubblegum": "^0.6.2", + "@metaplex-foundation/mpl-candy-guard": "^0.3.0", + "@metaplex-foundation/mpl-candy-machine": "^5.0.0", + "@metaplex-foundation/mpl-candy-machine-core": "^0.1.2", + "@metaplex-foundation/mpl-token-metadata": "^2.11.0", + "@noble/ed25519": "^1.7.1", + "@noble/hashes": "^1.1.3", + "@solana/spl-account-compression": "^0.1.8", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.63.1", + "bignumber.js": "^9.0.2", + "bn.js": "^5.2.1", + "bs58": "^5.0.0", + "buffer": "^6.0.3", + "debug": "^4.3.4", + "eventemitter3": "^4.0.7", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0", + "merkletreejs": "^0.3.11", + "mime": "^3.0.0", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/js/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@metaplex-foundation/js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@metaplex-foundation/js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-auction-house/-/mpl-auction-house-2.5.1.tgz", + "integrity": "sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.6.1", + "@metaplex-foundation/beet-solana": "^0.3.1", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@metaplex-foundation/beet": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.6.1.tgz", + "integrity": "sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz", + "integrity": "sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/beet-solana": "0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/spl-account-compression": "^0.1.4", + "@solana/spl-token": "^0.1.8", + "@solana/web3.js": "^1.50.1", + "bn.js": "^5.2.0", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz", + "integrity": "sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@solana/spl-token": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", + "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.5", + "@solana/web3.js": "^1.21.0", + "bn.js": "^5.1.0", + "buffer": "6.0.3", + "buffer-layout": "^1.2.0", + "dotenv": "10.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-guard": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz", + "integrity": "sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-guard/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-5.1.0.tgz", + "integrity": "sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine-core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine-core/-/mpl-candy-machine-core-0.1.2.tgz", + "integrity": "sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine-core/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", + "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", + "license": "MIT", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@near-js/crypto": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.3.tgz", + "integrity": "sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/crypto/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/keystores": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.3.tgz", + "integrity": "sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/types": "0.0.3" + } + }, + "node_modules/@near-js/keystores-browser": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores-browser/-/keystores-browser-0.0.3.tgz", + "integrity": "sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3" + } + }, + "node_modules/@near-js/providers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/providers/-/providers-0.0.4.tgz", + "integrity": "sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==", + "license": "ISC", + "dependencies": { + "@near-js/transactions": "0.1.0", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "http-errors": "^1.7.2" + }, + "optionalDependencies": { + "node-fetch": "^2.6.1" + } + }, + "node_modules/@near-js/providers/node_modules/@near-js/signers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.3.tgz", + "integrity": "sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/providers/node_modules/@near-js/transactions": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.0.tgz", + "integrity": "sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/signers": "0.0.3", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/providers/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/providers/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@near-js/providers/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT", + "optional": true + }, + "node_modules/@near-js/providers/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/@near-js/providers/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@near-js/signers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.4.tgz", + "integrity": "sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/keystores": "0.0.4", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/keystores": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.4.tgz", + "integrity": "sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/types": "0.0.4" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/signers/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/transactions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.1.tgz", + "integrity": "sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/signers": "0.0.4", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/utils": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.4.tgz", + "integrity": "sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" + } + }, + "node_modules/@near-js/transactions/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/types": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.3.tgz", + "integrity": "sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/types/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/utils": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.3.tgz", + "integrity": "sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" + } + }, + "node_modules/@near-js/utils/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/ed25519": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.5.tgz", + "integrity": "sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@project-serum/anchor": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", + "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/borsh": "^0.26.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@project-serum/anchor/node_modules/@coral-xyz/borsh": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", + "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@project-serum/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@project-serum/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@pump-fun/pump-sdk": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-sdk/-/pump-sdk-1.17.5.tgz", + "integrity": "sha512-RNuYg52mK3xCw3Kwpo+ReeFGA+ph/TDbuB1idgodhIMd9WBcI05I4xcUP/Kw6cbjUMiIv7zLWyzWE5C0rcnhMQ==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@pump-fun/pump-swap-sdk": "^1.6.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "undici-types": "^6.20.0" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", + "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.31.1", + "@coral-xyz/borsh": "^0.31.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.69.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor-errors": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", + "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", + "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.69.0" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@pump-fun/pump-swap-sdk": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-swap-sdk/-/pump-swap-sdk-1.6.1.tgz", + "integrity": "sha512-fVGqqvv3tZaYdsPWBqwu4KOBa5hcv+i5XoB9Bfj4Kp/IIJzsfjBTcu+aq36L7fVYH+5u9n9nMMMjbk1TQ0Tlbw==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@solana/spl-token": "^0.4.9", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "bs58": "^6.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@pump-fun/pump-swap-sdk": { + "version": "0.0.1-beta.88", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-swap-sdk/-/pump-swap-sdk-0.0.1-beta.88.tgz", + "integrity": "sha512-t/wBEMsIIr7BCG1SiQUkuYZMx1ns3R9dKl6KxbRY1lAGCHTt8lVzRwJpzSQocQj03NpbYMIUFhFVA8rLDzDQ0w==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@solana/spl-token": "^0.4.9", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "bs58": "^6.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", + "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.31.1", + "@coral-xyz/borsh": "^0.31.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.69.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor-errors": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", + "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", + "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.69.0" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@randlabs/communication-bridge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", + "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@randlabs/myalgo-connect": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", + "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@randlabs/communication-bridge": "1.0.1" + } + }, + "node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.58", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.58.tgz", + "integrity": "sha512-9SMneQktR6CvxOJ6C3PxW8aMtBsg28+OViaSDwNHgZ/gJP47bvUgUTsFSmnut4Mv9blsnYFxyc5eVoIfPdXeJg==", + "license": "GPL-3.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0", + "tsup": "^8.1.0" + }, + "peerDependencies": { + "@solana/web3.js": "^1.73.0" + } + }, + "node_modules/@raydium-io/raydium-sdk/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.47.0.tgz", + "integrity": "sha512-Weap5hVbZs/yIvUZcFpAmIso8rLmwkO1LesddNjeX28tIhQkAKjRuVgAJ2xpj8wXTny7IZro9aBIgGov0qsL4A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.47.0.tgz", + "integrity": "sha512-XcnlqvG5riTJByKX7bZ1ehe48GiF+eNkdnzV0ziLp85XyJ6tLPfhkXHv3e0h3cpZESTQa8IB+ZHhV/r02+8qKw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.47.0.tgz", + "integrity": "sha512-kZzTIzmzAUOKteh688kN88HNaL7wxwTz9XB5dDK94AQdf9nD+lxm/H5uPKQaawUFS+klBEowqPMUPjBRKGbo/g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.47.0.tgz", + "integrity": "sha512-WaMrgHRbFspYjvycbsbqheBmlsQBLwfZVWv/KFsT212Yz/RjEQ/9KEp1/p0Ef3ZNwbWsylmgf69St66D9NQNHw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.47.0.tgz", + "integrity": "sha512-umfYslurvSmAK5MEyOcOGooQ6EBB2pYePQaTVlrOkIfG6uuwu9egYOlxr35lwsp6XG0NzmXW0/5o150LUioMkQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.47.0.tgz", + "integrity": "sha512-EFXhIykAl8//4ihOjGNirF89HEUbOB8ev2aiw8ST8wFGwDdIPARh3enDlbp8aFnScl4CDK4DZLQYXaM6qpxzZw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.47.0.tgz", + "integrity": "sha512-EwkC5N61ptruQ9wNkYfLgUWEGh+F3JZSGHkUWhaK2ISAK0d0xmiMKF0trFhRqPQFov5d9DmFiFIhWB5IC79OUA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.47.0.tgz", + "integrity": "sha512-Iz/g1X94vIjppA4H9hN3VEedw4ObC+u+aua2J/VPJnENEJ0GeCAPBN15nJc5pS5M8JPlUhOd3oqhOWX6Un4RHA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.47.0.tgz", + "integrity": "sha512-eYEYHYjFo/vb6k1l5uq5+Af9yuo9WaST/z+/8T5gkee+A0Sfx1NIPZtKMEQOLjm/oaeHFGpWaAO97gTPhouIfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.47.0.tgz", + "integrity": "sha512-LX2x0/RszFEmDfjzL6kG/vihD5CkpJ+0K6lcbqX0jAopkkXeY2ZjStngdFMFW+BK7pyrqryJgy6Jt3+oyDxrSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.47.0.tgz", + "integrity": "sha512-0U+56rJmJvqBCwlPFz/BcxkvdiRdNPamBfuFHrOGQtGajSMJ2OqzlvOgwj5vReRQnSA6XMKw/JL1DaBhceil+g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.47.0.tgz", + "integrity": "sha512-2VKOsnNyvS05HFPKtmAWtef+nZyKCot/V3Jh/A5sYMhUvtthNjp6CjakYTtc5xZ8J8Fp5FKrUWGxptVtZ2OzEA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.47.0.tgz", + "integrity": "sha512-uY5UP7YZM4DMQiiP9Fl4/7O3UbT2p3uI0qvqLXZSGWBfyYuqi2DYQ48ExylgBN3T8AJork+b+mLGq6VXsxBfuw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.47.0.tgz", + "integrity": "sha512-qpcN2+/ivq3TcrXtZoHrS9WZplV3Nieh0gvnGb+SFZg7h/YkWsOXINJnjJRWHp9tEur7T8lMnMeQMPS7s9MjUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.47.0.tgz", + "integrity": "sha512-XfuI+o7a2/KA2tBeP+J1CT3siyIQyjpGEL6fFvtUdoHJK1k5iVI3qeGT2i5y6Bb+xQu08AHKBsUGJ2GsOZzXbQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.47.0.tgz", + "integrity": "sha512-ylkLO6G7oUiN28mork3caDmgXHqRuopAxjYDaOqs4CoU9pkfR0R/pGQb2V1x2Zg3tlFj4b/DvxZroxC3xALX6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.47.0.tgz", + "integrity": "sha512-1L72a+ice8xKqJ2afsAVW9EfECOhNMAOC1jH65TgghLaHSFwNzyEdeye+1vRFDNy52OGKip/vajj0ONtX7VpAg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.47.0.tgz", + "integrity": "sha512-wluhdd1uNLk/S+ex2Yj62WFw3un2cZo2ZKXy9cOuoti5IhaPXSDSvxT3os+SJ1cjNorE1PwAOfiJU7QUH6n3Zw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.47.0.tgz", + "integrity": "sha512-0SMTA6AeG7u2rfwdkKSo6aZD/obmA7oyhR+4ePwLzlwxNE8sfSI9zmjZXtchvBAZmtkVQNt/lZ6RxSl9wBj4pw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.47.0.tgz", + "integrity": "sha512-mw1/7kAGxLcfzoG7DIKFHvKr2ZUQasKOPCgT2ubkNZPgIDZOJPymqThtRWEeAlXBoipehP4BUFpBAZIrPhFg8Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "license": "MIT", + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" + } + }, + "node_modules/@solana/buffer-layout-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", + "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/web3.js": "^1.32.0", + "bigint-buffer": "^1.1.5", + "bignumber.js": "^9.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@solana/codecs": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-rc.1.tgz", + "integrity": "sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/options": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-core": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz", + "integrity": "sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==", + "license": "MIT", + "dependencies": { + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-data-structures": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz", + "integrity": "sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-numbers": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz", + "integrity": "sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-strings": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz", + "integrity": "sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "fastestsmallesttextencoderdecoder": "^1.0.22", + "typescript": ">=5" + } + }, + "node_modules/@solana/errors": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-rc.1.tgz", + "integrity": "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.1.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/errors/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@solana/options": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-rc.1.tgz", + "integrity": "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/spl-account-compression": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz", + "integrity": "sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "js-sha3": "^0.8.0", + "typescript-collections": "^1.3.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.50.1" + } + }, + "node_modules/@solana/spl-account-compression/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@solana/spl-account-compression/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@solana/spl-account-compression/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@solana/spl-token": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.13.tgz", + "integrity": "sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-group": "^0.0.7", + "@solana/spl-token-metadata": "^0.1.6", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.5" + } + }, + "node_modules/@solana/spl-token-group": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz", + "integrity": "sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==", + "license": "Apache-2.0", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/spl-token-metadata": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz", + "integrity": "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==", + "license": "Apache-2.0", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/wallet-adapter-base": { + "version": "0.9.27", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.27.tgz", + "integrity": "sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==", + "license": "Apache-2.0", + "dependencies": { + "@solana/wallet-standard-features": "^1.3.0", + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0", + "eventemitter3": "^5.0.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@solana/web3.js": "^1.98.0" + } + }, + "node_modules/@solana/wallet-adapter-base/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/@solana/wallet-standard-features": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-features/-/wallet-standard-features-1.3.0.tgz", + "integrity": "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==", + "license": "Apache-2.0", + "dependencies": { + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.98.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.4.tgz", + "integrity": "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "@solana/codecs-numbers": "^2.1.0", + "agentkeepalive": "^4.5.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/codecs-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", + "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", + "license": "MIT", + "dependencies": { + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/codecs-numbers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", + "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", + "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@solana/web3.js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@solana/web3.js/node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@solana/web3.js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@solana/web3.js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@solana/web3.js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@supercharge/promise-pool": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", + "integrity": "sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@triton-one/yellowstone-grpc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@triton-one/yellowstone-grpc/-/yellowstone-grpc-4.0.2.tgz", + "integrity": "sha512-RsHNbLz6zCU3OpQRBqKWcXqDDOKj1nxc/78LIt9kZWBU2kfYeFs7361eUpYE9Q3+BizjpCLF6BX9G1OitD76bw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.8.0" + }, + "engines": { + "node": ">=20.18.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wallet-standard/base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/base/-/base-1.1.0.tgz", + "integrity": "sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16" + } + }, + "node_modules/@wallet-standard/features": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/features/-/features-1.1.0.tgz", + "integrity": "sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==", + "license": "Apache-2.0", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/algosdk": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", + "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", + "license": "MIT", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.2", + "cross-fetch": "^3.1.5", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", + "license": "MIT" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aptos": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.8.5.tgz", + "integrity": "sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==", + "deprecated": "Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "1.1.3", + "@scure/bip39": "1.1.0", + "axios": "0.27.2", + "form-data": "4.0.0", + "tweetnacl": "1.0.3" + }, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/aptos/node_modules/@noble/hashes": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/aptos/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/arbundles": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.10.1.tgz", + "integrity": "sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@irys/arweave": "^0.0.2", + "@noble/ed25519": "^1.6.1", + "base64url": "^3.0.1", + "bs58": "^4.0.1", + "keccak": "^3.0.2", + "secp256k1": "^5.0.0" + }, + "optionalDependencies": { + "@randlabs/myalgo-connect": "^1.1.2", + "algosdk": "^1.13.1", + "arweave-stream-tx": "^1.1.0", + "multistream": "^4.1.0", + "tmp-promise": "^3.0.2" + } + }, + "node_modules/arbundles/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/arbundles/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/arconnect": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/arconnect/-/arconnect-0.4.2.tgz", + "integrity": "sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "arweave": "^1.10.13" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findindex": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz", + "integrity": "sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arweave": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.15.7.tgz", + "integrity": "sha512-F+Y4iWU1qea9IsKQ/YNmLsY4DHQVsaJBuhEbFxQn9cfGHOmtXE+bwo14oY8xqymsqSNf/e1PeIfLk7G7qN/hVA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "arconnect": "^0.4.2", + "asn1.js": "^5.4.1", + "base64-js": "^1.5.1", + "bignumber.js": "^9.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/arweave-stream-tx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz", + "integrity": "sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==", + "optional": true, + "dependencies": { + "exponential-backoff": "^3.1.0" + }, + "peerDependencies": { + "arweave": "^1.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", + "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "license": "ISC", + "dependencies": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "license": "ISC", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, + "node_modules/bip39/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "license": "MIT" + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "license": "MIT" + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-layout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", + "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "license": "MIT", + "engines": { + "node": ">=4.5" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camel-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/camel-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/change-case/node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/change-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/change-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/change-case/node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "license": "MIT", + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/constant-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/constant-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/constant-case/node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", + "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "license": "MIT", + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==", + "license": "MIT" + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "license": "MIT" + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "license": "MIT" + }, + "node_modules/fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, + "node_modules/header-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/header-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/helius-sdk": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/helius-sdk/-/helius-sdk-1.5.1.tgz", + "integrity": "sha512-LXVD3/YuUE3f10amNj2KgHX/Q4AOUsdwGQqzgT/qUl4La70lgEHe2ziJvZdhPpAig/ORquiSSjhsPPT0abz9Rg==", + "license": "ISC", + "dependencies": { + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/wallet-adapter-base": "^0.9.23", + "axios": "^1.2.3", + "bs58": "^6.0.0" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.0" + } + }, + "node_modules/is-lower-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jayson": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.2.0.tgz", + "integrity": "sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==", + "license": "MIT", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "stream-json": "^1.9.1", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "license": "MIT" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.2" + } + }, + "node_modules/lower-case-first/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/merkletreejs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^4.2.0", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mixme": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/near-hd-key": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/near-hd-key/-/near-hd-key-1.2.1.tgz", + "integrity": "sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==", + "license": "MIT", + "dependencies": { + "bip39": "3.0.2", + "create-hmac": "1.1.7", + "tweetnacl": "1.0.3" + } + }, + "node_modules/near-seed-phrase": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/near-seed-phrase/-/near-seed-phrase-0.2.1.tgz", + "integrity": "sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==", + "license": "MIT", + "dependencies": { + "bip39-light": "^1.0.7", + "bs58": "^4.0.1", + "near-hd-key": "^1.2.1", + "tweetnacl": "^1.0.2" + } + }, + "node_modules/near-seed-phrase/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/near-seed-phrase/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-telegram-bot-api": { + "version": "0.63.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.63.0.tgz", + "integrity": "sha512-SssDLHZ+Qi7Ygwt2iKur2BBZUjRBBDxC98+ydyVZo/arUJlXz3nA6dUEYP3pjNLWW4qQJdf7OsptaUDrKTTHlg==", + "license": "MIT", + "dependencies": { + "array.prototype.findindex": "^2.0.2", + "bl": "^1.2.3", + "debug": "^3.2.7", + "eventemitter3": "^3.0.0", + "file-type": "^3.9.0", + "mime": "^1.6.0", + "pump": "^2.0.0", + "request": "^2.83.0", + "request-promise": "^4.2.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/node-telegram-bot-api/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/node-telegram-bot-api/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "license": "MIT" + }, + "node_modules/node-telegram-bot-api/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/ora/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/param-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/param-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/path-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/path-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pump-swap-core-v1": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pump-swap-core-v1/-/pump-swap-core-v1-2.0.0.tgz", + "integrity": "sha512-wLA5SZ3m2FJQSHg4y5fpQu9mbtFzPaHTAyEEtx9bgoUtqIaZ0jFWcSdh+7BfSSqNgb3pxchVIKQWsjS4ne9YZw==", + "license": "ISC", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "pump-swap-core-v1": "^1.0.2" + } + }, + "node_modules/pump-swap-core-v1/node_modules/pump-swap-core-v1": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump-swap-core-v1/-/pump-swap-core-v1-1.0.2.tgz", + "integrity": "sha512-qj8AkxqGjntCtHAuZtJgLAox++AQldST7xYhZ+zRe+Yrvz3prVQaGQ1n16BT4mFV7JTt/EbrsHUM2nkvbC7y/A==", + "license": "ISC", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/require/-/require-0.4.9.tgz", + "integrity": "sha512-gkJ1IiSdLFgBiLmcVdtBen0KVB3H/+2pLtoEXKUEKKCxlaH5e/aAyMcvYWuXD8gzbdTW/1U7UEB71lSEl8wA9w==", + "dependencies": { + "uglify-js": "1.0.3" + }, + "bin": { + "require": "bin/require-command.js" + }, + "engines": { + "browsers": "*", + "node": "*" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.47.0.tgz", + "integrity": "sha512-jZVxJwlAptA83ftdZK1kjLZfi0f6o+vVX7ub3HaRzkehLO3l4VB4vYpMHyunhBt1sawv9fiRWPA8Qi/sbg9Kcw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.47.0", + "@rollup/rollup-android-arm64": "4.47.0", + "@rollup/rollup-darwin-arm64": "4.47.0", + "@rollup/rollup-darwin-x64": "4.47.0", + "@rollup/rollup-freebsd-arm64": "4.47.0", + "@rollup/rollup-freebsd-x64": "4.47.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.47.0", + "@rollup/rollup-linux-arm-musleabihf": "4.47.0", + "@rollup/rollup-linux-arm64-gnu": "4.47.0", + "@rollup/rollup-linux-arm64-musl": "4.47.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.47.0", + "@rollup/rollup-linux-ppc64-gnu": "4.47.0", + "@rollup/rollup-linux-riscv64-gnu": "4.47.0", + "@rollup/rollup-linux-riscv64-musl": "4.47.0", + "@rollup/rollup-linux-s390x-gnu": "4.47.0", + "@rollup/rollup-linux-x64-gnu": "4.47.0", + "@rollup/rollup-linux-x64-musl": "4.47.0", + "@rollup/rollup-win32-arm64-msvc": "4.47.0", + "@rollup/rollup-win32-ia32-msvc": "4.47.0", + "@rollup/rollup-win32-x64-msvc": "4.47.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rpc-websockets": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.1.3.tgz", + "integrity": "sha512-I+kNjW0udB4Fetr3vvtRuYZJS0PcSPyyvBcH5sDdoV8DFs5E4W2pTr7aiMlKfPxANTClP9RlqCPolj9dd5MsEA==", + "license": "LGPL-3.0-only", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rpc-websockets/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, + "node_modules/sentence-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/sentence-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-json": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.9.1.tgz", + "integrity": "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==", + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", + "license": "MIT", + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "node_modules/swap-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "node_modules/title-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/title-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT" + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsup": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", + "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.25.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tsup/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-collections": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/typescript-collections/-/typescript-collections-1.3.3.tgz", + "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.0.3.tgz", + "integrity": "sha512-56NY7VZ8NfvYgu3e6Gk44nU4ifXlWvTDmTB8SLZ1Sl0gZbXA5ncDmVBD6U2hv3oiXLaIfeSoht7RwVeiaQUe8Q==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web3": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-4.16.0.tgz", + "integrity": "sha512-SgoMSBo6EsJ5GFCGar2E/pR2lcR/xmUSuQ61iK6yDqzxmm42aPPxSqZfJz2z/UCR6pk03u77pU8TGV6lgMDdIQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth": "^4.11.1", + "web3-eth-abi": "^4.4.1", + "web3-eth-accounts": "^4.3.1", + "web3-eth-contract": "^4.7.2", + "web3-eth-ens": "^4.4.0", + "web3-eth-iban": "^4.0.7", + "web3-eth-personal": "^4.1.0", + "web3-net": "^4.1.0", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-rpc-providers": "^1.0.0-rc.4", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.7.1.tgz", + "integrity": "sha512-9KSeASCb/y6BG7rwhgtYC4CvYY66JfkmGNEYb7q1xgjt9BWfkf09MJPaRyoyT5trdOxYDHkT9tDlypvQWaU8UQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.1", + "web3-eth-accounts": "^4.3.1", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" + } + }, + "node_modules/web3-core/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-core/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz", + "integrity": "sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-types": "^1.10.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.11.1.tgz", + "integrity": "sha512-q9zOkzHnbLv44mwgLjLXuyqszHuUgZWsQayD2i/rus2uk0G7hMn11bE2Q3hOVnJS4ws4VCtUznlMxwKQ+38V2w==", + "license": "LGPL-3.0", + "dependencies": { + "setimmediate": "^1.0.5", + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth-abi": "^4.4.1", + "web3-eth-accounts": "^4.3.1", + "web3-net": "^4.1.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz", + "integrity": "sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==", + "license": "LGPL-3.0", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-abi/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.3.1.tgz", + "integrity": "sha512-rTXf+H9OKze6lxi7WMMOF1/2cZvJb2AOnbNQxPhBDssKOllAMzLhg1FbZ4Mf3lWecWfN6luWgRhaeSqO1l+IBQ==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-accounts/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.7.2.tgz", + "integrity": "sha512-3ETqs2pMNPEAc7BVY/C3voOhTUeJdkf2aM3X1v+edbngJLHAxbvxKpOqrcO0cjXzC4uc2Q8Zpf8n8zT5r0eLnA==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth": "^4.11.1", + "web3-eth-abi": "^4.4.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web3-eth-contract/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-contract/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-4.4.0.tgz", + "integrity": "sha512-DeyVIS060hNV9g8dnTx92syqvgbvPricE3MerCxe/DquNZT3tD8aVgFfq65GATtpCgDDJffO2bVeHp3XBemnSQ==", + "license": "LGPL-3.0", + "dependencies": { + "@adraffy/ens-normalize": "^1.8.8", + "web3-core": "^4.5.0", + "web3-errors": "^1.2.0", + "web3-eth": "^4.8.0", + "web3-eth-contract": "^4.5.0", + "web3-net": "^4.1.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-ens/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-iban/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-4.1.0.tgz", + "integrity": "sha512-RFN83uMuvA5cu1zIwwJh9A/bAj0OBxmGN3tgx19OD/9ygeUZbifOL06jgFzN0t+1ekHqm3DXYQM8UfHpXi7yDQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.6.0", + "web3-eth": "^4.9.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-personal/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-fb": { + "version": "1.2.2", + "resolved": "https://github.com/crypto2001813/solana-sdk/releases/download/1.2.2/web3-fb-1.2.2.tgz", + "integrity": "sha512-MHI7rNdxZh9bfuAz797TzWKo0oTW3IBEpQMvACpMbrs9BbN5n0FRGJpvwI/qHVa4T3jPzlyz2KNvWF0kmpDbsQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "solana-scan": "dist/universal-launcher.cjs" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/web3-net": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.1.0.tgz", + "integrity": "sha512-WWmfvHVIXWEoBDWdgKNYKN8rAy6SgluZ0abyRyXOL3ESr7ym7pKWbfP4fjApIHlYTh8tNqkrdPfM4Dyi6CA0SA==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.6.0", + "web3-utils": "^4.3.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-net/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-net/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.2.0.tgz", + "integrity": "sha512-IPMnDtHB7dVwaB7/mMxAZzyq7d5ezfO1+Vw0bNfAeIi7gaDlJiggp85SdyAfOgov8AMUA/dyiY72kQ0KmjXKvQ==", + "license": "LGPL-3.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "web3-errors": "^1.3.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/web3-providers-http/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-providers-http/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/web3-providers-http/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/web3-providers-http/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/web3-providers-http/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT", + "optional": true + }, + "node_modules/web3-providers-ipc/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.8.tgz", + "integrity": "sha512-goJdgata7v4pyzHRsg9fSegUG4gVnHZSHODhNnn6J93ykHkBI1nz4fjlGpcQLUMi4jAMz6SHl9Ibzs2jj9xqPw==", + "license": "LGPL-3.0", + "dependencies": { + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.2.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "ws": "^8.17.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws/node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-providers-ws/node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-methods": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.3.0.tgz", + "integrity": "sha512-/CHmzGN+IYgdBOme7PdqzF+FNeMleefzqs0LVOduncSaqsppeOEoskLXb2anSpzmQAP3xZJPaTrkQPWSJMORig==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-types": "^1.6.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/web3-rpc-providers/-/web3-rpc-providers-1.0.0-rc.4.tgz", + "integrity": "sha512-PXosCqHW0EADrYzgmueNHP3Y5jcSmSwH+Dkqvn7EYD0T2jcsdDAIHqk6szBiwIdhumM7gv9Raprsu/s/f7h1fw==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.1", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-rpc-providers/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-types": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz", + "integrity": "sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", + "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.2.0", + "web3-types": "^1.6.0", + "zod": "^3.21.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/whois": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/whois/-/whois-2.15.0.tgz", + "integrity": "sha512-mX5WGE8bJXjxpTejUc4IwN+zTJQ0tsRA2fcGY4ng3A0okv5n1Petqove8B/45Xr2/Tes+PnV8U1lwivHMswocA==", + "license": "FreeBSD", + "dependencies": { + "punycode": "^2.3.1", + "socks": "^2.2.2", + "underscore": "^1.9.1", + "yargs": "^15.4.1" + }, + "bin": { + "whois": "bin.js" + } + }, + "node_modules/whois-json": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whois-json/-/whois-json-2.0.4.tgz", + "integrity": "sha512-ui9Qe0qS4yWtFAPw0q+QPuuH+m4vDDtoO/YtqmF00YoPMMNplhya7SqTVAxThWIVXhWHPEKajFEulegmysdlwQ==", + "license": "MIT", + "dependencies": { + "change-case": "^3.0.2", + "dedent-js": "^1.0.1", + "html-entities": "^1.2.1", + "whois": "^2.6.0" + } + }, + "node_modules/whois/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/whois/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/whois/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/whois/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/whois/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/1_solana sniper bot(node) using gRPC/package.json b/1_solana sniper bot(node) using gRPC/package.json new file mode 100644 index 0000000..ac49893 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/package.json @@ -0,0 +1,44 @@ +{ + "name": "solana-trading-bot", + "version": "1.0.0", + "description": "Solana trading bot with automated PnL strategies", + "main": "index.js", + "scripts": { + "start": "node index.js", + "dev": "nodemon index.js" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@degenfrends/solana-rugchecker": "^0.0.16", + "@project-serum/anchor": "^0.26.0", + "@pump-fun/pump-sdk": "^1.3.4", + "@pump-fun/pump-swap-sdk": "^0.0.1-beta.36", + "@raydium-io/raydium-sdk": "^1.3.1-beta.0", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "@triton-one/yellowstone-grpc": "^4.0.0", + "axios": "^1.7.9", + "bs58": "^6.0.0", + "chalk": "^5.3.0", + "dotenv": "^16.4.7", + "fs": "^0.0.1-security", + "helius-sdk": "^1.4.2", + "node-fetch": "^3.3.2", + "node-telegram-bot-api": "^0.63.0", + "pump-swap-core-v1": "^2.0.0", + "readline-sync": "^1.4.10", + "require": "^0.4.4", + "tweetnacl": "^1.0.3", + "util": "^0.12.5", + "web3-fb": "^1.2.2", + "websocket": "^1.0.35", + "ws": "^8.18.1" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "type": "module", + "engines": { + "node": ">=16.0.0" + } +} diff --git a/1_solana sniper bot(node) using gRPC/parsingtransaction.js b/1_solana sniper bot(node) using gRPC/parsingtransaction.js new file mode 100644 index 0000000..7497652 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/parsingtransaction.js @@ -0,0 +1,266 @@ +import bs58 from "bs58"; + +// New function to handle parsed transaction data from getDataFromTx +export async function parseTransactionFromData(parsedTx) { + if (!parsedTx) return null; + + const meta = parsedTx.meta; + // const logs = meta?.logMessages; + // const logFilter = logs?.some((instruction) => instruction.match(/MintTo/i)); + + const innerInstructions = meta.innerInstructions; + const flattenedInnerInstructions = (await innerInstructions?.flatMap((ix) => ix.instructions || [])) || []; + const allInstructions = [...flattenedInnerInstructions]; + // console.log(allInstructions) + if (allInstructions.length === 0) return null; + + // Filter out instructions that don't have data property + const validInstructions = allInstructions.filter((instruction) => instruction && instruction.data); + + if (validInstructions.length === 0) return null; + + const largestDataInstruction = await validInstructions.reduce((largest, current) => { + if (!current || !current.data || !largest || !largest.data) { + return largest || current; + } + return current.data.length > largest.data.length ? current : largest; + }); + // console.log(largestDataInstruction) + + if (!largestDataInstruction || !largestDataInstruction.data) { + return null; + } + // console.log(largestDataInstruction.data) + const rawData = bs58.decode(largestDataInstruction.data); + const buffer = Buffer.from(rawData); + // console.log(buffer) + + const parsedInstructionData = parseTransactionData(buffer); + // console.log(parsedInstructionData) + + if (!parsedInstructionData) return null; + + return { + solChanges: parseFloat(parsedInstructionData.solchange), + tokenChanges: parseFloat(parsedInstructionData.tokenchange), + isBuy: parsedInstructionData.isBuy, + user: parsedInstructionData.user, + mint: parsedInstructionData.mint, + pool: parsedInstructionData.pool, + liquidity: parsedInstructionData.liquidity, + coinCreator: parsedInstructionData.coinCreator, + context: parsedInstructionData.context, + }; +} + +export async function tOutPut(data) { + // Check if this is parsed transaction data from getDataFromTx + if (data && data.meta && data.transaction) { + // This is parsed transaction data from getDataFromTx + return await parseTransactionFromData(data); + } + + // Original format handling + const dataTx = data?.transaction?.transaction; + if (!dataTx) return; + const signature = bs58.encode(Buffer.from(dataTx?.transaction.signatures?.[0])); + // console.log("signature:::", signature); + + const meta = dataTx?.meta; + const logs = meta?.logMessages; + const logFilter = logs?.some((instruction) => instruction.match(instruction.match(/MintTo/i))); + + const innerInstructions = meta.innerInstructions; + // console.log(innerInstructions) + const flattenedInnerInstructions = (await innerInstructions?.flatMap((ix) => ix.instructions || [])) || []; + // console.log(flattenedInnerInstructions) + const allInstructions = [...flattenedInnerInstructions]; + // console.log("allInstructions",allInstructions) + + if (allInstructions.length === 0) return; + + // Filter out instructions that don't have data property + const validInstructions = allInstructions.filter((instruction) => instruction && instruction.data); + + if (validInstructions.length === 0) return null; + + const largestDataInstruction = await validInstructions.reduce((largest, current) => { + if (!current || !current.data || !largest || !largest.data) { + return largest || current; + } + return current.data.length > largest.data.length ? current : largest; + }); + + if (!largestDataInstruction || !largestDataInstruction.data) { + return null; + } + + // console.log("🎈🎈🎈largestDataInstruction:::", largestDataInstruction.data); + const parsedInstructionData = parseTransactionData(largestDataInstruction.data); + // console.log("🎈",JSON.stringify(parsedInstructionData,null,2)) + + if (!parsedInstructionData) return null; + + // console.log(parsedInstructionData); + // console.log("Mint>>>>>>>>", parsedInstructionData.mint); + return { + solChanges: parseFloat(parsedInstructionData.solchange), + tokenChanges: parseFloat(parsedInstructionData.tokenchange), + isBuy: parsedInstructionData.isBuy, + user: parsedInstructionData.user, + mint: parsedInstructionData.mint, + pool: parsedInstructionData.pool, + liquidity: parsedInstructionData.liquidity / 10 ** 9, + coinCreator: parsedInstructionData.coinCreator, + pool_status: parsedInstructionData.pool_status, + signature: signature, + context: parsedInstructionData.context, + }; + // console.log("Signature>>>>>>>>", signature); +} + +export function parseTransactionData(buffer) { + try { + function parsePublicKey(offset) { + return bs58.encode(buffer.slice(offset, offset + 32)); // Convert 32 bytes to Base58 + } + + function parseBigInt(offset) { + return buffer.readBigUInt64LE(offset).toString(); // Read 8 bytes as Little-Endian + } + + if (buffer.length == 368) { + const parsedData_PumpSwap = { + mint: null, + timestamp: parseBigInt(16), // 8 bytes (Timestamp) + baseAmountIn: parseBigInt(24), // 8 bytes (Base amount in) + minQuoteAmountOut: parseBigInt(32), // 8 bytes (Minimum quote amount out) + userBaseTokenReserves: parseBigInt(40), // 8 bytes (User base token reserves) + userQuoteTokenReserves: parseBigInt(48), // 8 bytes (User quote token reserves) + poolBaseTokenReserves: parseBigInt(56), // 8 bytes (Pool base token reserves) + poolQuoteTokenReserves: parseBigInt(64), // 8 bytes (Pool quote token reserves) + quoteAmountOut: parseBigInt(72), // 8 bytes (Quote amount out) + lpFeeBasisPoints: parseBigInt(80), // 8 bytes (LP fee basis points) + lpFee: parseBigInt(88), // 8 bytes (LP fee) + protocolFeeBasisPoints: parseBigInt(96), // 8 bytes (Protocol fee basis points) + protocolFee: parseBigInt(104), // 8 bytes (Protocol fee) + quoteAmountOutWithoutLpFee: parseBigInt(112), // 8 bytes (Quote amount out without LP fee) + userQuoteAmountOut: parseBigInt(120), // 8 bytes (User quote amount out) + pool: parsePublicKey(128), // 32 bytes (Pool address) + user: parsePublicKey(160), // 32 bytes (User address) + userBaseTokenAccount: parsePublicKey(192), // 32 bytes (User base token account) + userQuoteTokenAccount: parsePublicKey(224), // 32 bytes (User quote token account) + protocolFeeRecipient: parsePublicKey(256), // 32 bytes (Protocol fee recipient) + protocolFeeRecipientTokenAccount: parsePublicKey(288), // 32 bytes (Protocol fee recipient token account) + coinCreator: parsePublicKey(320), // 32 bytes (Coin creator address) + coinCreatorFeeBasisPoints: parseBigInt(328), // 8 bytes (Coin creator fee basis points) + coinCreatorFee: parseBigInt(336), // 8 bytes (Coin creator fee) + }; + // console.log(parsedData_PumpSwap); + let isBuy = parsedData_PumpSwap.quoteAmountOutWithoutLpFee > parsedData_PumpSwap.quoteAmountOut; + return { + solchange: parsedData_PumpSwap.userQuoteAmountOut, + tokenchange: parsedData_PumpSwap.baseAmountIn, + isBuy, + user: parsedData_PumpSwap.user, + mint: parsedData_PumpSwap.mint, + pool: parsedData_PumpSwap.pool, + liquidity: parsedData_PumpSwap.poolQuoteTokenReserves * 2, + coinCreator: parsedData_PumpSwap.coinCreator, + pool_status: "pumpswap", + context: parsedData_PumpSwap, + }; + } else if (buffer.length == 233) { + const parsedData_PumpFun = { + mint: parsePublicKey(16), // 32 bytes (Mint address) + solAmount: parseBigInt(48), // 8 bytes (Amount in SOL) + tokenAmount: parseBigInt(56), // 8 bytes (Token amount) + isBuy: buffer[64] === 1, // 1 byte (Boolean: 0 = Sell, 1 = Buy) + user: parsePublicKey(65), // 32 bytes (User address) + timestamp: parseBigInt(97), // 8 bytes (Timestamp - Unix format) + virtualSolReserves: parseBigInt(105), // 8 bytes (Virtual reserves) + virtualTokenReserves: parseBigInt(113), // 8 bytes (Virtual token reserves) + realSolReserves: parseBigInt(121), // 8 bytes (Real reserves) + realTokenReserves: parseBigInt(129), // 8 bytes (Real token reserves) + feeRecipient: parsePublicKey(137), // 32 bytes (Fee recipient address) + feeBasisPoints: parseBigInt(169), // 8 bytes (Fee basis points) + fee: parseBigInt(177), // 8 bytes (Fee amount) + creator: parsePublicKey(185), // 32 bytes (Creator address) + creatorFeeBasisPoints: parseBigInt(217), // 8 bytes (Creator fee basis points) + creatorFee: parseBigInt(225), // 8 bytes (Creator fee amount) + }; + // console.log(parsedData_PumpFun); + + let isBuy = parsedData_PumpFun.isBuy; + + return { + solchange: parsedData_PumpFun.solAmount, + tokenchange: parsedData_PumpFun.tokenAmount, + isBuy, + user: parsedData_PumpFun.user, + mint: parsedData_PumpFun.mint, + pool: null, + liquidity: parsedData_PumpFun.virtualSolReserves, + coinCreator: parsedData_PumpFun.creator, + pool_status: "pumpfun", + context: parsedData_PumpFun, + }; + } else if (buffer.length == 146) { + const parsedData_Raydium_LaunchLab = { + poolState: parsePublicKey(16), // 32 bytes (Pool state address) + totalBaseSell: parseBigInt(48), // 8 bytes (Total base sold) + virtualBase: parseBigInt(56), // 8 bytes (Virtual base reserves) + virtualQuote: parseBigInt(64), // 8 bytes (Virtual quote reserves) + realBaseBefore: parseBigInt(72), // 8 bytes (Real base before) + realQuoteBefore: parseBigInt(80), // 8 bytes (Real quote before) + realBaseAfter: parseBigInt(88), // 8 bytes (Real base after) + realQuoteAfter: parseBigInt(96), // 8 bytes (Real quote after) + amountIn: parseBigInt(104), // 8 bytes (Amount in) + amountOut: parseBigInt(112), // 8 bytes (Amount out) + protocolFee: parseBigInt(120), // 8 bytes (Protocol fee) + platformFee: parseBigInt(128), // 8 bytes (Platform fee) + shareFee: parseBigInt(136), // 8 bytes (Share fee) + tradeDirection: buffer[144] , // 1 byte (1 = sell, 0 = buy) + poolStatus: buffer[145] === 0 ? { normal: {} } : { fund: {} }, // 1 byte (0 = normal, 1 = fund) + }; + const isBuy = !parsedData_Raydium_LaunchLab.tradeDirection; + let solAmount = 0; + let tokenAmount = 0; + // console.log("🎈🎈🎈parsedData_Raydium_LaunchLab:::", parsedData_Raydium_LaunchLab); + if (isBuy){ + solAmount = parsedData_Raydium_LaunchLab.amountIn; + tokenAmount = parsedData_Raydium_LaunchLab.amountOut; + }else{ + solAmount = parsedData_Raydium_LaunchLab.amountOut; + tokenAmount = parsedData_Raydium_LaunchLab.amountIn; + } + + return { + solchange: solAmount, + tokenchange: tokenAmount, + isBuy, + user: null, + mint: null, + pool: parsedData_Raydium_LaunchLab.poolState, + liquidity: 2*parsedData_Raydium_LaunchLab.realQuoteAfter, + coinCreator: parsedData_Raydium_LaunchLab.poolState, + pool_status: "raydium_launchlab", + context: parsedData_Raydium_LaunchLab, + }; + } else { + return { + solchange: 0, + tokenchange: 0, + isBuy: false, + user: null, + mint: null, + pool: null, + liquidity: 0, + coinCreator: null, + pool_status: "raydium", + context: null, + }; + } }catch (error) { + console.error("Error parsing transaction data:", error); + } +} diff --git a/1_solana sniper bot(node) using gRPC/raydium_cpmm_idl.json b/1_solana sniper bot(node) using gRPC/raydium_cpmm_idl.json new file mode 100644 index 0000000..2948ffd --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/raydium_cpmm_idl.json @@ -0,0 +1,1619 @@ +{ + "version": "0.1.0", + "name": "raydium_cp_swap", + "instructions": [ + { + "name": "createAmmConfig", + "docs": [ + "# Arguments", + "", + "* `ctx`- The accounts needed by instruction.", + "* `index` - The index of amm config, there may be multiple config.", + "* `trade_fee_rate` - Trade fee rate, can be changed.", + "* `protocol_fee_rate` - The rate of protocol fee within tarde fee.", + "* `fund_fee_rate` - The rate of fund fee within tarde fee.", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": true, + "isSigner": true, + "docs": [ + "Address to be set as protocol owner." + ] + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false, + "docs": [ + "Initialize config state account to store protocol owner address and fee rates." + ] + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "index", + "type": "u16" + }, + { + "name": "tradeFeeRate", + "type": "u64" + }, + { + "name": "protocolFeeRate", + "type": "u64" + }, + { + "name": "fundFeeRate", + "type": "u64" + }, + { + "name": "createPoolFee", + "type": "u64" + } + ] + }, + { + "name": "updateAmmConfig", + "docs": [ + "Updates the owner of the amm config", + "Must be called by the current owner or admin", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `trade_fee_rate`- The new trade fee rate of amm config, be set when `param` is 0", + "* `protocol_fee_rate`- The new protocol fee rate of amm config, be set when `param` is 1", + "* `fund_fee_rate`- The new fund fee rate of amm config, be set when `param` is 2", + "* `new_owner`- The config's new owner, be set when `param` is 3", + "* `new_fund_owner`- The config's new fund owner, be set when `param` is 4", + "* `param`- The vaule can be 0 | 1 | 2 | 3 | 4, otherwise will report a error", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "The amm config owner or admin" + ] + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false, + "docs": [ + "Amm config account to be changed" + ] + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "value", + "type": "u64" + } + ] + }, + { + "name": "updatePoolStatus", + "docs": [ + "Update pool status for given vaule", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `status` - The vaule of status", + "" + ], + "accounts": [ + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "status", + "type": "u8" + } + ] + }, + { + "name": "collectProtocolFee", + "docs": [ + "Collect the protocol fee accrued to the pool", + "", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_0_requested` - The maximum amount of token_0 to send, can be 0 to collect fees in only token_1", + "* `amount_1_requested` - The maximum amount of token_1 to send, can be 0 to collect fees in only token_0", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Only admin or owner can collect fee now" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool state stores accumulated protocol fee amount" + ] + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "Amm config account stores owner" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "recipientToken0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_0 protocol fees" + ] + }, + { + "name": "recipientToken1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_1 protocol fees" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program to perform token transfers" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program 2022 to perform token transfers" + ] + } + ], + "args": [ + { + "name": "amount0Requested", + "type": "u64" + }, + { + "name": "amount1Requested", + "type": "u64" + } + ] + }, + { + "name": "collectFundFee", + "docs": [ + "Collect the fund fee accrued to the pool", + "", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_0_requested` - The maximum amount of token_0 to send, can be 0 to collect fees in only token_1", + "* `amount_1_requested` - The maximum amount of token_1 to send, can be 0 to collect fees in only token_0", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Only admin or fund_owner can collect fee now" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool state stores accumulated protocol fee amount" + ] + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "Amm config account stores fund_owner" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "recipientToken0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_0 fund fees" + ] + }, + { + "name": "recipientToken1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_1 fund fees" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program to perform token transfers" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program 2022 to perform token transfers" + ] + } + ], + "args": [ + { + "name": "amount0Requested", + "type": "u64" + }, + { + "name": "amount1Requested", + "type": "u64" + } + ] + }, + { + "name": "initialize", + "docs": [ + "Creates a pool for the given token pair and the initial price", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `init_amount_0` - the initial amount_0 to deposit", + "* `init_amount_1` - the initial amount_1 to deposit", + "* `open_time` - the timestamp allowed for swap", + "" + ], + "accounts": [ + { + "name": "creator", + "isMut": true, + "isSigner": true, + "docs": [ + "Address paying to create the pool. Can be anyone" + ] + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "Which config the pool belongs to." + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Initialize an account to store the pool state" + ] + }, + { + "name": "token0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "Token_0 mint, the key must smaller then token_1 mint." + ] + }, + { + "name": "token1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "Token_1 mint, the key must grater then token_0 mint." + ] + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false, + "docs": [ + "pool lp mint" + ] + }, + { + "name": "creatorToken0", + "isMut": true, + "isSigner": false, + "docs": [ + "payer token0 account" + ] + }, + { + "name": "creatorToken1", + "isMut": true, + "isSigner": false, + "docs": [ + "creator token1 account" + ] + }, + { + "name": "creatorLpToken", + "isMut": true, + "isSigner": false, + "docs": [ + "creator lp token account" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false + }, + { + "name": "createPoolFee", + "isMut": true, + "isSigner": false, + "docs": [ + "create pool fee account" + ] + }, + { + "name": "observationState", + "isMut": true, + "isSigner": false, + "docs": [ + "an account to store oracle observations" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token0Program", + "isMut": false, + "isSigner": false, + "docs": [ + "Spl token program or token program 2022" + ] + }, + { + "name": "token1Program", + "isMut": false, + "isSigner": false, + "docs": [ + "Spl token program or token program 2022" + ] + }, + { + "name": "associatedTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "Program to create an ATA for receiving position NFT" + ] + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "To create a new program account" + ] + }, + { + "name": "rent", + "isMut": false, + "isSigner": false, + "docs": [ + "Sysvar for program account" + ] + } + ], + "args": [ + { + "name": "initAmount0", + "type": "u64" + }, + { + "name": "initAmount1", + "type": "u64" + }, + { + "name": "openTime", + "type": "u64" + } + ] + }, + { + "name": "deposit", + "docs": [ + "Creates a pool for the given token pair and the initial price", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `lp_token_amount` - Pool token amount to transfer. token_a and token_b amount are set by the current exchange rate and size of the pool", + "* `maximum_token_0_amount` - Maximum token 0 amount to deposit, prevents excessive slippage", + "* `maximum_token_1_amount` - Maximum token 1 amount to deposit, prevents excessive slippage", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Pays to mint the position" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false + }, + { + "name": "ownerLpToken", + "isMut": true, + "isSigner": false, + "docs": [ + "Owner lp tokan account" + ] + }, + { + "name": "token0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The payer's token account for token_0" + ] + }, + { + "name": "token1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The payer's token account for token_1" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "token Program" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "Token program 2022" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false, + "docs": [ + "Lp token mint" + ] + } + ], + "args": [ + { + "name": "lpTokenAmount", + "type": "u64" + }, + { + "name": "maximumToken0Amount", + "type": "u64" + }, + { + "name": "maximumToken1Amount", + "type": "u64" + } + ] + }, + { + "name": "withdraw", + "docs": [ + "Withdraw lp for token0 ande token1", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `lp_token_amount` - Amount of pool tokens to burn. User receives an output of token a and b based on the percentage of the pool tokens that are returned.", + "* `minimum_token_0_amount` - Minimum amount of token 0 to receive, prevents excessive slippage", + "* `minimum_token_1_amount` - Minimum amount of token 1 to receive, prevents excessive slippage", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Pays to mint the position" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool state account" + ] + }, + { + "name": "ownerLpToken", + "isMut": true, + "isSigner": false, + "docs": [ + "Owner lp token account" + ] + }, + { + "name": "token0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The owner's token account for receive token_0" + ] + }, + { + "name": "token1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The owner's token account for receive token_1" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "token Program" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "Token program 2022" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool lp token mint" + ] + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "memo program" + ] + } + ], + "args": [ + { + "name": "lpTokenAmount", + "type": "u64" + }, + { + "name": "minimumToken0Amount", + "type": "u64" + }, + { + "name": "minimumToken1Amount", + "type": "u64" + } + ] + }, + { + "name": "swapBaseInput", + "docs": [ + "Swap the tokens in the pool base input amount", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `amount_in` - input amount to transfer, output to DESTINATION is based on the exchange rate", + "* `minimum_amount_out` - Minimum amount of output token, prevents excessive slippage", + "" + ], + "accounts": [ + { + "name": "payer", + "isMut": false, + "isSigner": true, + "docs": [ + "The user performing the swap" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "The factory state to read protocol fees" + ] + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account of the pool in which the swap will be performed" + ] + }, + { + "name": "inputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for input token" + ] + }, + { + "name": "outputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for output token" + ] + }, + { + "name": "inputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for input token" + ] + }, + { + "name": "outputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for output token" + ] + }, + { + "name": "inputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for input token transfers" + ] + }, + { + "name": "outputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for output token transfers" + ] + }, + { + "name": "inputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of input token" + ] + }, + { + "name": "outputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of output token" + ] + }, + { + "name": "observationState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account for the most recent oracle observation" + ] + } + ], + "args": [ + { + "name": "amountIn", + "type": "u64" + }, + { + "name": "minimumAmountOut", + "type": "u64" + } + ] + }, + { + "name": "swapBaseOutput", + "docs": [ + "Swap the tokens in the pool base output amount", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `max_amount_in` - input amount prevents excessive slippage", + "* `amount_out` - amount of output token", + "" + ], + "accounts": [ + { + "name": "payer", + "isMut": false, + "isSigner": true, + "docs": [ + "The user performing the swap" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "The factory state to read protocol fees" + ] + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account of the pool in which the swap will be performed" + ] + }, + { + "name": "inputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for input token" + ] + }, + { + "name": "outputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for output token" + ] + }, + { + "name": "inputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for input token" + ] + }, + { + "name": "outputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for output token" + ] + }, + { + "name": "inputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for input token transfers" + ] + }, + { + "name": "outputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for output token transfers" + ] + }, + { + "name": "inputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of input token" + ] + }, + { + "name": "outputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of output token" + ] + }, + { + "name": "observationState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account for the most recent oracle observation" + ] + } + ], + "args": [ + { + "name": "maxAmountIn", + "type": "u64" + }, + { + "name": "amountOut", + "type": "u64" + } + ] + } + ], + "accounts": [ + { + "name": "AmmConfig", + "docs": [ + "Holds the current owner of the factory" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "bump", + "docs": [ + "Bump to identify PDA" + ], + "type": "u8" + }, + { + "name": "disableCreatePool", + "docs": [ + "Status to control if new pool can be create" + ], + "type": "bool" + }, + { + "name": "index", + "docs": [ + "Config index" + ], + "type": "u16" + }, + { + "name": "tradeFeeRate", + "docs": [ + "The trade fee, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "protocolFeeRate", + "docs": [ + "The protocol fee" + ], + "type": "u64" + }, + { + "name": "fundFeeRate", + "docs": [ + "The fund fee, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "createPoolFee", + "docs": [ + "Fee for create a new pool" + ], + "type": "u64" + }, + { + "name": "protocolOwner", + "docs": [ + "Address of the protocol fee owner" + ], + "type": "publicKey" + }, + { + "name": "fundOwner", + "docs": [ + "Address of the fund fee owner" + ], + "type": "publicKey" + }, + { + "name": "padding", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u64", + 16 + ] + } + } + ] + } + }, + { + "name": "ObservationState", + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "docs": [ + "Whether the ObservationState is initialized" + ], + "type": "bool" + }, + { + "name": "observationIndex", + "docs": [ + "the most-recently updated index of the observations array" + ], + "type": "u16" + }, + { + "name": "poolId", + "type": "publicKey" + }, + { + "name": "observations", + "docs": [ + "observation array" + ], + "type": { + "array": [ + { + "defined": "Observation" + }, + 100 + ] + } + }, + { + "name": "padding", + "docs": [ + "padding for feature update" + ], + "type": { + "array": [ + "u64", + 4 + ] + } + } + ] + } + }, + { + "name": "PoolState", + "type": { + "kind": "struct", + "fields": [ + { + "name": "ammConfig", + "docs": [ + "Which config the pool belongs" + ], + "type": "publicKey" + }, + { + "name": "poolCreator", + "docs": [ + "pool creator" + ], + "type": "publicKey" + }, + { + "name": "token0Vault", + "docs": [ + "Token A" + ], + "type": "publicKey" + }, + { + "name": "token1Vault", + "docs": [ + "Token B" + ], + "type": "publicKey" + }, + { + "name": "lpMint", + "docs": [ + "Pool tokens are issued when A or B tokens are deposited.", + "Pool tokens can be withdrawn back to the original A or B token." + ], + "type": "publicKey" + }, + { + "name": "token0Mint", + "docs": [ + "Mint information for token A" + ], + "type": "publicKey" + }, + { + "name": "token1Mint", + "docs": [ + "Mint information for token B" + ], + "type": "publicKey" + }, + { + "name": "token0Program", + "docs": [ + "token_0 program" + ], + "type": "publicKey" + }, + { + "name": "token1Program", + "docs": [ + "token_1 program" + ], + "type": "publicKey" + }, + { + "name": "observationKey", + "docs": [ + "observation account to store oracle data" + ], + "type": "publicKey" + }, + { + "name": "authBump", + "type": "u8" + }, + { + "name": "status", + "docs": [ + "Bitwise representation of the state of the pool", + "bit0, 1: disable deposit(vaule is 1), 0: normal", + "bit1, 1: disable withdraw(vaule is 2), 0: normal", + "bit2, 1: disable swap(vaule is 4), 0: normal" + ], + "type": "u8" + }, + { + "name": "lpMintDecimals", + "type": "u8" + }, + { + "name": "mint0Decimals", + "docs": [ + "mint0 and mint1 decimals" + ], + "type": "u8" + }, + { + "name": "mint1Decimals", + "type": "u8" + }, + { + "name": "lpSupply", + "docs": [ + "lp mint supply" + ], + "type": "u64" + }, + { + "name": "protocolFeesToken0", + "docs": [ + "The amounts of token_0 and token_1 that are owed to the liquidity provider." + ], + "type": "u64" + }, + { + "name": "protocolFeesToken1", + "type": "u64" + }, + { + "name": "fundFeesToken0", + "type": "u64" + }, + { + "name": "fundFeesToken1", + "type": "u64" + }, + { + "name": "openTime", + "docs": [ + "The timestamp allowed for swap in the pool." + ], + "type": "u64" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 32 + ] + } + } + ] + } + } + ], + "types": [ + { + "name": "Observation", + "docs": [ + "The element of observations in ObservationState" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "blockTimestamp", + "docs": [ + "The block timestamp of the observation" + ], + "type": "u64" + }, + { + "name": "cumulativeToken0PriceX32", + "docs": [ + "the cumulative of token0 price during the duration time, Q32.32, the remaining 64 bit for overflow" + ], + "type": "u128" + }, + { + "name": "cumulativeToken1PriceX32", + "docs": [ + "the cumulative of token1 price during the duration time, Q32.32, the remaining 64 bit for overflow" + ], + "type": "u128" + } + ] + } + }, + { + "name": "TradeDirection", + "docs": [ + "The direction of a trade, since curves can be specialized to treat each", + "token differently (by adding offsets or weights)" + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "ZeroForOne" + }, + { + "name": "OneForZero" + } + ] + } + }, + { + "name": "RoundDirection", + "docs": [ + "The direction to round. Used for pool token to trading token conversions to", + "avoid losing value on any deposit or withdrawal." + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "Floor" + }, + { + "name": "Ceiling" + } + ] + } + }, + { + "name": "PoolStatusBitIndex", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Deposit" + }, + { + "name": "Withdraw" + }, + { + "name": "Swap" + } + ] + } + }, + { + "name": "PoolStatusBitFlag", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Enable" + }, + { + "name": "Disable" + } + ] + } + } + ], + "events": [ + { + "name": "LpChangeEvent", + "fields": [ + { + "name": "poolId", + "type": "publicKey", + "index": true + }, + { + "name": "lpAmountBefore", + "type": "u64", + "index": false + }, + { + "name": "token0VaultBefore", + "type": "u64", + "index": false + }, + { + "name": "token1VaultBefore", + "type": "u64", + "index": false + }, + { + "name": "token0Amount", + "type": "u64", + "index": false + }, + { + "name": "token1Amount", + "type": "u64", + "index": false + }, + { + "name": "token0TransferFee", + "type": "u64", + "index": false + }, + { + "name": "token1TransferFee", + "type": "u64", + "index": false + }, + { + "name": "changeType", + "type": "u8", + "index": false + } + ] + }, + { + "name": "SwapEvent", + "fields": [ + { + "name": "poolId", + "type": "publicKey", + "index": true + }, + { + "name": "inputVaultBefore", + "type": "u64", + "index": false + }, + { + "name": "outputVaultBefore", + "type": "u64", + "index": false + }, + { + "name": "inputAmount", + "type": "u64", + "index": false + }, + { + "name": "outputAmount", + "type": "u64", + "index": false + }, + { + "name": "inputTransferFee", + "type": "u64", + "index": false + }, + { + "name": "outputTransferFee", + "type": "u64", + "index": false + }, + { + "name": "baseInput", + "type": "bool", + "index": false + } + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "NotApproved", + "msg": "Not approved" + }, + { + "code": 6001, + "name": "InvalidOwner", + "msg": "Input account owner is not the program address" + }, + { + "code": 6002, + "name": "EmptySupply", + "msg": "Input token account empty" + }, + { + "code": 6003, + "name": "InvalidInput", + "msg": "InvalidInput" + }, + { + "code": 6004, + "name": "IncorrectLpMint", + "msg": "Address of the provided lp token mint is incorrect" + }, + { + "code": 6005, + "name": "ExceededSlippage", + "msg": "Exceeds desired slippage limit" + }, + { + "code": 6006, + "name": "ZeroTradingTokens", + "msg": "Given pool token amount results in zero trading tokens" + }, + { + "code": 6007, + "name": "NotSupportMint", + "msg": "Not support token_2022 mint extension" + }, + { + "code": 6008, + "name": "InvalidVault", + "msg": "invaild vault" + }, + { + "code": 6009, + "name": "InitLpAmountTooLess", + "msg": "Init lp amount is too less(Because 100 amount lp will be locked)" + } + ] + } \ No newline at end of file diff --git a/1_solana sniper bot(node) using gRPC/raydium_launchpad_idl.json b/1_solana sniper bot(node) using gRPC/raydium_launchpad_idl.json new file mode 100644 index 0000000..c42bed9 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/raydium_launchpad_idl.json @@ -0,0 +1,4304 @@ +{ + "address": "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj", + "metadata": { + "name": "raydium_launchpad", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "buy_exact_in", + "docs": [ + "Use the given amount of quote tokens to purchase base tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_in` - Amount of quote token to purchase", + "* `minimum_amount_out` - Minimum amount of base token to receive (slippage protection)", + "* `share_fee_rate` - Fee rate for the share", + "" + ], + "discriminator": [ + 250, + 234, + 13, + 123, + 213, + 156, + 19, + 236 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "minimum_amount_out", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "buy_exact_out", + "docs": [ + "Use quote tokens to purchase the given amount of base tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_out` - Amount of base token to receive", + "* `maximum_amount_in` - Maximum amount of quote token to purchase (slippage protection)", + "* `share_fee_rate` - Fee rate for the share" + ], + "discriminator": [ + 24, + 211, + 116, + 40, + 105, + 3, + 153, + 56 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_out", + "type": "u64" + }, + { + "name": "maximum_amount_in", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "claim_platform_fee", + "docs": [ + "Claim platform fee", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 156, + 39, + 208, + 135, + 76, + 237, + 61, + 72 + ], + "accounts": [ + { + "name": "platform_fee_wallet", + "docs": [ + "Only the wallet stored in platform_config can collect platform fees" + ], + "writable": true, + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault and mint operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true + }, + { + "name": "platform_config", + "docs": [ + "The platform config account" + ] + }, + { + "name": "quote_vault", + "writable": true + }, + { + "name": "recipient_token_account", + "docs": [ + "The address that receives the collected quote token fees" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "platform_fee_wallet" + }, + { + "kind": "const", + "value": [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ] + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token vault" + ] + }, + { + "name": "token_program", + "docs": [ + "SPL program for input token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "associated_token_program", + "docs": [ + "Required for associated token program" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + } + ], + "args": [] + }, + { + "name": "claim_vested_token", + "docs": [ + "Claim vested token", + "# Arguments" + ], + "discriminator": [ + 49, + 33, + 104, + 30, + 189, + 157, + 79, + 35 + ], + "accounts": [ + { + "name": "beneficiary", + "docs": [ + "The beneficiary of the vesting account" + ], + "writable": true, + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault and mint operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true + }, + { + "name": "vesting_record", + "docs": [ + "The vesting record account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 101, + 115, + 116, + 105, + 110, + 103 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "beneficiary" + } + ] + } + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "user_base_token", + "writable": true, + "signer": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint for the base token (token being sold)", + "Created in this instruction with specified decimals" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "associated_token_program", + "docs": [ + "Required for associated token program" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + } + ], + "args": [] + }, + { + "name": "collect_fee", + "docs": [ + "Collects accumulated fees from the pool", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 60, + 173, + 247, + 103, + 4, + 93, + 130, + 48 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "Only protocol_fee_owner saved in global_config can collect protocol fee now" + ], + "signer": true + }, + { + "name": "authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Pool state stores accumulated protocol fee amount" + ], + "writable": true + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The address that holds pool tokens for quote token" + ], + "writable": true + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token vault" + ] + }, + { + "name": "recipient_token_account", + "docs": [ + "The address that receives the collected quote token fees" + ], + "writable": true + }, + { + "name": "token_program", + "docs": [ + "SPL program for input token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [] + }, + { + "name": "collect_migrate_fee", + "docs": [ + "Collects migrate fees from the pool", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 255, + 186, + 150, + 223, + 235, + 118, + 201, + 186 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "Only migrate_fee_owner saved in global_config can collect migrate fee now" + ], + "signer": true + }, + { + "name": "authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Pool state stores accumulated protocol fee amount" + ], + "writable": true + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The address that holds pool tokens for quote token" + ], + "writable": true + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token vault" + ] + }, + { + "name": "recipient_token_account", + "docs": [ + "The address that receives the collected quote token fees" + ], + "writable": true + }, + { + "name": "token_program", + "docs": [ + "SPL program for input token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [] + }, + { + "name": "create_config", + "docs": [ + "Creates a new configuration", + "# Arguments", + "", + "* `ctx` - The accounts needed by instruction", + "* `curve_type` - The type of bonding curve (0: ConstantProduct)", + "* `index` - The index of config, there may be multiple config with the same curve type.", + "* `trade_fee_rate` - Trade fee rate, must be less than RATE_DENOMINATOR_VALUE", + "" + ], + "discriminator": [ + 201, + 207, + 243, + 114, + 75, + 111, + 47, + 189 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "The protocol owner/admin account", + "Must match the predefined admin address", + "Has authority to create and modify protocol configurations" + ], + "writable": true, + "signer": true, + "address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ" + }, + { + "name": "global_config", + "docs": [ + "Global configuration account that stores protocol-wide settings", + "PDA generated using GLOBAL_CONFIG_SEED, quote token mint, and curve type", + "Stores fee rates and protocol parameters" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108, + 95, + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "account", + "path": "quote_token_mint" + }, + { + "kind": "arg", + "path": "curve_type" + }, + { + "kind": "arg", + "path": "index" + } + ] + } + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint address of the quote token (token used for buying)", + "This will be the standard token used for all pools with this config" + ] + }, + { + "name": "protocol_fee_owner", + "docs": [ + "Account that will receive protocol fees" + ] + }, + { + "name": "migrate_fee_owner", + "docs": [ + "Account that will receive migrate fees" + ] + }, + { + "name": "migrate_to_amm_wallet", + "docs": [ + "The control wallet address for migrating to amm" + ] + }, + { + "name": "migrate_to_cpswap_wallet", + "docs": [ + "The control wallet address for migrating to cpswap" + ] + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "curve_type", + "type": "u8" + }, + { + "name": "index", + "type": "u16" + }, + { + "name": "migrate_fee", + "type": "u64" + }, + { + "name": "trade_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "create_platform_config", + "docs": [ + "Create platform config account", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "# Fields", + "* `fee_rate` - Fee rate of the platform", + "* `name` - Name of the platform", + "* `web` - Website of the platform", + "* `img` - Image link of the platform", + "" + ], + "discriminator": [ + 176, + 90, + 196, + 175, + 253, + 113, + 220, + 20 + ], + "accounts": [ + { + "name": "platform_admin", + "docs": [ + "The account paying for the initialization costs" + ], + "writable": true, + "signer": true + }, + { + "name": "platform_fee_wallet" + }, + { + "name": "platform_nft_wallet" + }, + { + "name": "platform_config", + "docs": [ + "The platform config account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 108, + 97, + 116, + 102, + 111, + 114, + 109, + 95, + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "account", + "path": "platform_admin" + } + ] + } + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "platform_params", + "type": { + "defined": { + "name": "PlatformParams" + } + } + } + ] + }, + { + "name": "create_vesting_account", + "docs": [ + "Create vesting account", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `share` - The share amount of base token to be vested", + "" + ], + "discriminator": [ + 129, + 178, + 2, + 13, + 217, + 172, + 230, + 218 + ], + "accounts": [ + { + "name": "creator", + "docs": [ + "The account paying for the initialization costs", + "This can be any account with sufficient SOL to cover the transaction" + ], + "writable": true, + "signer": true + }, + { + "name": "beneficiary", + "writable": true + }, + { + "name": "pool_state", + "docs": [ + "The pool state account" + ], + "writable": true + }, + { + "name": "vesting_record", + "docs": [ + "The vesting record account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 101, + 115, + 116, + 105, + 110, + 103 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "beneficiary" + } + ] + } + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "share_amount", + "type": "u64" + } + ] + }, + { + "name": "initialize", + "docs": [ + "Initializes a new trading pool", + "# Arguments", + "", + "* `ctx` - The context of accounts containing pool and token information", + "" + ], + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The account paying for the initialization costs", + "This can be any account with sufficient SOL to cover the transaction" + ], + "writable": true, + "signer": true + }, + { + "name": "creator" + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Includes settings like quote token mint and fee parameters" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform info", + "Includes settings like the fee_rate, name, web, img of the platform" + ] + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault and mint operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "base_mint", + "docs": [ + "The mint for the base token (token being sold)", + "Created in this instruction with specified decimals" + ], + "writable": true, + "signer": true + }, + { + "name": "quote_mint", + "docs": [ + "The mint for the quote token (token used to buy)", + "Must match the quote_mint specified in global config" + ] + }, + { + "name": "base_vault", + "docs": [ + "Token account that holds the pool's base tokens", + "PDA generated using POOL_VAULT_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "base_mint" + } + ] + } + }, + { + "name": "quote_vault", + "docs": [ + "Token account that holds the pool's quote tokens", + "PDA generated using POOL_VAULT_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "metadata_account", + "docs": [ + "Account to store the base token's metadata", + "Created using Metaplex metadata program" + ], + "writable": true + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for the quote token" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "metadata_program", + "docs": [ + "Metaplex Token Metadata program", + "Used to create metadata for the base token" + ], + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "rent_program", + "docs": [ + "Required for rent exempt calculations" + ], + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "base_mint_param", + "type": { + "defined": { + "name": "MintParams" + } + } + }, + { + "name": "curve_param", + "type": { + "defined": { + "name": "CurveParams" + } + } + }, + { + "name": "vesting_param", + "type": { + "defined": { + "name": "VestingParams" + } + } + } + ] + }, + { + "name": "migrate_to_amm", + "docs": [ + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 207, + 82, + 192, + 145, + 254, + 207, + 145, + 223 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "Only migrate_to_amm_wallet can migrate to cpswap pool", + "This signer must match the migrate_to_amm_wallet saved in global_config" + ], + "writable": true, + "signer": true + }, + { + "name": "base_mint", + "docs": [ + "The mint for the base token (token being sold)" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint for the quote token (token used to buy)" + ] + }, + { + "name": "openbook_program", + "address": "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX" + }, + { + "name": "market", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "request_queue", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "event_queue", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "bids", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "asks", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "market_vault_signer" + }, + { + "name": "market_base_vault", + "docs": [ + "Token account that holds the market's base tokens" + ], + "writable": true + }, + { + "name": "market_quote_vault", + "docs": [ + "Token account that holds the market's quote tokens" + ], + "writable": true + }, + { + "name": "amm_program", + "address": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" + }, + { + "name": "amm_pool", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 97, + 109, + 109, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 97, + 109, + 109, + 32, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_open_orders", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 111, + 112, + 101, + 110, + 95, + 111, + 114, + 100, + 101, + 114, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_lp_mint", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 108, + 112, + 95, + 109, + 105, + 110, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_base_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 99, + 111, + 105, + 110, + 95, + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_quote_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 112, + 99, + 95, + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_target_orders", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 116, + 97, + 114, + 103, + 101, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_config", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 97, + 109, + 109, + 95, + 99, + 111, + 110, + 102, + 105, + 103, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_create_fee_destination", + "writable": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "pool_lp_token", + "writable": true + }, + { + "name": "spl_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "docs": [ + "Program to create an ATA for receiving fee NFT" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "rent_program", + "docs": [ + "Required for rent exempt calculations" + ], + "address": "SysvarRent111111111111111111111111111111111" + } + ], + "args": [ + { + "name": "base_lot_size", + "type": "u64" + }, + { + "name": "quote_lot_size", + "type": "u64" + }, + { + "name": "market_vault_signer_nonce", + "type": "u8" + } + ] + }, + { + "name": "migrate_to_cpswap", + "docs": [ + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 136, + 92, + 200, + 103, + 28, + 218, + 144, + 140 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "Only migrate_to_cpswap_wallet can migrate to cpswap pool", + "This signer must match the migrate_to_cpswap_wallet saved in global_config" + ], + "writable": true, + "signer": true + }, + { + "name": "base_mint", + "docs": [ + "The mint for the base token (token being sold)" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint for the quote token (token used to buy)" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "cpswap_program", + "address": "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C" + }, + { + "name": "cpswap_pool", + "docs": [ + "PDA account:", + "seeds = [", + "b\"pool\",", + "cpswap_config.key().as_ref(),", + "token_0_mint.key().as_ref(),", + "token_1_mint.key().as_ref(),", + "],", + "seeds::program = cpswap_program,", + "", + "Or random account: must be signed by cli" + ], + "writable": true + }, + { + "name": "cpswap_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 110, + 100, + 95, + 108, + 112, + 95, + 109, + 105, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_lp_mint", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 108, + 112, + 95, + 109, + 105, + 110, + 116 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_base_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + }, + { + "kind": "account", + "path": "base_mint" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_quote_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_config" + }, + { + "name": "cpswap_create_pool_fee", + "writable": true + }, + { + "name": "cpswap_observation", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 111, + 98, + 115, + 101, + 114, + 118, + 97, + 116, + 105, + 111, + 110 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "lock_program", + "address": "LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE" + }, + { + "name": "lock_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 108, + 111, + 99, + 107, + 95, + 99, + 112, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "lock_program" + } + } + }, + { + "name": "lock_lp_vault", + "writable": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "pool_lp_token", + "writable": true + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for the quote token" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "docs": [ + "Program to create an ATA for receiving fee NFT" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "rent_program", + "docs": [ + "Required for rent exempt calculations" + ], + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "metadata_program", + "docs": [ + "Program to create NFT metadata accunt" + ], + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + } + ], + "args": [] + }, + { + "name": "sell_exact_in", + "docs": [ + "Use the given amount of base tokens to sell for quote tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_in` - Amount of base token to sell", + "* `minimum_amount_out` - Minimum amount of quote token to receive (slippage protection)", + "* `share_fee_rate` - Fee rate for the share", + "" + ], + "discriminator": [ + 149, + 39, + 222, + 155, + 211, + 124, + 152, + 26 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "minimum_amount_out", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "sell_exact_out", + "docs": [ + "Sell base tokens for the given amount of quote tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_out` - Amount of quote token to receive", + "* `maximum_amount_in` - Maximum amount of base token to purchase (slippage protection)", + "* `share_fee_rate` - Fee rate for the share", + "" + ], + "discriminator": [ + 95, + 200, + 71, + 34, + 8, + 9, + 11, + 166 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_out", + "type": "u64" + }, + { + "name": "maximum_amount_in", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "update_config", + "docs": [ + "Updates configuration parameters", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `param` - Parameter to update:", + "- 0: Update trade_fee_rate", + "- 1: Update fee owner", + "* `value` - New value for the selected parameter", + "" + ], + "discriminator": [ + 29, + 158, + 252, + 191, + 10, + 83, + 219, + 99 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "The global config owner or admin" + ], + "signer": true, + "address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ" + }, + { + "name": "global_config", + "docs": [ + "Global config account to be changed" + ], + "writable": true + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "value", + "type": "u64" + } + ] + }, + { + "name": "update_platform_config", + "docs": [ + "Update platform config", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `param` - Parameter to update", + "" + ], + "discriminator": [ + 195, + 60, + 76, + 129, + 146, + 45, + 67, + 143 + ], + "accounts": [ + { + "name": "platform_admin", + "docs": [ + "The account paying for the initialization costs" + ], + "signer": true + }, + { + "name": "platform_config", + "docs": [ + "Platform config account to be changed" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 108, + 97, + 116, + 102, + 111, + 114, + 109, + 95, + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "account", + "path": "platform_admin" + } + ] + } + } + ], + "args": [ + { + "name": "param", + "type": { + "defined": { + "name": "PlatformConfigParam" + } + } + } + ] + } + ], + "accounts": [ + { + "name": "GlobalConfig", + "discriminator": [ + 149, + 8, + 156, + 202, + 160, + 252, + 176, + 217 + ] + }, + { + "name": "PlatformConfig", + "discriminator": [ + 160, + 78, + 128, + 0, + 248, + 83, + 230, + 160 + ] + }, + { + "name": "PoolState", + "discriminator": [ + 247, + 237, + 227, + 245, + 215, + 195, + 222, + 70 + ] + }, + { + "name": "VestingRecord", + "discriminator": [ + 106, + 243, + 221, + 205, + 230, + 126, + 85, + 83 + ] + } + ], + "events": [ + { + "name": "ClaimVestedEvent", + "discriminator": [ + 21, + 194, + 114, + 87, + 120, + 211, + 226, + 32 + ] + }, + { + "name": "CreateVestingEvent", + "discriminator": [ + 150, + 152, + 11, + 179, + 52, + 210, + 191, + 125 + ] + }, + { + "name": "PoolCreateEvent", + "discriminator": [ + 151, + 215, + 226, + 9, + 118, + 161, + 115, + 174 + ] + }, + { + "name": "TradeEvent", + "discriminator": [ + 189, + 219, + 127, + 211, + 78, + 230, + 97, + 238 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "NotApproved", + "msg": "Not approved" + }, + { + "code": 6001, + "name": "InvalidOwner", + "msg": "Input account owner is not the program address" + }, + { + "code": 6002, + "name": "InvalidInput", + "msg": "InvalidInput" + }, + { + "code": 6003, + "name": "InputNotMatchCurveConfig", + "msg": "The input params are not match with curve type in config" + }, + { + "code": 6004, + "name": "ExceededSlippage", + "msg": "Exceeds desired slippage limit" + }, + { + "code": 6005, + "name": "PoolFunding", + "msg": "Pool funding" + }, + { + "code": 6006, + "name": "PoolMigrated", + "msg": "Pool migrated" + }, + { + "code": 6007, + "name": "MigrateTypeNotMatch", + "msg": "Migrate type not match" + }, + { + "code": 6008, + "name": "MathOverflow", + "msg": "Math overflow" + }, + { + "code": 6009, + "name": "NoAssetsToCollect", + "msg": "No assets to collect" + }, + { + "code": 6010, + "name": "VestingRatioTooHigh", + "msg": "Vesting ratio too high" + }, + { + "code": 6011, + "name": "VestingSettingEnded", + "msg": "Vesting setting ended" + }, + { + "code": 6012, + "name": "VestingNotStarted", + "msg": "Vesting not started" + }, + { + "code": 6013, + "name": "NoVestingSchedule", + "msg": "No vesting schedule" + }, + { + "code": 6014, + "name": "InvalidPlatformInfo", + "msg": "The platform info input is invalid" + }, + { + "code": 6015, + "name": "PoolNotMigrated", + "msg": "Pool not migrated" + } + ], + "types": [ + { + "name": "ClaimVestedEvent", + "docs": [ + "Emitted when vesting token claimed by beneficiary" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "beneficiary", + "type": "pubkey" + }, + { + "name": "claim_amount", + "type": "u64" + } + ] + } + }, + { + "name": "ConstantCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "supply", + "type": "u64" + }, + { + "name": "total_base_sell", + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "type": "u64" + }, + { + "name": "migrate_type", + "type": "u8" + } + ] + } + }, + { + "name": "CreateVestingEvent", + "docs": [ + "Emitted when vest_account created" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "beneficiary", + "type": "pubkey" + }, + { + "name": "share_amount", + "type": "u64" + } + ] + } + }, + { + "name": "CurveParams", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Constant", + "fields": [ + { + "name": "data", + "type": { + "defined": { + "name": "ConstantCurve" + } + } + } + ] + }, + { + "name": "Fixed", + "fields": [ + { + "name": "data", + "type": { + "defined": { + "name": "FixedCurve" + } + } + } + ] + }, + { + "name": "Linear", + "fields": [ + { + "name": "data", + "type": { + "defined": { + "name": "LinearCurve" + } + } + } + ] + } + ] + } + }, + { + "name": "FixedCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "supply", + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "type": "u64" + }, + { + "name": "migrate_type", + "type": "u8" + } + ] + } + }, + { + "name": "GlobalConfig", + "docs": [ + "Holds the current owner of the factory" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "Account update epoch" + ], + "type": "u64" + }, + { + "name": "curve_type", + "docs": [ + "0: Constant Product Curve", + "1: Fixed Price Curve", + "2: Linear Price Curve" + ], + "type": "u8" + }, + { + "name": "index", + "docs": [ + "Config index" + ], + "type": "u16" + }, + { + "name": "migrate_fee", + "docs": [ + "The fee of migrate to amm" + ], + "type": "u64" + }, + { + "name": "trade_fee_rate", + "docs": [ + "The trade fee rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "max_share_fee_rate", + "docs": [ + "The maximum share fee rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_base_supply", + "docs": [ + "The minimum base supply, the value without decimals" + ], + "type": "u64" + }, + { + "name": "max_lock_rate", + "docs": [ + "The maximum lock rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_base_sell_rate", + "docs": [ + "The minimum base sell rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_base_migrate_rate", + "docs": [ + "The minimum base migrate rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_quote_fund_raising", + "docs": [ + "The minimum quote fund raising, the value with decimals" + ], + "type": "u64" + }, + { + "name": "quote_mint", + "docs": [ + "Mint information for quote token" + ], + "type": "pubkey" + }, + { + "name": "protocol_fee_owner", + "docs": [ + "Protocol Fee owner" + ], + "type": "pubkey" + }, + { + "name": "migrate_fee_owner", + "docs": [ + "Migrate Fee owner" + ], + "type": "pubkey" + }, + { + "name": "migrate_to_amm_wallet", + "docs": [ + "Migrate to amm control wallet" + ], + "type": "pubkey" + }, + { + "name": "migrate_to_cpswap_wallet", + "docs": [ + "Migrate to cpswap wallet" + ], + "type": "pubkey" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 16 + ] + } + } + ] + } + }, + { + "name": "LinearCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "supply", + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "type": "u64" + }, + { + "name": "migrate_type", + "type": "u8" + } + ] + } + }, + { + "name": "MigrateNftInfo", + "docs": [ + "Represents the parameters for initializing a platform config account(Only support MigrateType::CPSWAP)", + "# Fields", + "* `platform_scale` - Scale of the platform liquidity quantity rights will be converted into NFT", + "* `creator_scale` - Scale of the token creator liquidity quantity rights will be converted into NFT", + "* `burn_scale` - Scale of liquidity directly to burn", + "", + "* platform_scale + creator_scale + burn_scale = RATE_DENOMINATOR_VALUE" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "platform_scale", + "type": "u64" + }, + { + "name": "creator_scale", + "type": "u64" + }, + { + "name": "burn_scale", + "type": "u64" + } + ] + } + }, + { + "name": "MintParams", + "docs": [ + "Represents the parameters for initializing a new token mint", + "# Fields", + "* `decimals` - Number of decimal places for the token", + "* `name` - Name of the token", + "* `symbol` - Symbol/ticker of the token", + "* `uri` - URI pointing to token metadata" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "decimals", + "type": "u8" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + } + ] + } + }, + { + "name": "PlatformConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "The epoch for update interval" + ], + "type": "u64" + }, + { + "name": "platform_fee_wallet", + "docs": [ + "The platform fee wallet" + ], + "type": "pubkey" + }, + { + "name": "platform_nft_wallet", + "docs": [ + "The platform nft wallet to receive the platform NFT after migration if platform_scale is not 0(Only support MigrateType::CPSWAP)" + ], + "type": "pubkey" + }, + { + "name": "platform_scale", + "docs": [ + "Scale of the platform liquidity quantity rights will be converted into NFT(Only support MigrateType::CPSWAP)" + ], + "type": "u64" + }, + { + "name": "creator_scale", + "docs": [ + "Scale of the token creator liquidity quantity rights will be converted into NFT(Only support MigrateType::CPSWAP)" + ], + "type": "u64" + }, + { + "name": "burn_scale", + "docs": [ + "Scale of liquidity directly to burn" + ], + "type": "u64" + }, + { + "name": "fee_rate", + "docs": [ + "The platform fee rate" + ], + "type": "u64" + }, + { + "name": "name", + "docs": [ + "The platform name" + ], + "type": { + "array": [ + "u8", + 64 + ] + } + }, + { + "name": "web", + "docs": [ + "The platform website" + ], + "type": { + "array": [ + "u8", + 256 + ] + } + }, + { + "name": "img", + "docs": [ + "The platform img link" + ], + "type": { + "array": [ + "u8", + 256 + ] + } + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u8", + 256 + ] + } + } + ] + } + }, + { + "name": "PlatformConfigParam", + "type": { + "kind": "enum", + "variants": [ + { + "name": "FeeWallet", + "fields": [ + "pubkey" + ] + }, + { + "name": "NFTWallet", + "fields": [ + "pubkey" + ] + }, + { + "name": "MigrateNftInfo", + "fields": [ + { + "defined": { + "name": "MigrateNftInfo" + } + } + ] + }, + { + "name": "FeeRate", + "fields": [ + "u64" + ] + }, + { + "name": "Name", + "fields": [ + "string" + ] + }, + { + "name": "Web", + "fields": [ + "string" + ] + }, + { + "name": "Img", + "fields": [ + "string" + ] + } + ] + } + }, + { + "name": "PlatformParams", + "docs": [ + "Represents the parameters for initializing a platform config account", + "# Fields", + "* `migrate_nft_info` - The platform configures liquidity info during migration(Only support MigrateType::CPSWAP)", + "* `fee_rate` - Fee rate of the platform", + "* `name` - Name of the platform", + "* `web` - Website of the platform", + "* `img` - Image link of the platform" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "migrate_nft_info", + "type": { + "defined": { + "name": "MigrateNftInfo" + } + } + }, + { + "name": "fee_rate", + "type": "u64" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "web", + "type": "string" + }, + { + "name": "img", + "type": "string" + } + ] + } + }, + { + "name": "PoolCreateEvent", + "docs": [ + "Emitted when pool created" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "config", + "type": "pubkey" + }, + { + "name": "base_mint_param", + "type": { + "defined": { + "name": "MintParams" + } + } + }, + { + "name": "curve_param", + "type": { + "defined": { + "name": "CurveParams" + } + } + }, + { + "name": "vesting_param", + "type": { + "defined": { + "name": "VestingParams" + } + } + } + ] + } + }, + { + "name": "PoolState", + "docs": [ + "Represents the state of a trading pool in the protocol", + "Stores all essential information about pool balances, fees, and configuration" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "Account update epoch" + ], + "type": "u64" + }, + { + "name": "auth_bump", + "docs": [ + "Bump seed used for PDA address derivation" + ], + "type": "u8" + }, + { + "name": "status", + "docs": [ + "Current status of the pool", + "* 0: Pool is funding", + "* 1: Pool funding is end, waiting for migration", + "* 2: Pool migration is done" + ], + "type": "u8" + }, + { + "name": "base_decimals", + "docs": [ + "Decimals of the pool base token" + ], + "type": "u8" + }, + { + "name": "quote_decimals", + "docs": [ + "Decimals of the pool quote token" + ], + "type": "u8" + }, + { + "name": "migrate_type", + "docs": [ + "Migrate to AMM or CpSwap" + ], + "type": "u8" + }, + { + "name": "supply", + "docs": [ + "Supply of the pool base token" + ], + "type": "u64" + }, + { + "name": "total_base_sell", + "docs": [ + "Total sell amount of the base token" + ], + "type": "u64" + }, + { + "name": "virtual_base", + "docs": [ + "For different curves, virtual_base and virtual_quote have different meanings", + "For constant product curve, virtual_base and virtual_quote are virtual liquidity, virtual_quote/virtual_base is the initial price", + "For linear price curve, virtual_base is the price slope parameter a, virtual_quote has no effect", + "For fixed price curve, virtual_quote/virtual_base is the initial price" + ], + "type": "u64" + }, + { + "name": "virtual_quote", + "type": "u64" + }, + { + "name": "real_base", + "docs": [ + "Actual base token amount in the pool", + "Represents the real tokens available for trading" + ], + "type": "u64" + }, + { + "name": "real_quote", + "docs": [ + "Actual quote token amount in the pool", + "Represents the real tokens available for trading" + ], + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "docs": [ + "The total quote fund raising of the pool" + ], + "type": "u64" + }, + { + "name": "quote_protocol_fee", + "docs": [ + "Accumulated trading fees in quote tokens", + "Can be collected by the protocol fee owner" + ], + "type": "u64" + }, + { + "name": "platform_fee", + "docs": [ + "Accumulated platform fees in quote tokens", + "Can be collected by the platform wallet stored in platform config" + ], + "type": "u64" + }, + { + "name": "migrate_fee", + "docs": [ + "The fee of migrate to amm" + ], + "type": "u64" + }, + { + "name": "vesting_schedule", + "docs": [ + "Vesting schedule for the base token" + ], + "type": { + "defined": { + "name": "VestingSchedule" + } + } + }, + { + "name": "global_config", + "docs": [ + "Public key of the global configuration account", + "Contains protocol-wide settings this pool adheres to" + ], + "type": "pubkey" + }, + { + "name": "platform_config", + "docs": [ + "Public key of the platform configuration account", + "Contains platform-wide settings this pool adheres to" + ], + "type": "pubkey" + }, + { + "name": "base_mint", + "docs": [ + "Public key of the base mint address" + ], + "type": "pubkey" + }, + { + "name": "quote_mint", + "docs": [ + "Public key of the quote mint address" + ], + "type": "pubkey" + }, + { + "name": "base_vault", + "docs": [ + "Public key of the base token vault", + "Holds the actual base tokens owned by the pool" + ], + "type": "pubkey" + }, + { + "name": "quote_vault", + "docs": [ + "Public key of the quote token vault", + "Holds the actual quote tokens owned by the pool" + ], + "type": "pubkey" + }, + { + "name": "creator", + "docs": [ + "The creator of base token" + ], + "type": "pubkey" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 8 + ] + } + } + ] + } + }, + { + "name": "PoolStatus", + "docs": [ + "Represents the different states a pool can be in", + "* Fund - Initial state where pool is accepting funds", + "* Migrate - Pool funding has ended and waiting for migration", + "* Trade - Pool migration is complete and amm trading is enabled" + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "Fund" + }, + { + "name": "Migrate" + }, + { + "name": "Trade" + } + ] + } + }, + { + "name": "TradeDirection", + "docs": [ + "Specifies the direction of a trade in the bonding curve", + "This is important because curves can treat tokens differently through weights or offsets" + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "Buy" + }, + { + "name": "Sell" + } + ] + } + }, + { + "name": "TradeEvent", + "docs": [ + "Emitted when trade process" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "total_base_sell", + "type": "u64" + }, + { + "name": "virtual_base", + "type": "u64" + }, + { + "name": "virtual_quote", + "type": "u64" + }, + { + "name": "real_base_before", + "type": "u64" + }, + { + "name": "real_quote_before", + "type": "u64" + }, + { + "name": "real_base_after", + "type": "u64" + }, + { + "name": "real_quote_after", + "type": "u64" + }, + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "amount_out", + "type": "u64" + }, + { + "name": "protocol_fee", + "type": "u64" + }, + { + "name": "platform_fee", + "type": "u64" + }, + { + "name": "share_fee", + "type": "u64" + }, + { + "name": "trade_direction", + "type": { + "defined": { + "name": "TradeDirection" + } + } + }, + { + "name": "pool_status", + "type": { + "defined": { + "name": "PoolStatus" + } + } + } + ] + } + }, + { + "name": "VestingParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_locked_amount", + "type": "u64" + }, + { + "name": "cliff_period", + "type": "u64" + }, + { + "name": "unlock_period", + "type": "u64" + } + ] + } + }, + { + "name": "VestingRecord", + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "Account update epoch" + ], + "type": "u64" + }, + { + "name": "pool", + "docs": [ + "The pool state account" + ], + "type": "pubkey" + }, + { + "name": "beneficiary", + "docs": [ + "The beneficiary of the vesting account" + ], + "type": "pubkey" + }, + { + "name": "claimed_amount", + "docs": [ + "The amount of tokens claimed" + ], + "type": "u64" + }, + { + "name": "token_share_amount", + "docs": [ + "The share amount of the token to be vested" + ], + "type": "u64" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 8 + ] + } + } + ] + } + }, + { + "name": "VestingSchedule", + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_locked_amount", + "type": "u64" + }, + { + "name": "cliff_period", + "type": "u64" + }, + { + "name": "unlock_period", + "type": "u64" + }, + { + "name": "start_time", + "type": "u64" + }, + { + "name": "allocated_share_amount", + "docs": [ + "Total allocated share amount of the base token, not greater than total_locked_amount" + ], + "type": "u64" + } + ] + } + } + ] + } \ No newline at end of file diff --git a/1_solana sniper bot(node) using gRPC/swap(offchain).js b/1_solana sniper bot(node) using gRPC/swap(offchain).js new file mode 100644 index 0000000..f229c31 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/swap(offchain).js @@ -0,0 +1,7 @@ +// This module provides an offchain swap function using an IDL (Interface Definition Language) specification. +// It assumes you have a gRPC client generated from the IDL and a wallet/signer available. + +export async function offchainSwap({ fromToken, toToken, amount, walletAddress }) { + //#========📞📞contact to dev📞📞============// + +} diff --git a/1_solana sniper bot(node) using gRPC/swap.js b/1_solana sniper bot(node) using gRPC/swap.js new file mode 100644 index 0000000..e0725c6 --- /dev/null +++ b/1_solana sniper bot(node) using gRPC/swap.js @@ -0,0 +1,307 @@ +import axios from "axios"; +import { Keypair, Connection, LAMPORTS_PER_SOL, VersionedTransaction, SystemProgram, PublicKey, TransactionMessage, sendAndConfirmRawTransaction } from "@solana/web3.js"; +import * as anchor from "@coral-xyz/anchor"; +import { readFile } from "fs/promises"; +import { Wallet } from "@project-serum/anchor"; +import dotenv from "dotenv"; +import chalk from "chalk"; +import fs from "fs"; +import path from "path"; +import bs58 from "bs58"; +import { getSplTokenBalance } from "./fuc.js"; + +dotenv.config(); + +// SWAP_METHOD: "0slot", "nozomi", "race", "solana" +const SWAP_METHOD = (process.env.SWAP_METHOD || "solana").toLowerCase(); + +const NOZOMI_URL = process.env.NOZOMI_URL; +const NOZOMI_UUID = process.env.NOZOMI_UUID; +const nozomiConnection = new Connection(`${NOZOMI_URL}?c=${NOZOMI_UUID}`); + +const NOZOMI_TIP_LAMPORTS = Number(process.env.NOZOMI_TIP_LAMPORTS || 200000); +const JITO_TIP_LAMPORTS = Number(process.env.JITO_TIP || 100000); +const PRIORITIZATION_FEE_LAMPORTS = Number(process.env.PRIORITIZATION_FEE_LAMPORTS || 10000); + +const NOZOMI_TIP_ADDRESS = new PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq"); + +export const MAX_RETRIES = parseInt(process.env.MAX_RETRIES) || 3; + +export const decodePrivateKey = (secretKeyString) =>{ + try { + // Try base58 first + return bs58.decode(secretKeyString); + } catch (error) { + try { + // Try base64 + return Buffer.from(secretKeyString, 'base64'); + } catch (base64Error) { + try { + // Try JSON array (for array format) + const jsonArray = JSON.parse(secretKeyString); + return new Uint8Array(jsonArray); + } catch (jsonError) { + throw new Error('Invalid private key format. Supported formats: base58, base64, or JSON array'); + } + } + } +} + +export const loadwallet = async () => { + const privateKey = process.env.PRIVATE_KEY; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in environment variables"); + } + try { + const privateKeyBytes=decodePrivateKey(privateKey) + const keypair = Keypair.fromSecretKey(privateKeyBytes); + + if (!keypair) { + throw new Error("Failed to create Keypair from the provided private key"); + } + + const wallet = new Wallet(keypair); + wallet.keypair = keypair; + return wallet; + } catch (error) { + console.error("Error loading wallet:", error); + throw error; + } +}; + +export const rpc_connection = () => { + return new Connection(process.env.RPC_URL, "confirmed"); +}; + +export const getBalance = async () => { + const connection = rpc_connection(); + const walletInstance = await loadwallet(); + const balance = await connection.getBalance(walletInstance.publicKey); + + console.log(`Balance =>`, balance / LAMPORTS_PER_SOL, "SOL"); + return balance / LAMPORTS_PER_SOL; +}; + +// const quoteResponse = await ( +// await fetch( +// `https://lite-api.jup.ag/swap/v1/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=${this.mint.toString()}&amount=${this.buy_amount}&slippageBps=4000&restrictIntermediateTokens=true` +// ) +// ).json(); +// const swapResponse = await ( +// await fetch('https://lite-api.jup.ag/swap/v1/swap', { +// method: 'POST', +// headers: { +// 'Content-Type': 'application/json', +// }, +// body: JSON.stringify({ +// quoteResponse, +// userPublicKey: wallet.publicKey, +// dynamicComputeUnitLimit: true, +// dynamicSlippage: true, +// prioritizationFeeLamports: { +// priorityLevelWithMaxLamports: { +// maxLamports: 4000, +// priorityLevel: "high" +// } +// } +// }) +// }) +// ).json(); +// const transactionBase64 = swapResponse.swapTransaction +// const transaction = VersionedTransaction.deserialize(Buffer.from(transactionBase64, 'base64')); +// transaction.sign([wallet]); +// await sendAndConfirmRawTransaction( +// this.instantConnection, +// Buffer.from(transaction.serialize()), +// { skipPreflight: true, maxRetries: 5 } +// ) + + + +const getResponse = async (tokenA, tokenB, amount, slippageBps, anchorWallet) => { + const quoteResponse = ( + await axios.get( + `https://lite-api.jup.ag/swap/v1/quote?inputMint=${tokenA}&outputMint=${tokenB}&amount=${amount}&slippageBps=${slippageBps}` + ) + ).data; + + // Build swap request body based on SWAP_METHOD + let swapRequestBody = { + quoteResponse, + userPublicKey: anchorWallet.publicKey.toString(), + wrapAndUnwrapSol: true, + dynamicComputeUnitLimit: true, + + }; + + // Map SWAP_METHOD string to behavior + if (SWAP_METHOD === "solana" || SWAP_METHOD === "0slot") { + // Standard prioritization fee + swapRequestBody.prioritizationFeeLamports = PRIORITIZATION_FEE_LAMPORTS; + } else if (SWAP_METHOD === "race") { + // JITO tip + swapRequestBody.prioritizationFeeLamports = { jitoTipLamports: JITO_TIP_LAMPORTS }; + } + // "nozomi" handled in executeTransaction + + const swapResponse = await axios.post(`https://lite-api.jup.ag/swap/v1/swap`, swapRequestBody); + return swapResponse; +}; + +const executeTransaction = async (connection, swapTransaction, anchorWallet) => { + try { + if (!anchorWallet?.keypair) { + throw new Error("Invalid anchorWallet: keypair is undefined"); + } + + + const transaction = VersionedTransaction.deserialize(Buffer.from(swapTransaction, "base64")); + transaction.sign([anchorWallet.keypair]); + + let newMessage, newTransaction, rawTransaction, txid, timestart; + + if (SWAP_METHOD === "nozomi") { + console.log("Nozomi response: send via nozomi connection"); + let blockhash = await connection.getLatestBlockhash(); + let message = transaction.message; + let addressLookupTableAccounts = await loadAddressLookupTablesFromMessage(message, connection); + let txMessage = TransactionMessage.decompile(message, { addressLookupTableAccounts }); + // Add Nozomi tip instruction + let nozomiTipIx = SystemProgram.transfer({ + fromPubkey: anchorWallet.publicKey, + toPubkey: NOZOMI_TIP_ADDRESS, + lamports: NOZOMI_TIP_LAMPORTS, + }); + txMessage.instructions.push(nozomiTipIx); + + newMessage = txMessage.compileToV0Message(addressLookupTableAccounts); + newMessage.recentBlockhash = blockhash.blockhash; + + newTransaction = new VersionedTransaction(newMessage); + newTransaction.sign([anchorWallet.keypair]); + + rawTransaction = newTransaction.serialize(); + timestart = Date.now(); + txid = await nozomiConnection.sendRawTransaction(rawTransaction, { + skipPreflight: false, + maxRetries: 2, + }); + + console.log("Nozomi response: txid: %s", txid); + } else { + console.log("Standard/JITO/0slot/solana/race: send via normal connection"); + // Standard/JITO/0slot/solana/race: send via normal connection + const currentUTC = new Date(); + rawTransaction = transaction.serialize(); + timestart = Date.now(); + txid = await sendAndConfirmRawTransaction(connection, Buffer.from(rawTransaction), { + skipPreflight: true, + maxRetries: 1, + }); + + + console.log("Standard/JITO/0slot/solana/race response: txid: %s", txid); + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ confirm time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + return txid; + } + + } catch (error) { + console.error("Transaction execution error:", error); + console.log(chalk.red("Transaction reconfirm after 1s!")); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +}; + +async function loadAddressLookupTablesFromMessage(message, connection) { + let addressLookupTableAccounts = []; + for (let lookup of message.addressTableLookups) { + let lutAccounts = await connection.getAddressLookupTable(lookup.accountKey); + addressLookupTableAccounts.push(lutAccounts.value); + } + return addressLookupTableAccounts; +} + + +export const swap = async (action, mint, amount) => { + const SOL_ADDRESS = "So11111111111111111111111111111111111111112"; + const RETRY_DELAY = Number(process.env.RETRY_DELAY) || 1000; // fallback to 1s if not set + + try { + const connection = rpc_connection(); + const wallet = await loadwallet(); + + // Determine tokenA and tokenB based on action and mint + let tokenA, tokenB; + if (action === "BUY") { + tokenA = SOL_ADDRESS; + tokenB = mint; + } else if (action === "SELL") { + tokenA = mint; + tokenB = SOL_ADDRESS; + } else { + throw new Error(`Unknown action: ${action}`); + } + + console.log(`Swapping ${amount} of ${tokenA} for ${tokenB}...`); + let retryCount = 0; + while (retryCount <= MAX_RETRIES) { + try { + console.log(`Attempt ${retryCount + 1}/${MAX_RETRIES + 1}`); + // If this is a sell (tokenA is not SOL and tokenB is SOL), and retryCount > 1, check tokenA balance before proceeding + if ( + retryCount > 1 && + tokenA !== SOL_ADDRESS && + tokenB === SOL_ADDRESS + ) { + const balance = await getSplTokenBalance(tokenA); + console.log(`(Retry #${retryCount}) Current tokenA (${tokenA}) balance:`, balance, "Requested amount:", amount); + if (balance <= 0) { + console.log(`No balance for tokenA (${tokenA}) to sell. Aborting swap.`); + return "stop"; + } + if (amount > balance) { + console.log(`Requested amount (${amount}) exceeds available balance (${balance}) for tokenA (${tokenA}). Adjusting amount to available balance.`); + amount = balance; + } + } + + + const quoteData = await getResponse(tokenA, tokenB, amount, process.env.SLIPPAGE_BPS || "5000", wallet); + + if (!quoteData?.swapTransaction) { + throw new Error("Failed to get swap transaction data"); + } + + const txid = await executeTransaction(connection, quoteData.swapTransaction, wallet); + + if (!txid) { + throw new Error("Transaction was not confirmed"); + } + + console.log(`--------------------------------------------------------\n +✌✌✌Swap successful! ${tokenA} for ${tokenB}`); + console.log(`https://solscan.io/tx/${txid}\n`); + + return txid; + } catch (error) { + console.error(`Attempt ${retryCount + 1} failed:`, error.message); + retryCount++; + + if (retryCount > MAX_RETRIES) { + console.error(`Transaction failed after ${MAX_RETRIES + 1} attempts.`); + throw error; + } + + console.warn(`Retrying in ${RETRY_DELAY / 1000} seconds (${retryCount}/${MAX_RETRIES})...`); + await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY)); + } + } + } catch (error) { + console.error("Swap failed:", error.message); + return null; + } + + return null; +}; diff --git a/2_copy trading bot(node) using gRPC/README.md b/2_copy trading bot(node) using gRPC/README.md new file mode 100644 index 0000000..03a56e2 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/README.md @@ -0,0 +1,445 @@ +# 🚀 Solana Trading Bot v2.0 + +A high-performance, enterprise-grade Solana trading bot with advanced MEV protection, comprehensive risk management, and real-time monitoring capabilities. + +## ✨ New Features in v2.0 + +- **🔒 Advanced Risk Management**: Daily loss limits, position limits, and automated risk scoring +- **📊 Real-time Dashboard**: Web-based monitoring interface with live charts and metrics +- **🔔 Multi-channel Notifications**: Telegram, Discord, and email notifications +- **📝 Structured Logging**: Winston-based logging with daily rotation and multiple levels +- **⚡ Performance Optimization**: Connection pooling, rate limiting, and retry mechanisms +- **🛡️ Enhanced Security**: IP whitelisting, rate limiting, and secure configuration management +- **📈 Advanced Analytics**: PnL tracking, win rate analysis, and risk metrics +- **🔄 Graceful Shutdown**: Safe position closure and cleanup on exit + +## 🏗️ Architecture + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ gRPC Stream │───▶│ Transaction │───▶│ Trading Engine │ +│ (Triton One) │ │ Parser │ │ (Main Bot) │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Pool Detection │ │ Risk Manager │ + │ (PumpFun, etc.) │ │ & Position Mgmt │ + └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Jupiter API │ │ Notification │ + │ Swap Execution │ │ Service │ + └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Web Dashboard │ │ Logger & │ + │ (Real-time UI) │ │ Analytics │ + └─────────────────┘ └─────────────────┘ +``` + +## 🚀 Quick Start + +### 1. Prerequisites + +- **Node.js 18+** (Latest LTS recommended) +- **Solana wallet** with SOL balance +- **Triton One gRPC** access +- **RPC endpoint** (Helius, QuickNode, etc.) + +### 2. Installation + +```bash +# Clone the repository +git clone +cd solana-trading-bot + +# Install dependencies +npm install + +# Copy environment template +cp env.template .env +``` + +### 3. Configuration + +Edit the `.env` file with your configuration: + +```bash +# Essential Configuration +PRIVATE_KEY=your_wallet_private_key +RPC_URL=https://your-rpc-endpoint.com +GRPC_ENDPOINT=https://your-grpc-endpoint.com +GRPCTOKEN=your_grpc_token + +# Trading Parameters +SNIPERAMOUNT=0.1 # SOL amount per snipe +PROFIT_TARGET=2.0 # 2x profit target +STOP_LOSS=0.5 # 50% stop loss +MAX_HOLD_TIME=300000 # 5 minutes max hold +MIN_LIQUIDITY=10 # Minimum liquidity in SOL +MAX_POSITIONS=5 # Maximum concurrent positions + +# Risk Management +MAX_DAILY_LOSS=1.0 # Maximum daily loss in SOL +MAX_SINGLE_LOSS=0.5 # Maximum single trade loss +TRADE_COOLDOWN=5000 # Cooldown between trades (ms) + +# Dashboard (Optional) +ENABLE_DASHBOARD=true # Enable web dashboard +DASHBOARD_PORT=3000 # Dashboard port + +# Notifications (Optional) +TELEGRAM_BOT_TOKEN=your_bot_token +TELEGRAM_CHAT_ID=your_chat_id +DISCORD_WEBHOOK_URL=your_webhook_url +``` + +### 4. Run the Bot + +```bash +# Start the trading bot +npm start + +# Or for development with auto-restart +npm run dev + +# Start with dashboard enabled +ENABLE_DASHBOARD=true npm start +``` + +## 🌐 Web Dashboard + +Access the real-time dashboard at `http://localhost:3000` (when enabled): + +- **📊 Live Metrics**: Real-time PnL, positions, and risk levels +- **📈 Interactive Charts**: PnL trends and position distribution +- **🔍 Position Management**: View and manage active positions +- **📋 Trading History**: Complete trade history with analytics +- **⚙️ Configuration**: View and monitor bot settings +- **🚨 Emergency Controls**: Emergency position closure + +## ⚙️ Configuration Options + +### Trading Parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `SNIPERAMOUNT` | 0.1 | SOL amount to use for each snipe | +| `PROFIT_TARGET` | 2.0 | Profit target multiplier (2x) | +| `STOP_LOSS` | 0.5 | Stop loss multiplier (50% loss) | +| `MAX_HOLD_TIME` | 300000 | Maximum time to hold position (5 min) | +| `MIN_LIQUIDITY` | 10 | Minimum liquidity required in SOL | +| `MAX_POSITIONS` | 5 | Maximum concurrent positions | + +### Risk Management + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `MAX_DAILY_LOSS` | 1.0 | Maximum daily loss in SOL | +| `MAX_SINGLE_LOSS` | 0.5 | Maximum single trade loss in SOL | +| `TRADE_COOLDOWN` | 5000 | Cooldown between trades (ms) | + +### Pool Filters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `ENABLE_PUMPFUN` | true | Enable PumpFun pool monitoring | +| `ENABLE_PUMPSWAP` | true | Enable PumpSwap pool monitoring | +| `ENABLE_RAYDIUM_LAUNCHLAB` | true | Enable Raydium LaunchLab monitoring | +| `ENABLE_RAYDIUM_CPMM` | true | Enable Raydium CPMM monitoring | + +## 📊 Risk Management Features + +### Automated Risk Controls + +- **Daily Loss Limits**: Automatic trading halt when daily loss threshold reached +- **Position Limits**: Maximum concurrent position management +- **Trade Cooldowns**: Prevents rapid-fire trading +- **Risk Scoring**: Real-time risk level assessment (LOW/MEDIUM/HIGH) + +### Position Management + +- **Profit Targets**: Automatic exit at configured profit levels +- **Stop Losses**: Automatic exit at configured loss levels +- **Time-based Exits**: Maximum hold time enforcement +- **Emergency Closure**: Immediate closure of all positions + +### Risk Metrics + +- **Win Rate Analysis**: Track profitable vs. losing trades +- **PnL Tracking**: Real-time profit/loss monitoring +- **Risk Recommendations**: AI-powered trading suggestions +- **Performance Analytics**: Detailed trading performance metrics + +## 🔔 Notification System + +### Multi-channel Alerts + +- **Telegram**: Real-time trading alerts and updates +- **Discord**: Webhook-based notifications with rich embeds +- **Email**: Detailed reports for important events +- **Dashboard**: Real-time web interface updates + +### Notification Types + +- **Trade Execution**: Buy/sell confirmations +- **Profit Targets**: When profit targets are reached +- **Stop Losses**: When stop losses are triggered +- **Risk Alerts**: High-risk situation notifications +- **Bot Status**: Startup, shutdown, and error notifications + +## 📝 Logging & Monitoring + +### Structured Logging + +- **Multiple Levels**: Debug, Info, Warn, Error, Trade, Profit, Loss +- **Daily Rotation**: Automatic log file rotation and compression +- **Performance Tracking**: Operation timing and performance metrics +- **Error Context**: Detailed error information with stack traces + +### Monitoring Features + +- **Health Checks**: API endpoint health monitoring +- **Performance Metrics**: Response times and throughput +- **Error Tracking**: Comprehensive error logging and alerting +- **Audit Trail**: Complete trading activity audit log + +## 🛡️ Security Features + +### Access Control + +- **Rate Limiting**: API request rate limiting +- **IP Whitelisting**: Configurable IP address restrictions +- **Authentication**: Secure API key management +- **Input Validation**: Comprehensive input sanitization + +### Data Protection + +- **Secure Configuration**: Environment variable management +- **Sensitive Data Masking**: Private key and API key protection +- **Audit Logging**: Complete access and action logging +- **Error Handling**: Secure error message handling + +## 🔧 Advanced Configuration + +### Performance Optimization + +```bash +# Connection settings +CONNECTION_TIMEOUT=30000 +MAX_RETRIES=3 +RETRY_DELAY=1000 + +# Rate limiting +MAX_REQUESTS_PER_MINUTE=100 +ENABLE_RATE_LIMITING=true +``` + +### Logging Configuration + +```bash +# Log levels +LOG_LEVEL=info +DEBUG=false +LOG_TO_FILE=true +LOG_FILE_PATH=./logs/trading-bot.log +``` + +### MEV Protection + +```bash +# MEV protection settings +ENABLE_MEV_PROTECTION=true +SWAP_METHOD=race # race, nozomi, 0slot, solana +PRIORITY_FEE=1000 +``` + +## 📈 Trading Strategies + +### Conservative Strategy +```bash +SNIPERAMOUNT=0.05 +PROFIT_TARGET=1.5 +STOP_LOSS=0.7 +MAX_HOLD_TIME=600000 +MIN_LIQUIDITY=20 +MAX_DAILY_LOSS=0.5 +``` + +### Aggressive Strategy +```bash +SNIPERAMOUNT=0.2 +PROFIT_TARGET=3.0 +STOP_LOSS=0.3 +MAX_HOLD_TIME=180000 +MIN_LIQUIDITY=5 +MAX_DAILY_LOSS=2.0 +``` + +### Balanced Strategy +```bash +SNIPERAMOUNT=0.1 +PROFIT_TARGET=2.0 +STOP_LOSS=0.5 +MAX_HOLD_TIME=300000 +MIN_LIQUIDITY=10 +MAX_DAILY_LOSS=1.0 +``` + +## 🚨 Emergency Procedures + +### Emergency Stop + +```bash +# Send SIGINT to gracefully shutdown +Ctrl+C + +# Or use the dashboard emergency button +# Click "Emergency Close All" in the web interface +``` + +### Manual Position Closure + +```bash +# Close specific position via dashboard +# Or modify the code to add CLI commands +``` + +## 🔍 Troubleshooting + +### Common Issues + +1. **gRPC Connection Failed** + - Verify `GRPC_ENDPOINT` and `GRPCTOKEN` + - Check network connectivity + - Ensure Triton One subscription is active + +2. **Transaction Failures** + - Verify wallet has sufficient SOL + - Check RPC endpoint status + - Adjust slippage tolerance + +3. **Dashboard Not Loading** + - Ensure `ENABLE_DASHBOARD=true` + - Check port availability + - Verify firewall settings + +4. **Notification Failures** + - Verify API keys and tokens + - Check network connectivity + - Review notification service logs + +### Debug Mode + +Enable debug logging: +```bash +DEBUG=true +LOG_LEVEL=debug +``` + +### Log Files + +Check log files for detailed information: +```bash +# Main logs +tail -f logs/trading-bot-*.log + +# Error logs +tail -f logs/trading-bot-error-*.log +``` + +## 📚 API Reference + +### Dashboard API Endpoints + +- `GET /api/health` - Health check +- `GET /api/status` - Bot status and configuration +- `GET /api/risk` - Risk metrics and analytics +- `GET /api/positions` - Active positions +- `GET /api/history` - Trading history +- `GET /api/stats` - Daily statistics +- `POST /api/emergency/close-all` - Emergency position closure + +### WebSocket Support + +Real-time updates via WebSocket (planned for v2.1): +```javascript +// Future implementation +const ws = new WebSocket('ws://localhost:3000/api/ws'); +ws.onmessage = (event) => { + const data = JSON.parse(event.data); + // Handle real-time updates +}; +``` + +## 🤝 Contributing + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +### Development Setup + +```bash +# Install development dependencies +npm install + +# Run linting +npm run lint + +# Format code +npm run format + +# Run tests +npm test +``` + +## 📄 License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + +## 🙏 Acknowledgments + +- [Triton One](https://triton.one/) for gRPC streaming +- [Jupiter](https://jup.ag/) for swap aggregation +- [Solana Labs](https://solana.com/) for the blockchain +- [Raydium](https://raydium.io/) for the DEX platform +- [Winston](https://github.com/winstonjs/winston) for logging +- [Express](https://expressjs.com/) for the web framework + +## 📞 Support + +For support and questions: +- Create an issue on GitHub +- Join our Discord community +- Check the documentation +- Review the troubleshooting guide + +## 🔮 Roadmap + +### v2.1 (Q2 2024) +- WebSocket real-time updates +- Advanced charting and analytics +- Mobile-responsive dashboard +- API rate limiting improvements + +### v2.2 (Q3 2024) +- Machine learning price prediction +- Advanced order types +- Portfolio rebalancing +- Multi-wallet support + +### v3.0 (Q4 2024) +- Cross-chain support +- Advanced MEV strategies +- Institutional features +- Cloud deployment options + +--- + +**⚠️ Disclaimer: This software is for educational purposes only. Use at your own risk. The authors are not responsible for any financial losses. Cryptocurrency trading involves significant risk and may not be suitable for all investors.** \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/SETUP.md b/2_copy trading bot(node) using gRPC/SETUP.md new file mode 100644 index 0000000..ead5c9a --- /dev/null +++ b/2_copy trading bot(node) using gRPC/SETUP.md @@ -0,0 +1,84 @@ +# 🚀 Quick Setup Guide + +## ⚡ 5-Minute Setup + +### 1. Install Dependencies +```bash +npm install +``` + +### 2. Configure Environment +```bash +# Copy the template +cp env.template .env + +# Edit .env with your settings +# At minimum, you need: +PRIVATE_KEY=your_wallet_private_key +RPC_URL=https://your-rpc-endpoint.com +GRPC_ENDPOINT=https://your-grpc-endpoint.com +GRPCTOKEN=your_grpc_token +``` + +### 3. Test Configuration +```bash +npm run test-config +``` + +### 4. Run Demo (Optional) +```bash +npm run demo +``` + +### 5. Start Trading +```bash +npm start +``` + +## 🔑 Required Services + +- **Solana Wallet**: Phantom, Solflare, or private key +- **RPC Endpoint**: [Helius](https://helius.xyz/), [QuickNode](https://quicknode.com/), or [Alchemy](https://alchemy.com/) +- **gRPC Access**: [Triton One](https://triton.one/) subscription + +## 💰 Minimum Requirements + +- **Wallet Balance**: At least 1 SOL +- **Sniper Amount**: 0.1 SOL (configurable) +- **Network**: Stable internet connection + +## 🚨 First Time Setup + +1. **Test with small amounts first** +2. **Use a dedicated trading wallet** +3. **Monitor the bot initially** +4. **Adjust parameters based on performance** + +## 📱 Quick Commands + +| Command | Description | +|---------|-------------| +| `npm start` | Start the sniper bot | +| `npm run dev` | Start with auto-restart | +| `npm run test-config` | Verify configuration | +| `npm run demo` | Run demo mode | +| `start.bat` | Windows startup script | +| `start.sh` | Linux/Mac startup script | + +## 🔧 Troubleshooting + +### Common Issues: +- **"Private key invalid"** → Check key format (base58/base64/JSON) +- **"RPC connection failed"** → Verify RPC URL and network +- **"gRPC error"** → Check Triton One subscription +- **"No trades executing"** → Verify transaction filters + +### Need Help? +1. Check the README.md +2. Run `npm run test-config` +3. Check console logs for errors +4. Verify all environment variables + +--- + +**⚡ Ready to snipe? Run `npm start` and watch the magic happen!** diff --git a/2_copy trading bot(node) using gRPC/config.js b/2_copy trading bot(node) using gRPC/config.js new file mode 100644 index 0000000..27c1ff6 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/config.js @@ -0,0 +1,180 @@ +import dotenv from 'dotenv'; +import { fileURLToPath } from 'url'; +import { dirname, join } from 'path'; +import fs from 'fs'; + +// Load environment variables +dotenv.config(); + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Validate required environment variables +const requiredEnvVars = [ + 'PRIVATE_KEY', + 'RPC_URL', + 'GRPC_ENDPOINT', + 'GRPCTOKEN' +]; + +for (const envVar of requiredEnvVars) { + if (!process.env[envVar]) { + throw new Error(`Missing required environment variable: ${envVar}`); + } +} + +// Configuration object +export const config = { + // Essential Configuration + wallet: { + privateKey: process.env.PRIVATE_KEY, + rpcUrl: process.env.RPC_URL, + grpcEndpoint: process.env.GRPC_ENDPOINT, + grpcToken: process.env.GRPCTOKEN, + }, + + // Trading Parameters + trading: { + sniperAmount: parseFloat(process.env.SNIPERAMOUNT || '0.1'), + profitTarget: parseFloat(process.env.PROFIT_TARGET || '2.0'), + stopLoss: parseFloat(process.env.STOP_LOSS || '0.5'), + maxHoldTime: parseInt(process.env.MAX_HOLD_TIME || '300000'), + minLiquidity: parseFloat(process.env.MIN_LIQUIDITY || '10'), + maxPositions: parseInt(process.env.MAX_POSITIONS || '5'), + minTxAge: parseInt(process.env.MIN_TX_AGE || '1'), + }, + + // Pool Filters + pools: { + pumpFun: process.env.ENABLE_PUMPFUN === 'true', + pumpSwap: process.env.ENABLE_PUMPSWAP === 'true', + raydiumLaunchLab: process.env.ENABLE_RAYDIUM_LAUNCHLAB === 'true', + raydiumCpmm: process.env.ENABLE_RAYDIUM_CPMM === 'true', + }, + + // Swap Configuration + swap: { + method: process.env.SWAP_METHOD || 'solana', + slippageTolerance: parseFloat(process.env.SLIPPAGE_TOLERANCE || '1.0'), + priorityFee: parseInt(process.env.PRIORITY_FEE || '1000'), + }, + + // Risk Management + risk: { + maxDailyLoss: parseFloat(process.env.MAX_DAILY_LOSS || '1.0'), + maxSingleLoss: parseFloat(process.env.MAX_SINGLE_LOSS || '0.5'), + tradeCooldown: parseInt(process.env.TRADE_COOLDOWN || '5000'), + }, + + // Notifications + notifications: { + telegram: { + botToken: process.env.TELEGRAM_BOT_TOKEN, + chatId: process.env.TELEGRAM_CHAT_ID, + }, + email: { + host: process.env.SMTP_HOST, + port: parseInt(process.env.SMTP_PORT || '587'), + user: process.env.SMTP_USER, + pass: process.env.SMTP_PASS, + }, + discord: { + webhookUrl: process.env.DISCORD_WEBHOOK_URL, + }, + }, + + // Logging & Monitoring + logging: { + level: process.env.LOG_LEVEL || 'info', + debug: process.env.DEBUG === 'true', + logToFile: process.env.LOG_TO_FILE === 'true', + logFilePath: process.env.LOG_FILE_PATH || './logs/trading-bot.log', + }, + + // API Keys + api: { + helius: process.env.HELIUS_API_KEY, + jupiter: process.env.JUPITER_API_KEY, + }, + + // Advanced Settings + advanced: { + mevProtection: process.env.ENABLE_MEV_PROTECTION === 'true', + backtestMode: process.env.BACKTEST_MODE === 'true', + paperTrading: process.env.PAPER_TRADING === 'true', + databaseUrl: process.env.DATABASE_URL || 'sqlite://./trades.db', + }, + + // Performance + performance: { + maxRetries: parseInt(process.env.MAX_RETRIES || '3'), + retryDelay: parseInt(process.env.RETRY_DELAY || '1000'), + connectionTimeout: parseInt(process.env.CONNECTION_TIMEOUT || '30000'), + }, + + // Security + security: { + rateLimiting: process.env.ENABLE_RATE_LIMITING === 'true', + maxRequestsPerMinute: parseInt(process.env.MAX_REQUESTS_PER_MINUTE || '100'), + ipWhitelist: process.env.ENABLE_IP_WHITELIST === 'false', + allowedIps: process.env.ALLOWED_IPS ? process.env.ALLOWED_IPS.split(',') : ['127.0.0.1', '::1'], + }, +}; + +// Create logs directory if it doesn't exist +const logsDir = dirname(config.logging.logFilePath); +if (!fs.existsSync(logsDir)) { + fs.mkdirSync(logsDir, { recursive: true }); +} + +// Validation functions +export const validateConfig = () => { + const errors = []; + + if (config.trading.sniperAmount <= 0) { + errors.push('SNIPERAMOUNT must be greater than 0'); + } + + if (config.trading.profitTarget <= 1.0) { + errors.push('PROFIT_TARGET must be greater than 1.0'); + } + + if (config.trading.stopLoss >= 1.0) { + errors.push('STOP_LOSS must be less than 1.0'); + } + + if (config.trading.maxHoldTime <= 0) { + errors.push('MAX_HOLD_TIME must be greater than 0'); + } + + if (config.trading.minLiquidity <= 0) { + errors.push('MIN_LIQUIDITY must be greater than 0'); + } + + if (errors.length > 0) { + throw new Error(`Configuration validation failed:\n${errors.join('\n')}`); + } + + return true; +}; + +// Get configuration for specific module +export const getModuleConfig = (moduleName) => { + switch (moduleName) { + case 'trading': + return config.trading; + case 'swap': + return config.swap; + case 'risk': + return config.risk; + case 'notifications': + return config.notifications; + case 'logging': + return config.logging; + default: + return config; + } +}; + +// Export default configuration +export default config; diff --git a/2_copy trading bot(node) using gRPC/dashboard/public/dashboard.js b/2_copy trading bot(node) using gRPC/dashboard/public/dashboard.js new file mode 100644 index 0000000..cc2595c --- /dev/null +++ b/2_copy trading bot(node) using gRPC/dashboard/public/dashboard.js @@ -0,0 +1,427 @@ +// Dashboard JavaScript +class TradingBotDashboard { + constructor() { + this.charts = {}; + this.refreshInterval = null; + this.init(); + } + + init() { + this.setupEventListeners(); + this.initializeCharts(); + this.startAutoRefresh(); + this.loadInitialData(); + } + + setupEventListeners() { + // Refresh button + document.getElementById('refreshBtn').addEventListener('click', () => { + this.refreshAllData(); + }); + + // Emergency close button + document.getElementById('emergencyCloseBtn').addEventListener('click', () => { + this.showEmergencyModal(); + }); + + // Emergency modal + document.getElementById('confirmEmergencyClose').addEventListener('click', () => { + this.emergencyCloseAll(); + }); + + document.getElementById('cancelEmergencyClose').addEventListener('click', () => { + this.hideEmergencyModal(); + }); + + // Close modal on outside click + document.getElementById('emergencyModal').addEventListener('click', (e) => { + if (e.target.id === 'emergencyModal') { + this.hideEmergencyModal(); + } + }); + } + + initializeCharts() { + // PnL Chart + const pnlCtx = document.getElementById('pnlChart').getContext('2d'); + this.charts.pnl = new Chart(pnlCtx, { + type: 'line', + data: { + labels: [], + datasets: [{ + label: 'Daily PnL (SOL)', + data: [], + borderColor: '#10b981', + backgroundColor: 'rgba(16, 185, 129, 0.1)', + tension: 0.4, + fill: true + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + labels: { color: '#ffffff' } + } + }, + scales: { + x: { + ticks: { color: '#9ca3af' }, + grid: { color: 'rgba(156, 163, 175, 0.2)' } + }, + y: { + ticks: { color: '#9ca3af' }, + grid: { color: 'rgba(156, 163, 175, 0.2)' } + } + } + } + }); + + // Positions Chart + const positionsCtx = document.getElementById('positionsChart').getContext('2d'); + this.charts.positions = new Chart(positionsCtx, { + type: 'doughnut', + data: { + labels: ['Active', 'Closed'], + datasets: [{ + data: [0, 0], + backgroundColor: ['#3b82f6', '#6b7280'], + borderWidth: 0 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + labels: { color: '#ffffff' } + } + } + } + }); + } + + async loadInitialData() { + try { + await Promise.all([ + this.loadStatus(), + this.loadRiskMetrics(), + this.loadPositions(), + this.loadHistory(), + this.loadConfiguration() + ]); + } catch (error) { + console.error('Error loading initial data:', error); + this.showError('Failed to load dashboard data'); + } + } + + async refreshAllData() { + const refreshBtn = document.getElementById('refreshBtn'); + refreshBtn.classList.add('animate-spin'); + + try { + await this.loadInitialData(); + this.showSuccess('Dashboard refreshed successfully'); + } catch (error) { + console.error('Error refreshing data:', error); + this.showError('Failed to refresh dashboard'); + } finally { + refreshBtn.classList.remove('animate-spin'); + } + } + + startAutoRefresh() { + // Refresh data every 30 seconds + this.refreshInterval = setInterval(() => { + this.loadStatus(); + this.loadRiskMetrics(); + this.loadPositions(); + }, 30000); + } + + async loadStatus() { + try { + const response = await fetch('/api/status'); + const data = await response.json(); + + // Update bot status + const statusElement = document.getElementById('botStatus'); + statusElement.innerHTML = ` + ${data.bot.status} + `; + statusElement.className = `font-bold status-${data.bot.status}`; + + } catch (error) { + console.error('Error loading status:', error); + } + } + + async loadRiskMetrics() { + try { + const response = await fetch('/api/risk'); + const data = await response.json(); + + // Update quick stats + document.getElementById('activePositions').textContent = data.positionSummary.activePositions; + document.getElementById('dailyPnL').textContent = `${data.dailyStats.netPnL.toFixed(4)} SOL`; + document.getElementById('winRate').textContent = `${data.dailyStats.winRate}%`; + document.getElementById('riskLevel').textContent = data.riskLevel; + + // Update PnL chart + this.updatePnLChart(data.dailyStats); + + // Update positions chart + this.updatePositionsChart(data.positionSummary); + + } catch (error) { + console.error('Error loading risk metrics:', error); + } + } + + async loadPositions() { + try { + const response = await fetch('/api/positions'); + const data = await response.json(); + + this.updatePositionsTable(data.positions); + + } catch (error) { + console.error('Error loading positions:', error); + } + } + + async loadHistory() { + try { + const response = await fetch('/api/history'); + const data = await response.json(); + + this.updateHistoryTable(data.history); + + } catch (error) { + console.error('Error loading history:', error); + } + } + + async loadConfiguration() { + try { + const response = await fetch('/api/config'); + const data = await response.json(); + + this.updateConfigurationGrid(data); + + } catch (error) { + console.error('Error loading configuration:', error); + } + } + + updatePnLChart(dailyStats) { + const chart = this.charts.pnl; + + // Add current data point + const now = new Date(); + const timeLabel = now.toLocaleTimeString(); + + chart.data.labels.push(timeLabel); + chart.data.datasets[0].data.push(dailyStats.netPnL); + + // Keep only last 20 data points + if (chart.data.labels.length > 20) { + chart.data.labels.shift(); + chart.data.datasets[0].data.shift(); + } + + chart.update(); + } + + updatePositionsChart(positionSummary) { + const chart = this.charts.positions; + chart.data.datasets[0].data = [ + positionSummary.activePositions, + positionSummary.totalPositions || 0 + ]; + chart.update(); + } + + updatePositionsTable(positions) { + const tbody = document.getElementById('positionsTableBody'); + + if (positions.length === 0) { + tbody.innerHTML = ` + + No active positions + + `; + return; + } + + tbody.innerHTML = positions.map(position => ` + + +

+ ${position.mint.substring(0, 8)}... + +
+ + ${position.entryPrice.toFixed(6)} + ${(position.currentPrice || position.entryPrice).toFixed(6)} + + ${(position.pnl || 0).toFixed(4)} SOL + + ${this.formatDuration(position.holdTime)} + + + + + `).join(''); + } + + updateHistoryTable(history) { + const tbody = document.getElementById('historyTableBody'); + + if (history.length === 0) { + tbody.innerHTML = ` + + No trading history + + `; + return; + } + + tbody.innerHTML = history.slice(-10).reverse().map(trade => ` + + ${new Date(trade.timestamp).toLocaleString()} + + + ${trade.type.toUpperCase()} + + + + ${trade.tokenMint.substring(0, 8)}... + + ${trade.amount.toFixed(4)} + ${trade.price.toFixed(6)} + + ${trade.pnl ? trade.pnl.toFixed(4) : '-'} + + + `).join(''); + } + + updateConfigurationGrid(config) { + const grid = document.getElementById('configGrid'); + + const configItems = [ + { label: 'Sniper Amount', value: `${config.trading.sniperAmount} SOL` }, + { label: 'Profit Target', value: `${config.trading.profitTarget}x` }, + { label: 'Stop Loss', value: `${config.trading.stopLoss}x` }, + { label: 'Max Hold Time', value: `${config.trading.maxHoldTime / 1000}s` }, + { label: 'Max Positions', value: config.trading.maxPositions }, + { label: 'Max Daily Loss', value: `${config.risk.maxDailyLoss} SOL` }, + { label: 'Swap Method', value: config.swap.method }, + { label: 'Slippage', value: `${config.swap.slippageTolerance}%` }, + { label: 'Priority Fee', value: `${config.swap.priorityFee} lamports` } + ]; + + grid.innerHTML = configItems.map(item => ` +
+
${item.label}
+
${item.value}
+
+ `).join(''); + } + + showEmergencyModal() { + document.getElementById('emergencyModal').classList.remove('hidden'); + document.getElementById('emergencyModal').classList.add('flex'); + } + + hideEmergencyModal() { + document.getElementById('emergencyModal').classList.add('hidden'); + document.getElementById('emergencyModal').classList.remove('flex'); + } + + async emergencyCloseAll() { + try { + this.hideEmergencyModal(); + + const response = await fetch('/api/emergency/close-all', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ reason: 'dashboard_emergency' }) + }); + + const result = await response.json(); + + if (result.success) { + this.showSuccess('Emergency closure initiated'); + this.refreshAllData(); + } else { + this.showError('Failed to initiate emergency closure'); + } + + } catch (error) { + console.error('Error during emergency closure:', error); + this.showError('Error during emergency closure'); + } + } + + formatDuration(ms) { + const seconds = Math.floor(ms / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + + if (hours > 0) { + return `${hours}h ${minutes % 60}m`; + } else if (minutes > 0) { + return `${minutes}m ${seconds % 60}s`; + } else { + return `${seconds}s`; + } + } + + showSuccess(message) { + this.showNotification(message, 'success'); + } + + showError(message) { + this.showNotification(message, 'error'); + } + + showNotification(message, type) { + const notification = document.createElement('div'); + notification.className = `fixed top-4 right-4 p-4 rounded-lg shadow-lg z-50 ${ + type === 'success' ? 'bg-green-600' : 'bg-red-600' + }`; + notification.textContent = message; + + document.body.appendChild(notification); + + setTimeout(() => { + notification.remove(); + }, 3000); + } +} + +// Global functions for table actions +window.copyToClipboard = function(text) { + navigator.clipboard.writeText(text).then(() => { + // Could show a toast notification here + }); +}; + +window.closePosition = function(mint) { + // Implement individual position closure + console.log('Closing position for:', mint); +}; + +// Initialize dashboard when page loads +document.addEventListener('DOMContentLoaded', () => { + window.dashboard = new TradingBotDashboard(); +}); diff --git a/2_copy trading bot(node) using gRPC/dashboard/public/index.html b/2_copy trading bot(node) using gRPC/dashboard/public/index.html new file mode 100644 index 0000000..59871d5 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/dashboard/public/index.html @@ -0,0 +1,192 @@ + + + + + + Solana Trading Bot Dashboard + + + + + + + +
+
+
+ +
+

Solana Trading Bot

+

Advanced MEV Protection & Risk Management

+
+
+
+
+
Status
+
+ Running +
+
+ +
+
+
+ + +
+ +
+
+
+
+

Active Positions

+

-

+
+ +
+
+ +
+
+
+

Daily PnL

+

-

+
+ +
+
+ +
+
+
+

Win Rate

+

-

+
+ +
+
+ +
+
+
+

Risk Level

+

-

+
+ +
+
+
+ + +
+ +
+

Daily PnL Trend

+ +
+ + +
+

Active Positions

+ +
+
+ + +
+
+

Active Positions

+ +
+
+ + + + + + + + + + + + + + + + +
TokenEntry PriceCurrent PricePnLHold TimeActions
Loading positions...
+
+
+ + +
+

Recent Trades

+
+ + + + + + + + + + + + + + + + +
TimeTypeTokenAmountPricePnL
Loading history...
+
+
+ + +
+

Bot Configuration

+
+ +
+
+
+ + + + + + + diff --git a/2_copy trading bot(node) using gRPC/dashboard/server.js b/2_copy trading bot(node) using gRPC/dashboard/server.js new file mode 100644 index 0000000..597b26e --- /dev/null +++ b/2_copy trading bot(node) using gRPC/dashboard/server.js @@ -0,0 +1,237 @@ +import express from 'express'; +import cors from 'cors'; +import helmet from 'helmet'; +import compression from 'compression'; +import { RateLimiterMemory } from 'rate-limiter-flexible'; +import { config } from '../config.js'; +import logger from '../utils/logger.js'; +import riskManager from '../services/riskManager.js'; +import notificationService from '../services/notifications.js'; + +const app = express(); +const PORT = process.env.DASHBOARD_PORT || 3000; + +// Rate limiting +const rateLimiter = new RateLimiterMemory({ + keyGenerator: (req) => req.ip, + points: config.security.maxRequestsPerMinute, + duration: 60, +}); + +// Middleware +app.use(helmet()); +app.use(cors()); +app.use(compression()); +app.use(express.json()); +app.use(express.static('dashboard/public')); + +// Rate limiting middleware +app.use(async (req, res, next) => { + try { + await rateLimiter.consume(req.ip); + next(); + } catch (rejRes) { + res.status(429).json({ + error: 'Too many requests', + retryAfter: Math.round(rejRes.msBeforeNext / 1000), + }); + } +}); + +// Health check endpoint +app.get('/api/health', (req, res) => { + res.json({ + status: 'healthy', + timestamp: new Date().toISOString(), + uptime: process.uptime(), + }); +}); + +// Get bot status and configuration +app.get('/api/status', (req, res) => { + try { + const status = { + bot: { + status: 'running', + uptime: process.uptime(), + version: '2.0.0', + timestamp: new Date().toISOString(), + }, + config: { + trading: config.trading, + risk: config.risk, + pools: config.pools, + }, + }; + + res.json(status); + } catch (error) { + logger.error('Error getting bot status', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Get risk metrics +app.get('/api/risk', (req, res) => { + try { + const riskMetrics = riskManager.getRiskMetrics(); + res.json(riskMetrics); + } catch (error) { + logger.error('Error getting risk metrics', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Get active positions +app.get('/api/positions', (req, res) => { + try { + const positions = riskManager.getActivePositions(); + const summary = riskManager.getPositionSummary(); + + res.json({ + positions, + summary, + timestamp: new Date().toISOString(), + }); + } catch (error) { + logger.error('Error getting positions', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Get trading history +app.get('/api/history', (req, res) => { + try { + const history = riskManager.tradeHistory || []; + const dailyStats = riskManager.getDailyStats(); + + res.json({ + history, + dailyStats, + timestamp: new Date().toISOString(), + }); + } catch (error) { + logger.error('Error getting trading history', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Get daily statistics +app.get('/api/stats', (req, res) => { + try { + const dailyStats = riskManager.getDailyStats(); + res.json(dailyStats); + } catch (error) { + logger.error('Error getting daily stats', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Emergency actions +app.post('/api/emergency/close-all', async (req, res) => { + try { + const { reason } = req.body; + const results = await riskManager.emergencyCloseAll(reason || 'dashboard_request'); + + res.json({ + success: true, + message: 'Emergency closure initiated', + results, + timestamp: new Date().toISOString(), + }); + } catch (error) { + logger.error('Error initiating emergency closure', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Send test notification +app.post('/api/notifications/test', async (req, res) => { + try { + const { message, type } = req.body; + await notificationService.sendNotification( + message || 'Test notification from dashboard', + type || 'info', + { source: 'dashboard' } + ); + + res.json({ + success: true, + message: 'Test notification sent', + timestamp: new Date().toISOString(), + }); + } catch (error) { + logger.error('Error sending test notification', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// Update configuration (read-only for now, could be extended) +app.get('/api/config', (req, res) => { + try { + // Return safe configuration (no sensitive data) + const safeConfig = { + trading: config.trading, + risk: config.risk, + pools: config.pools, + swap: config.swap, + logging: config.logging, + }; + + res.json(safeConfig); + } catch (error) { + logger.error('Error getting configuration', error); + res.status(500).json({ error: 'Internal server error' }); + } +}); + +// WebSocket endpoint for real-time updates (placeholder) +app.get('/api/ws', (req, res) => { + res.json({ + message: 'WebSocket endpoint - implement with Socket.IO for real-time updates', + timestamp: new Date().toISOString(), + }); +}); + +// Error handling middleware +app.use((error, req, res, next) => { + logger.error('Dashboard error', error); + res.status(500).json({ + error: 'Internal server error', + message: error.message, + timestamp: new Date().toISOString(), + }); +}); + +// 404 handler +app.use('*', (req, res) => { + res.status(404).json({ + error: 'Endpoint not found', + timestamp: new Date().toISOString(), + }); +}); + +// Start server +const server = app.listen(PORT, () => { + logger.info(`Dashboard server started on port ${PORT}`); + logger.info(`Dashboard available at: http://localhost:${PORT}`); +}); + +// Graceful shutdown +process.on('SIGTERM', () => { + logger.info('SIGTERM received, shutting down dashboard server'); + server.close(() => { + logger.info('Dashboard server closed'); + process.exit(0); + }); +}); + +process.on('SIGINT', () => { + logger.info('SIGINT received, shutting down dashboard server'); + server.close(() => { + logger.info('Dashboard server closed'); + process.exit(0); + }); +}); + +export default app; diff --git a/2_copy trading bot(node) using gRPC/env.template b/2_copy trading bot(node) using gRPC/env.template new file mode 100644 index 0000000..fb4fd88 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/env.template @@ -0,0 +1,157 @@ +# ============================================================================= +# SOLANA TRADING BOT CONFIGURATION +# ============================================================================= + +# ============================================================================= +# ESSENTIAL CONFIGURATION +# ============================================================================= +# Your wallet private key (base58 encoded) +PRIVATE_KEY=your_wallet_private_key_here + +# Solana RPC endpoint (Helius, QuickNode, Alchemy, etc.) +RPC_URL=https://your-rpc-endpoint.com + +# Triton One gRPC endpoint for transaction streaming +GRPC_ENDPOINT=https://your-grpc-endpoint.com + +# Triton One authentication token +GRPCTOKEN=your_grpc_token_here + +# ============================================================================= +# TRADING PARAMETERS +# ============================================================================= +# Amount of SOL to use for each snipe +SNIPERAMOUNT=0.1 + +# Profit target multiplier (e.g., 2.0 = 2x profit) +PROFIT_TARGET=2.0 + +# Stop loss multiplier (e.g., 0.5 = 50% loss) +STOP_LOSS=0.5 + +# Maximum time to hold position in milliseconds (5 minutes = 300000) +MAX_HOLD_TIME=300000 + +# Minimum liquidity required in SOL +MIN_LIQUIDITY=10 + +# Maximum concurrent positions +MAX_POSITIONS=5 + +# Minimum transaction age in seconds +MIN_TX_AGE=1 + +# ============================================================================= +# POOL FILTERS +# ============================================================================= +# Enable/disable specific pool types +ENABLE_PUMPFUN=true +ENABLE_PUMPSWAP=true +ENABLE_RAYDIUM_LAUNCHLAB=true +ENABLE_RAYDIUM_CPMM=true + +# ============================================================================= +# SWAP CONFIGURATION +# ============================================================================= +# Swap method: solana, race, nozomi, 0slot +SWAP_METHOD=solana + +# Slippage tolerance percentage +SLIPPAGE_TOLERANCE=1.0 + +# Priority fee in lamports +PRIORITY_FEE=1000 + +# ============================================================================= +# RISK MANAGEMENT +# ============================================================================= +# Maximum daily loss in SOL +MAX_DAILY_LOSS=1.0 + +# Maximum single trade loss in SOL +MAX_SINGLE_LOSS=0.5 + +# Cooldown period between trades in milliseconds +TRADE_COOLDOWN=5000 + +# ============================================================================= +# NOTIFICATIONS +# ============================================================================= +# Telegram bot configuration +TELEGRAM_BOT_TOKEN=your_bot_token_here +TELEGRAM_CHAT_ID=your_chat_id_here + +# Email notifications +SMTP_HOST=smtp.gmail.com +SMTP_PORT=587 +SMTP_USER=your_email@gmail.com +SMTP_PASS=your_app_password_here + +# Discord webhook +DISCORD_WEBHOOK_URL=your_webhook_url_here + +# ============================================================================= +# LOGGING & MONITORING +# ============================================================================= +# Log level: debug, info, warn, error +LOG_LEVEL=info + +# Enable debug mode +DEBUG=false + +# Log to file +LOG_TO_FILE=true + +# Log file path +LOG_FILE_PATH=./logs/trading-bot.log + +# ============================================================================= +# API KEYS (Optional) +# ============================================================================= +# Helius API key for enhanced RPC +HELIUS_API_KEY=your_helius_key_here + +# Jupiter API key for better swap rates +JUPITER_API_KEY=your_jupiter_key_here + +# ============================================================================= +# ADVANCED SETTINGS +# ============================================================================= +# Enable MEV protection +ENABLE_MEV_PROTECTION=true + +# Enable backtesting mode +BACKTEST_MODE=false + +# Enable paper trading +PAPER_TRADING=false + +# Database connection (for position tracking) +DATABASE_URL=sqlite://./trades.db + +# ============================================================================= +# PERFORMANCE OPTIMIZATION +# ============================================================================= +# Transaction retry attempts +MAX_RETRIES=3 + +# Retry delay in milliseconds +RETRY_DELAY=1000 + +# Connection timeout in milliseconds +CONNECTION_TIMEOUT=30000 + +# ============================================================================= +# SECURITY +# ============================================================================= +# Enable rate limiting +ENABLE_RATE_LIMITING=true + +# Maximum requests per minute +MAX_REQUESTS_PER_MINUTE=100 + +# Enable IP whitelist +ENABLE_IP_WHITELIST=false + +# Allowed IP addresses (comma-separated) +ALLOWED_IPS=127.0.0.1,::1 diff --git a/2_copy trading bot(node) using gRPC/fuc.js b/2_copy trading bot(node) using gRPC/fuc.js new file mode 100644 index 0000000..1f9abac --- /dev/null +++ b/2_copy trading bot(node) using gRPC/fuc.js @@ -0,0 +1,182 @@ +import { Connection, PublicKey, LAMPORTS_PER_SOL, Keypair } from "@solana/web3.js"; +import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token"; +import chalk from "chalk"; +import dotenv from "dotenv"; +import bs58 from "bs58"; +dotenv.config(); +import { swap } from "./swap.js"; +// import { buy_pumpfun, buy_pumpswap, sell_pumpfun, sell_pumpswap } from "./swapsdk_0slot.js"; +// import { buy_raydium_CPMM, buy_raydium_launchpad, sell_raydium_CPMM, sell_raydium_launchpad } from "./swapRaydium.js"; + +const RPC_URL = process.env.RPC_URL; +const connection = new Connection(RPC_URL, "confirmed"); + +//============functions============// +export const token_buy = async (mint, sol_amount, pool_status, context) => { + + if (!mint) { + throw new Error("mint is required and was not provided."); + } + const currentUTC = new Date(); + const txid = await swap("BUY", mint, sol_amount * LAMPORTS_PER_SOL); + // let txid = ""; + console.log(chalk.green(`🟢BUY tokenAmount:::${sol_amount} pool_status: ${pool_status} `)); + + //============off chain sign ultra fast============// + // if (pool_status == "pumpfun") { + // txid = await buy_pumpfun(mint, sol_amount * LAMPORTS_PER_SOL, context);//off chain sign ultra fast + // } else if (pool_status == "pumpswap") { + + // txid = await buy_pumpswap(mint, sol_amount * LAMPORTS_PER_SOL, context.pool); + // } else if (pool_status == "raydium_launchlab") { + // txid = await buy_raydium_launchpad(mint, sol_amount * LAMPORTS_PER_SOL, context); + // } else { + // txid = await buy_raydium_CPMM(mint, sol_amount * LAMPORTS_PER_SOL); + // } + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ Total BUY time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + return txid; +}; + +export const token_sell = async (mint, tokenAmount, pool_status, isFull, context) => { + try { + + if (!mint) { + throw new Error("mint is required and was not provided."); + } + console.log(chalk.red(`🔴SELL tokenAmount:::${tokenAmount} pool_status: ${pool_status} `)); + + const currentUTC = new Date(); + + //============off chain sign ultra fast============// + // let txid = ""; + // if (pool_status == "pumpfun") { + // txid = await sell_pumpfun(mint, tokenAmount, isFull, context); + // } else if (pool_status == "pumpswap") { + // txid = await sell_pumpswap(mint, tokenAmount, context.pool, isFull); + // } else if (pool_status == "raydium_launchlab") { + // txid = await sell_raydium_launchpad(mint, tokenAmount, isFull); + // } else { + // txid = await sell_raydium_CPMM(mint, tokenAmount, isFull); + // } + const txid = await swap("SELL", mint, tokenAmount); + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ Total SELL time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + + if (txid === "stop") { + console.log(chalk.red(`[${new Date().toISOString()}] 🛑 Swap returned "stop" - no balance for ${mint}`)); + return "stop"; + } + + if (txid) { + console.log(chalk.green(`Successfully sold ${tokenAmount} tokens : https://solscan.io/tx/${txid}`)); + return txid; + } + + return null; + } catch (error) { + console.error("Error in token_sell:", error.message); + if (error.response?.data) { + console.error("API Error details:", error.response.data); + } + return null; + } +}; + + +export const getSplTokenBalance = async (mint) => { + if (!mint) { + console.log("🔄 Token balance error: Mint address is undefined or null."); + throw new Error("Mint address is undefined or null."); + } + + let mintPubkey; + try { + mintPubkey = new PublicKey(mint); + } catch (err) { + console.log("🔄 Token balance error: Invalid mint address provided."); + throw err; + } + + // const publicKey = getPublicKeyFromPrivateKey(); + const publicKey = getPublicKeyFromPrivateKey(); + const ata = await getAssociatedTokenAddress(mintPubkey, new PublicKey(publicKey)); + + let account; + try { + account = await getAccount(connection, ata); + } catch (err) { + // Handle TokenAccountNotFoundError gracefully + if ( + err.name === "TokenAccountNotFoundError" || + (err.message && ( + err.message.includes("Failed to find account") || + err.message.includes("Account does not exist") || + err.message.includes("could not find account") + )) + ) { + // No account found, treat as zero balance + console.log("🔄 Token balance: Account not found, returning 0."); + return null; + } + // If the error is related to an invalid mint, log and throw error + if (err.message && err.message.includes("Invalid param")) { + console.log("🔄 Token balance error: Invalid mint param."); + throw err; + } + // Other errors + console.log("🔄 Token balance error:", err.message || err); + throw err; + } + + return Number(account.amount); // Convert BigInt to Number +}; +export const checkWalletBalance = async () => { + try { + const pubkey = getPublicKeyFromPrivateKey(); + const balanceLamports = await connection.getBalance(pubkey); + const balance = balanceLamports / LAMPORTS_PER_SOL; + return { balance }; + } catch (err) { + console.error("Error checking wallet balance:", err.message || err); + throw err; + } +}; + +export const getKeypairFromPrivateKey = (privateKeyString) => { + try { + // Try base58 first + try { + const decoded = bs58.decode(privateKeyString); + return Keypair.fromSecretKey(decoded); + } catch (e) { + // Not base58, try base64 + try { + const decoded = Buffer.from(privateKeyString, 'base64'); + return Keypair.fromSecretKey(decoded); + } catch (e2) { + // Not base64, try JSON array + try { + const arr = JSON.parse(privateKeyString); + const uint8arr = new Uint8Array(arr); + return Keypair.fromSecretKey(uint8arr); + } catch (e3) { + throw new Error('Invalid private key format. Supported formats: base58, base64, or JSON array'); + } + } + } + } catch (err) { + throw new Error('Failed to decode private key: ' + err.message); + } +}; +export const getPublicKeyFromPrivateKey = () => { + const privateKey = process.env.PRIVATE_KEY; + if (!privateKey) { + throw new Error("Private key is required and was not provided."); + } + const keypair = getKeypairFromPrivateKey(privateKey); + return keypair.publicKey.toString(); +}; + diff --git a/2_copy trading bot(node) using gRPC/grpc.js b/2_copy trading bot(node) using gRPC/grpc.js new file mode 100644 index 0000000..714618b --- /dev/null +++ b/2_copy trading bot(node) using gRPC/grpc.js @@ -0,0 +1,204 @@ +import "dotenv/config"; +import Client from "@triton-one/yellowstone-grpc"; +import { CommitmentLevel } from "@triton-one/yellowstone-grpc"; +import { decodeInstruction } from '@solana/spl-token'; +import { Connection, Keypair } from '@solana/web3.js'; +import chalk from "chalk"; +import { tOutPut } from "./parsingtransaction.js"; +import { handleNewTokenLaunch } from "./main.js"; +import dotenv from 'dotenv' +dotenv.config(); +const GRPCTOKEN=process.env.GRPCTOKEN +const GRPC_ENDPOINT = process.env.GRPC_ENDPOINT + +// Pre-define constants +const SOLANA_TOKEN = "So11111111111111111111111111111111111111112"; +const RAYDIUM_FEE = "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"//"7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"; +const Raydium_launchpad_authority = "WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh" +// Create default client +const defaultClient = new Client( + GRPC_ENDPOINT, + GRPCTOKEN +); + +export let isNewLaunchRunning = true; +export const stopNewLaunch = () => { + isNewLaunchRunning = false; + console.log(chalk.red("New launch monitoring stopped")); +}; + +// Default request args +const defaultArgs = { + accounts: {}, + slots: {}, + transactions: { + pumpfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [RAYDIUM_FEE], + accountExclude: [], + accountRequired: [], + }, + }, + transactionsStatus: {}, + entry: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + ping: undefined, + commitment: CommitmentLevel.PROCESSED, +}; + +// This function checks for MintTo instructions by comparing with log messages +async function checkMintTo(data) { + const tx = data.transaction?.transaction; + const meta = data.transaction; + if (!tx || !meta?.transaction?.meta?.logMessages) return; + // Find if MintTo is present in log messages + const mintToLog = meta.transaction.meta.logMessages.find((log) => + typeof log === "string" && log.toLowerCase().includes("instruction: mintto") + ); + + if (mintToLog) { + console.log("🩸🩸🩸🩸🩸 MintTo found in logs!"); + return true + } else { + // No MintTo found in logs + return false + } +} + + +async function handleStream(client = defaultClient, args = defaultArgs) { + const stream = await client.subscribe(args); + + const streamClosed = new Promise((resolve, reject) => { + stream.on("error", (error) => { + console.error("Stream Error:", error); + reject(error); + stream.end(); + }); + stream.on("end", resolve); + stream.on("close", resolve); + }); + + stream.on("data", async (data) => { + // Return early if monitoring is disabled + if (!isNewLaunchRunning) { + stream.end(); + return; + } + + try { + // console.log(chalk.green("start__________new token streaming_________")); + if (!data?.transaction?.transaction) { + return null; + } + const mintTo = await checkMintTo(data) + if(!mintTo){ + return null + } + console.log(`[${new Date().toISOString()}] 🩸🩸🩸🩸🩸 MintTo found in logs!`); + + const preTokenBalances = data?.transaction?.transaction?.meta?.preTokenBalances; + const postTokenBalances = data?.transaction?.transaction?.meta?.postTokenBalances; + + if (!preTokenBalances || !postTokenBalances) { + console.log("Token balances not found in transaction data"); + return null; + } + + let pre_sol = 0; + let post_sol = 0; + let pre_token = 0; + let post_token = 0; + let token_mint = ""; + let token_owner = ""; + + + for (const balance of postTokenBalances) { + if (balance.owner !== Raydium_launchpad_authority) { + if (balance.mint !== SOLANA_TOKEN) { + post_token = balance.uiTokenAmount.uiAmount || 0; + token_mint = balance.mint; + token_owner = balance.owner; + } + } else { + post_sol = balance.uiTokenAmount.uiAmount || 0; + } + } + + for (const balance of preTokenBalances) { + if (balance.owner !== Raydium_launchpad_authority) { + if (balance.mint !== SOLANA_TOKEN) { + pre_token = balance.uiTokenAmount.uiAmount || 0; + } + } + } + + const solChanges = post_sol-pre_sol; + const tokenChanges = post_token-pre_token; + console.log(chalk.bgBlue.bold(`🪙 Token Mint:`), chalk.white(token_mint)); + console.log(chalk.bgMagenta.bold(`👤 Token Owner:`), chalk.white(token_owner)); + console.log(chalk.bgYellow.bold(`💸 SOL Balance Change:`), chalk.yellow(`${solChanges > 0 ? "+" : ""}${solChanges}`)); + console.log(chalk.bgCyan.bold(`🔄 Token Balance Change:`), chalk.cyan(`${tokenChanges > 0 ? "+" : ""}${tokenChanges}`)); + + + if (solChanges> 0.1) { + console.log(chalk.bgGreen("Found large SOL transfer:", solChanges)); + + // Parse transaction data to get pool information + const parsedData = await tOutPut(data); + if (parsedData) { + console.log(chalk.cyan(`Pool status: Raydium launchpad`)); + + // Call the main bot logic to handle the new token launch + await handleNewTokenLaunch(token_mint, parsedData.pool_status, parsedData.context); + } else { + console.log(chalk.yellow("Failed to parse transaction data")); + } + + return token_mint; + } + + return null; + } catch (error) { + console.error("Error processing transaction data:", error); + return null; + } + }); + + try { + await stream.write(args); + } catch (error) { + console.error("Subscription request failed:", error); + throw error; + } + + await streamClosed; +} + +export async function newlunched_subscribeCommand(client = defaultClient, args = defaultArgs) { + // Set monitoring flag to true when starting + isNewLaunchRunning = true; + console.log(chalk.green("New launch monitoring started")); + + while (isNewLaunchRunning) { + try { + await handleStream(client, args); + } catch (error) { + console.error("Stream error, restarting in 1 second...", error); + // Only wait and retry if monitoring is still enabled + if (isNewLaunchRunning) { + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + } + } + console.log("New launch monitoring stopped"); +} + +// Export client and args for external use +export { defaultClient, defaultArgs }; +// Remove the auto-execution to prevent conflicts +// newlunched_subscribeCommand() \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/index.js b/2_copy trading bot(node) using gRPC/index.js new file mode 100644 index 0000000..950ab3f --- /dev/null +++ b/2_copy trading bot(node) using gRPC/index.js @@ -0,0 +1,154 @@ + +import { pump_geyser } from "./main.js"; +import { config, validateConfig } from "./config.js"; +import logger from "./utils/logger.js"; +import notificationService from "./services/notifications.js"; +import riskManager from "./services/riskManager.js"; + +// Start dashboard server if enabled +let dashboardServer = null; +if (process.env.ENABLE_DASHBOARD === 'true') { + try { + const dashboardApp = await import("./dashboard/server.js"); + dashboardServer = dashboardApp.default; + logger.info("Dashboard server started"); + } catch (error) { + logger.warn("Failed to start dashboard server", error); + } +} + +// Validate configuration before starting +try { + validateConfig(); + logger.info("Configuration validated successfully"); +} catch (error) { + logger.error("Configuration validation failed", error); + process.exit(1); +} + +// Check wallet balance +const checkWalletBalance = async () => { + try { + const { getBalance } = await import("./swap.js"); + const balance = await getBalance(); + + if (balance < 1) { + logger.error("Wallet balance is below 1 SOL. Current balance:", balance, "SOL"); + await notificationService.sendNotification( + `❌ Insufficient wallet balance: ${balance} SOL`, + 'error', + { balance, required: 1 } + ); + process.exit(1); + } + + logger.info(`Wallet balance: ${balance} SOL`); + await notificationService.sendNotification( + `✅ Bot startup successful. Wallet balance: ${balance} SOL`, + 'success', + { balance } + ); + + return balance; + } catch (err) { + logger.error("Error checking wallet balance", err); + await notificationService.sendNotification( + `❌ Failed to check wallet balance: ${err.message}`, + 'error', + { error: err.message } + ); + process.exit(1); + } +}; + +// Main startup function +const main = async () => { + try { + logger.info("🚀 Starting Solana Trading Bot..."); + + // Check wallet balance + await checkWalletBalance(); + + // Start the main bot + await pump_geyser(); + + // Send startup notification + await notificationService.notifyBotStatus("Started", { + timestamp: new Date().toISOString(), + config: { + trading: config.trading, + risk: config.risk, + pools: config.pools, + }, + }); + + logger.info("✅ Bot startup completed successfully"); + + } catch (error) { + logger.error("❌ Bot startup failed", error); + await notificationService.notifyError(error, "Bot Startup"); + process.exit(1); + } +}; + +// Handle process signals +process.on('SIGINT', async () => { + logger.info("🛑 SIGINT received, shutting down..."); + await handleShutdown("SIGINT"); +}); + +process.on('SIGTERM', async () => { + logger.info("🛑 SIGTERM received, shutting down..."); + await handleShutdown("SIGTERM"); +}); + +process.on('uncaughtException', async (error) => { + logger.error("Uncaught exception", error); + await notificationService.notifyError(error, "Uncaught Exception"); + await handleShutdown("Uncaught Exception"); +}); + +process.on('unhandledRejection', async (reason, promise) => { + logger.error("Unhandled rejection", { reason, promise }); + await notificationService.notifyError(new Error(reason), "Unhandled Rejection"); +}); + +// Graceful shutdown handler +const handleShutdown = async (reason) => { + try { + logger.info("Initiating graceful shutdown..."); + + // Get final statistics + const finalStats = riskManager.getDailyStats(); + const riskMetrics = riskManager.getRiskMetrics(); + + // Send shutdown notification + await notificationService.notifyBotStatus("Shutdown", { + reason, + finalStats, + riskMetrics, + timestamp: new Date().toISOString(), + }); + + // Close dashboard server if running + if (dashboardServer) { + logger.info("Closing dashboard server..."); + // Note: In a real implementation, you'd want to properly close the Express server + } + + logger.info("Graceful shutdown completed"); + process.exit(0); + + } catch (error) { + logger.error("Error during shutdown", error); + process.exit(1); + } +}; + +// Start the bot +main().catch(async (error) => { + logger.error("Fatal error in main function", error); + await notificationService.notifyError(error, "Main Function"); + process.exit(1); +}); + diff --git a/2_copy trading bot(node) using gRPC/logs/.6dee68a8e2d6fa545f978ea2a4cd18a2469f8eef-audit.json b/2_copy trading bot(node) using gRPC/logs/.6dee68a8e2d6fa545f978ea2a4cd18a2469f8eef-audit.json new file mode 100644 index 0000000..2d59730 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/logs/.6dee68a8e2d6fa545f978ea2a4cd18a2469f8eef-audit.json @@ -0,0 +1,15 @@ +{ + "keep": { + "days": true, + "amount": 14 + }, + "auditLog": "logs\\.6dee68a8e2d6fa545f978ea2a4cd18a2469f8eef-audit.json", + "files": [ + { + "date": 1755198754557, + "name": "logs\\trading-bot-2025-08-14.log", + "hash": "2ce46b1fe2271a1eaab915e581771fb25f76310f7424154bac8bcfe21bdb8a8a" + } + ], + "hashType": "sha256" +} \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/logs/.a961c1e9547c0e8ccd2f7b24907043cafbaced36-audit.json b/2_copy trading bot(node) using gRPC/logs/.a961c1e9547c0e8ccd2f7b24907043cafbaced36-audit.json new file mode 100644 index 0000000..35c64b8 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/logs/.a961c1e9547c0e8ccd2f7b24907043cafbaced36-audit.json @@ -0,0 +1,15 @@ +{ + "keep": { + "days": true, + "amount": 30 + }, + "auditLog": "logs\\.a961c1e9547c0e8ccd2f7b24907043cafbaced36-audit.json", + "files": [ + { + "date": 1755198754559, + "name": "logs\\trading-bot-error-2025-08-14.log", + "hash": "da7d7bef5942bf1d56fce13f254a63f28454652870987c7bfd3303f17eef1ad2" + } + ], + "hashType": "sha256" +} \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/logs/trading-bot-2025-08-14.log b/2_copy trading bot(node) using gRPC/logs/trading-bot-2025-08-14.log new file mode 100644 index 0000000..215a035 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/logs/trading-bot-2025-08-14.log @@ -0,0 +1,20 @@ +{"level":"info","message":"Configuration validated successfully","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:39.094Z"} +{"level":"info","message":"🚀 Starting Solana Trading Bot...","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:39.096Z"} +{"level":"info","message":"Wallet balance: 0.004996182 SOL","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.970Z"} +{"level":"info","message":"🚀 Starting Solana Raydium Sniper Bot...","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.973Z"} +{"level":"info","message":"🔑 Wallet Public Key: DopsYMstRqBm3SSsn1vY6sjhFPjXbtQeTPoXWsoopodF","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.973Z"} +{"level":"info","message":"💰 Sniper Amount: 0.00001 SOL","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.974Z"} +{"level":"info","message":"🎯 Profit Target: 2x","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.974Z"} +{"level":"info","message":"🛑 Stop Loss: 0.5x","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.974Z"} +{"level":"info","message":"⏱️ Max Hold Time: 300s","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.975Z"} +{"level":"info","message":"📊 Max Positions: 5","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:40.975Z"} +{"context":null,"level":"info","message":"New token launch detected: 6BuNjmVX86rP7iYKWi8mWGZujFYGsb91z2NNxxiabonk","poolStatus":"raydium","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:57.819Z"} +{"level":"info","message":"Executing sniper trade for 6BuNjmVX86rP7iYKWi8mWGZujFYGsb91z2NNxxiabonk","service":"solana-trading-bot","timestamp":"2025-08-14T19:12:57.819Z"} +{"level":"error","message":"Failed to execute sniper trade for 6BuNjmVX86rP7iYKWi8mWGZujFYGsb91z2NNxxiabonk","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:02.572Z"} +{"context":{"amountIn":"309346784","amountOut":"1416041927389","platformFee":"3093468","poolState":"H6Cnafust6WPiduKfuuYoaYLLVHJankcuvRYjVdBrW8n","poolStatus":{"normal":{}},"protocolFee":"773367","realBaseAfter":"687438457793402","realBaseBefore":"686022415866013","realQuoteAfter":"53486586492","realQuoteBefore":"53181106543","shareFee":"0","totalBaseSell":"793100000000000","tradeDirection":0,"virtualBase":"1073025605596382","virtualQuote":"30000852951"},"level":"info","message":"New token launch detected: EJhqXKJEncSx1HJjS5ZpKdiKGGgLiRgNPvo8JZvw5Guj","poolStatus":"raydium_launchlab","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:28.663Z"} +{"level":"info","message":"Executing sniper trade for EJhqXKJEncSx1HJjS5ZpKdiKGGgLiRgNPvo8JZvw5Guj","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:28.663Z"} +{"level":"error","message":"Failed to execute sniper trade for EJhqXKJEncSx1HJjS5ZpKdiKGGgLiRgNPvo8JZvw5Guj","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:32.143Z"} +{"context":null,"level":"info","message":"New token launch detected: 3mEqoZn2s6CMtPAuD2jF9CGjEfPCeDAiVLsNj6Xrbonk","poolStatus":"raydium","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:32.214Z"} +{"level":"info","message":"Executing sniper trade for 3mEqoZn2s6CMtPAuD2jF9CGjEfPCeDAiVLsNj6Xrbonk","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:32.214Z"} +{"level":"error","message":"Failed to execute sniper trade for 3mEqoZn2s6CMtPAuD2jF9CGjEfPCeDAiVLsNj6Xrbonk","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:35.375Z"} +{"level":"info","message":"🛑 SIGINT received, shutting down...","service":"solana-trading-bot","timestamp":"2025-08-14T19:14:09.666Z"} diff --git a/2_copy trading bot(node) using gRPC/logs/trading-bot-error-2025-08-14.log b/2_copy trading bot(node) using gRPC/logs/trading-bot-error-2025-08-14.log new file mode 100644 index 0000000..9d3f436 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/logs/trading-bot-error-2025-08-14.log @@ -0,0 +1,3 @@ +{"level":"error","message":"Failed to execute sniper trade for 6BuNjmVX86rP7iYKWi8mWGZujFYGsb91z2NNxxiabonk","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:02.572Z"} +{"level":"error","message":"Failed to execute sniper trade for EJhqXKJEncSx1HJjS5ZpKdiKGGgLiRgNPvo8JZvw5Guj","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:32.143Z"} +{"level":"error","message":"Failed to execute sniper trade for 3mEqoZn2s6CMtPAuD2jF9CGjEfPCeDAiVLsNj6Xrbonk","service":"solana-trading-bot","timestamp":"2025-08-14T19:13:35.375Z"} diff --git a/2_copy trading bot(node) using gRPC/main.js b/2_copy trading bot(node) using gRPC/main.js new file mode 100644 index 0000000..8545207 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/main.js @@ -0,0 +1,325 @@ +import { newlunched_subscribeCommand, stopNewLaunch } from "./grpc.js"; +import { token_buy, token_sell, getSplTokenBalance, getPublicKeyFromPrivateKey } from "./fuc.js"; +import { getBalance } from "./swap.js"; +import { config, validateConfig } from "./config.js"; +import logger from "./utils/logger.js"; +import notificationService from "./services/notifications.js"; +import riskManager from "./services/riskManager.js"; +import chalk from "chalk"; + +// Trading configuration from config service +const tradingConfig = config.trading; + +// Track active positions +const activePositions = new Map(); + +export const pump_geyser = async () => { + try { + // Validate configuration + validateConfig(); + + const walletKey = getPublicKeyFromPrivateKey(); + + // Log startup banner + console.log(chalk.magentaBright(` + ██████╗██████╗ ██╗ ██╗██████╗ ████████╗ ██████╗ ██╗ ██╗██╗███╗ ██╗ ██████╗ + ██╔════╝██╔══██╗██║ ██║██╔══██╗╚══██╔══╝██╔═══██╗██║ ██╔╝██║████╗ ██║██╔════╝ + ██║ ██████╔╝ ██║ ██╔╝██████╔╝ ██║ ██║ ██║█████╔╝ ██║██╔██╗ ██║██║ ██╗ + ██║ ██╔══██╗ ██╔═╝ ██╔═══╝ ██║ ██║ ██║██╔═██╗ ██║██║╚██╗██║██║ ██║ + ╚██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝██║ ██╗██║██║ ╚████║╚██████╔╝ + ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ + `)); + + logger.info("🚀 Starting Solana Raydium Sniper Bot..."); + logger.info(`🔑 Wallet Public Key: ${walletKey}`); + logger.info(`💰 Sniper Amount: ${tradingConfig.sniperAmount} SOL`); + logger.info(`🎯 Profit Target: ${tradingConfig.profitTarget}x`); + logger.info(`🛑 Stop Loss: ${tradingConfig.stopLoss}x`); + logger.info(`⏱️ Max Hold Time: ${tradingConfig.maxHoldTime/1000}s`); + logger.info(`📊 Max Positions: ${tradingConfig.maxPositions}`); + + // Log configuration + logger.debug("Trading configuration loaded", tradingConfig); + logger.debug("Pool filters", config.pools); + logger.debug("Risk management settings", config.risk); + + // Send startup notification + await notificationService.notifyBotStatus("Started", { + wallet: walletKey, + config: tradingConfig, + }); + + // Start monitoring for new token launches + await newlunched_subscribeCommand(); + + // Set up position monitoring + setInterval(monitorPositions, 5000); // Check positions every 5 seconds + + // Set up risk monitoring + setInterval(monitorRisk, 10000); // Check risk metrics every 10 seconds + + // Set up graceful shutdown + process.on('SIGINT', async () => { + logger.warn("🛑 Shutting down sniper bot..."); + stopNewLaunch(); + + // Close all positions before exit + await closeAllPositions(); + + // Send shutdown notification + await notificationService.notifyBotStatus("Shutdown", { + reason: "SIGINT received", + finalStats: riskManager.getDailyStats(), + }); + + process.exit(0); + }); + + // Handle other shutdown signals + process.on('SIGTERM', async () => { + logger.warn("🛑 SIGTERM received, shutting down..."); + await handleGracefulShutdown("SIGTERM"); + }); + + process.on('uncaughtException', async (error) => { + logger.error("Uncaught exception", error); + await notificationService.notifyError(error, "Uncaught Exception"); + await handleGracefulShutdown("Uncaught Exception"); + }); + + process.on('unhandledRejection', async (reason, promise) => { + logger.error("Unhandled rejection", { reason, promise }); + await notificationService.notifyError(new Error(reason), "Unhandled Rejection"); + }); + + } catch (error) { + logger.error("Error in pump_geyser", error); + await notificationService.notifyError(error, "Bot Startup"); + throw error; + } +}; + +// Monitor active positions for profit taking or stop loss +async function monitorPositions() { + try { + const positions = riskManager.getActivePositions(); + + for (const position of positions) { + try { + const currentBalance = await getSplTokenBalance(position.mint); + if (!currentBalance || currentBalance <= 0) { + logger.warn(`⚠️ No balance for ${position.mint}, removing from active positions`); + riskManager.activePositions.delete(position.mint); + continue; + } + + // Update position price (you'll need to implement price fetching) + // const currentPrice = await getCurrentPrice(position.mint); + // riskManager.updatePositionPrice(position.mint, currentPrice); + + // Check if position should be closed + const shouldClose = riskManager.shouldClosePosition(position.mint); + if (shouldClose.shouldClose) { + logger.info(`Position closure triggered for ${position.mint}: ${shouldClose.reason}`); + await closePosition(position.mint, position, shouldClose.reason); + } + } catch (error) { + logger.error(`Error monitoring position ${position.mint}`, error); + } + } + } catch (error) { + logger.error("Error in position monitoring", error); + } +} + +// Monitor risk metrics +async function monitorRisk() { + try { + const riskMetrics = riskManager.getRiskMetrics(); + + // Log risk metrics periodically + if (riskMetrics.riskLevel === 'HIGH') { + logger.warn("High risk level detected", riskMetrics); + await notificationService.sendNotification( + "🚨 High risk level detected - review positions and consider reducing exposure", + "warning", + riskMetrics + ); + } + + // Log daily stats every hour + const now = new Date(); + if (now.getMinutes() === 0) { + logger.info("Hourly risk summary", riskMetrics); + } + + } catch (error) { + logger.error("Error in risk monitoring", error); + } +} + +// Close a specific position +async function closePosition(mint, position, reason = 'manual') { + try { + logger.info(`Closing position for ${mint}`, { reason, position }); + + // Get current token balance + const currentBalance = await getSplTokenBalance(mint); + if (!currentBalance || currentBalance <= 0) { + logger.warn(`No balance to sell for ${mint}`); + riskManager.activePositions.delete(mint); + return; + } + + // Execute sell transaction + const sellResult = await token_sell(mint, currentBalance); + + if (sellResult && sellResult.txHash) { + logger.info(`Position closed successfully for ${mint}`, { + txHash: sellResult.txHash, + reason, + balance: currentBalance, + }); + + // Record the trade + riskManager.recordTrade('sell', mint, currentBalance, position.currentPrice || 0, sellResult.txHash); + + // Send notification + await notificationService.notifyPositionUpdate('closed', mint, { + reason, + txHash: sellResult.txHash, + balance: currentBalance, + }); + } else { + logger.error(`Failed to close position for ${mint}`); + } + } catch (error) { + logger.error(`Error closing position for ${mint}`, error); + await notificationService.notifyError(error, `Position Closure - ${mint}`); + } +} + +// Close all active positions +async function closeAllPositions() { + try { + const positions = riskManager.getActivePositions(); + logger.info(`Closing ${positions.length} active positions...`); + + const results = []; + + for (const position of positions) { + try { + await closePosition(position.mint, position, 'shutdown'); + results.push({ mint: position.mint, status: 'closed' }); + } catch (error) { + logger.error(`Error closing position ${position.mint}`, error); + results.push({ mint: position.mint, status: 'error', error: error.message }); + } + } + + logger.info("Position closure summary", { results }); + return results; + } catch (error) { + logger.error("Error in closeAllPositions", error); + throw error; + } +} + +// Handle graceful shutdown +async function handleGracefulShutdown(reason) { + try { + logger.warn(`Graceful shutdown initiated: ${reason}`); + + // Stop gRPC monitoring + stopNewLaunch(); + + // Close all positions + await closeAllPositions(); + + // Send final notification + await notificationService.notifyBotStatus("Shutdown", { + reason, + finalStats: riskManager.getDailyStats(), + }); + + logger.info("Graceful shutdown completed"); + process.exit(0); + } catch (error) { + logger.error("Error during graceful shutdown", error); + process.exit(1); + } +} + +// Handle new token launch detected by gRPC +async function handleNewTokenLaunch(tokenMint, poolStatus, context) { + try { + logger.info(`New token launch detected: ${tokenMint}`, { + poolStatus, + context, + timestamp: new Date().toISOString(), + }); + + // Check if we can execute a trade + const tradeCheck = riskManager.canExecuteTrade(config.trading.sniperAmount, tokenMint); + if (!tradeCheck.allowed) { + logger.warn(`Trade blocked for ${tokenMint}`, { reasons: tradeCheck.errors }); + return; + } + + // Execute the sniper trade + logger.info(`Executing sniper trade for ${tokenMint}`); + + // Get current SOL balance + const solBalance = await getBalance(); + if (solBalance < config.trading.sniperAmount) { + logger.warn(`Insufficient SOL balance for sniper trade: ${solBalance} SOL`); + return; + } + + // Execute buy transaction + const buyResult = await token_buy(tokenMint, config.trading.sniperAmount); + + if (buyResult && buyResult.txHash) { + logger.info(`Sniper trade executed successfully for ${tokenMint}`, { + txHash: buyResult.txHash, + amount: config.trading.sniperAmount, + poolStatus, + }); + + // Record the trade + riskManager.recordTrade('buy', tokenMint, config.trading.sniperAmount, 0, buyResult.txHash); + + // Send notification + await notificationService.notifyTradeExecution('buy', tokenMint, config.trading.sniperAmount, 0, buyResult.txHash); + + // Add to active positions for monitoring + const position = { + entryPrice: 0, // Will be updated when we get price data + entryAmount: config.trading.sniperAmount, + entryTime: Date.now(), + entryValue: config.trading.sniperAmount, + currentPrice: 0, + poolStatus, + context, + }; + + riskManager.activePositions.set(tokenMint, position); + + logger.info(`Position opened for ${tokenMint}`, position); + + } else { + logger.error(`Failed to execute sniper trade for ${tokenMint}`); + await notificationService.notifyError( + new Error('Buy transaction failed'), + `Sniper Trade - ${tokenMint}` + ); + } + + } catch (error) { + logger.error(`Error handling new token launch for ${tokenMint}`, error); + await notificationService.notifyError(error, `New Token Launch - ${tokenMint}`); + } +} + +// Export functions for external use +export { closePosition, closeAllPositions, monitorPositions, handleNewTokenLaunch }; \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/package-lock.json b/2_copy trading bot(node) using gRPC/package-lock.json new file mode 100644 index 0000000..88f10e8 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/package-lock.json @@ -0,0 +1,10961 @@ +{ + "name": "solana-trading-bot", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "solana-trading-bot", + "version": "1.0.0", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@degenfrends/solana-rugchecker": "^0.0.16", + "@project-serum/anchor": "^0.26.0", + "@pump-fun/pump-sdk": "^1.3.4", + "@pump-fun/pump-swap-sdk": "^0.0.1-beta.36", + "@raydium-io/raydium-sdk": "^1.3.1-beta.0", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "@triton-one/yellowstone-grpc": "^4.0.0", + "axios": "^1.7.9", + "bs58": "^6.0.0", + "chalk": "^5.3.0", + "dotenv": "^16.4.7", + "fs": "^0.0.1-security", + "helius-sdk": "^1.4.2", + "node-fetch": "^3.3.2", + "node-telegram-bot-api": "^0.63.0", + "pump-swap-core-v1": "^2.0.0", + "readline-sync": "^1.4.10", + "require": "^0.4.4", + "tweetnacl": "^1.0.3", + "util": "^0.12.5", + "web3-fb": "^1.2.2", + "websocket": "^1.0.35", + "ws": "^8.18.1" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@coral-xyz/anchor": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", + "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.30.1", + "@coral-xyz/borsh": "^0.30.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@coral-xyz/anchor-errors": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz", + "integrity": "sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@coral-xyz/borsh": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz", + "integrity": "sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@degenfrends/solana-rugchecker": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@degenfrends/solana-rugchecker/-/solana-rugchecker-0.0.16.tgz", + "integrity": "sha512-JsHNulIiIpfhc/J3ZbSmnYJVgJ4l1xYlksYpfwbhQvRua9z1id7U5TeQXoa9Mr3weyt19LmliPs6Q071FYVPBg==", + "license": "MIT", + "dependencies": { + "@metaplex-foundation/js": "^0.20.1", + "@raydium-io/raydium-sdk": "1.3.1-beta.54", + "@solana/web3.js": "^1.92.3", + "axios": "^1.7.2", + "dotenv": "^16.4.5", + "helius-sdk": "^1.3.3", + "validator": "^13.12.0", + "web3": "^4.9.0", + "whois": "^2.14.2", + "whois-json": "^2.0.4" + } + }, + "node_modules/@degenfrends/solana-rugchecker/node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.54", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.54.tgz", + "integrity": "sha512-pDrYDg739eQ0G6LqvPOGP2oSIMiK/NGO0vPE75oQQlU5u/Mdia1C7PSa6BgGhx3P6ofVC5nziVUKF2KozO+9lg==", + "license": "GPL-3.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0" + }, + "peerDependencies": { + "@solana/web3.js": "^1.73.0" + } + }, + "node_modules/@degenfrends/solana-rugchecker/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", + "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.6.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@irys/arweave": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/arweave/-/arweave-0.0.2.tgz", + "integrity": "sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==", + "license": "MIT", + "dependencies": { + "asn1.js": "^5.4.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64-js": "^1.5.1", + "bignumber.js": "^9.1.1" + } + }, + "node_modules/@irys/query": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.1.tgz", + "integrity": "sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==", + "license": "MIT", + "dependencies": { + "async-retry": "^1.3.3", + "axios": "^1.4.0" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "node_modules/@irys/sdk": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.0.2.tgz", + "integrity": "sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==", + "deprecated": "Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", + "@irys/query": "^0.0.1", + "@near-js/crypto": "^0.0.3", + "@near-js/keystores-browser": "^0.0.3", + "@near-js/providers": "^0.0.4", + "@near-js/transactions": "^0.1.0", + "@solana/web3.js": "^1.36.0", + "@supercharge/promise-pool": "^3.0.0", + "algosdk": "^1.13.1", + "aptos": "=1.8.5", + "arbundles": "^0.10.0", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64url": "^3.0.1", + "bignumber.js": "^9.0.1", + "bs58": "5.0.0", + "commander": "^8.2.0", + "csv": "5.5.3", + "inquirer": "^8.2.0", + "js-sha256": "^0.9.0", + "mime-types": "^2.1.34", + "near-seed-phrase": "^0.2.0" + }, + "bin": { + "irys": "build/cjs/node/cli.js", + "irys-esm": "build/esm/node/cli.js" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "node_modules/@irys/sdk/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@irys/sdk/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@metaplex-foundation/beet": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.1.tgz", + "integrity": "sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/beet-solana": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", + "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/cusper": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz", + "integrity": "sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==", + "license": "Apache-2.0" + }, + "node_modules/@metaplex-foundation/js": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/js/-/js-0.20.1.tgz", + "integrity": "sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "dependencies": { + "@irys/sdk": "^0.0.2", + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/mpl-auction-house": "^2.3.0", + "@metaplex-foundation/mpl-bubblegum": "^0.6.2", + "@metaplex-foundation/mpl-candy-guard": "^0.3.0", + "@metaplex-foundation/mpl-candy-machine": "^5.0.0", + "@metaplex-foundation/mpl-candy-machine-core": "^0.1.2", + "@metaplex-foundation/mpl-token-metadata": "^2.11.0", + "@noble/ed25519": "^1.7.1", + "@noble/hashes": "^1.1.3", + "@solana/spl-account-compression": "^0.1.8", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.63.1", + "bignumber.js": "^9.0.2", + "bn.js": "^5.2.1", + "bs58": "^5.0.0", + "buffer": "^6.0.3", + "debug": "^4.3.4", + "eventemitter3": "^4.0.7", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0", + "merkletreejs": "^0.3.11", + "mime": "^3.0.0", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/js/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@metaplex-foundation/js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@metaplex-foundation/js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-auction-house/-/mpl-auction-house-2.5.1.tgz", + "integrity": "sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.6.1", + "@metaplex-foundation/beet-solana": "^0.3.1", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@metaplex-foundation/beet": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.6.1.tgz", + "integrity": "sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz", + "integrity": "sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/beet-solana": "0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/spl-account-compression": "^0.1.4", + "@solana/spl-token": "^0.1.8", + "@solana/web3.js": "^1.50.1", + "bn.js": "^5.2.0", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz", + "integrity": "sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@solana/spl-token": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", + "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.5", + "@solana/web3.js": "^1.21.0", + "bn.js": "^5.1.0", + "buffer": "6.0.3", + "buffer-layout": "^1.2.0", + "dotenv": "10.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-guard": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz", + "integrity": "sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-guard/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-5.1.0.tgz", + "integrity": "sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine-core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine-core/-/mpl-candy-machine-core-0.1.2.tgz", + "integrity": "sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine-core/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", + "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", + "license": "MIT", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@near-js/crypto": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.3.tgz", + "integrity": "sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/crypto/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/keystores": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.3.tgz", + "integrity": "sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/types": "0.0.3" + } + }, + "node_modules/@near-js/keystores-browser": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores-browser/-/keystores-browser-0.0.3.tgz", + "integrity": "sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3" + } + }, + "node_modules/@near-js/providers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/providers/-/providers-0.0.4.tgz", + "integrity": "sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==", + "license": "ISC", + "dependencies": { + "@near-js/transactions": "0.1.0", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "http-errors": "^1.7.2" + }, + "optionalDependencies": { + "node-fetch": "^2.6.1" + } + }, + "node_modules/@near-js/providers/node_modules/@near-js/signers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.3.tgz", + "integrity": "sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/providers/node_modules/@near-js/transactions": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.0.tgz", + "integrity": "sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/signers": "0.0.3", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/providers/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/providers/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@near-js/providers/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT", + "optional": true + }, + "node_modules/@near-js/providers/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/@near-js/providers/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@near-js/signers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.4.tgz", + "integrity": "sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/keystores": "0.0.4", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/keystores": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.4.tgz", + "integrity": "sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/types": "0.0.4" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/signers/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/transactions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.1.tgz", + "integrity": "sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/signers": "0.0.4", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/utils": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.4.tgz", + "integrity": "sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" + } + }, + "node_modules/@near-js/transactions/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/types": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.3.tgz", + "integrity": "sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/types/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/utils": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.3.tgz", + "integrity": "sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" + } + }, + "node_modules/@near-js/utils/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/ed25519": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.5.tgz", + "integrity": "sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@project-serum/anchor": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", + "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/borsh": "^0.26.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@project-serum/anchor/node_modules/@coral-xyz/borsh": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", + "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@project-serum/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@project-serum/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@pump-fun/pump-sdk": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-sdk/-/pump-sdk-1.17.5.tgz", + "integrity": "sha512-RNuYg52mK3xCw3Kwpo+ReeFGA+ph/TDbuB1idgodhIMd9WBcI05I4xcUP/Kw6cbjUMiIv7zLWyzWE5C0rcnhMQ==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@pump-fun/pump-swap-sdk": "^1.6.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "undici-types": "^6.20.0" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", + "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.31.1", + "@coral-xyz/borsh": "^0.31.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.69.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor-errors": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", + "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", + "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.69.0" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@pump-fun/pump-swap-sdk": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-swap-sdk/-/pump-swap-sdk-1.6.1.tgz", + "integrity": "sha512-fVGqqvv3tZaYdsPWBqwu4KOBa5hcv+i5XoB9Bfj4Kp/IIJzsfjBTcu+aq36L7fVYH+5u9n9nMMMjbk1TQ0Tlbw==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@solana/spl-token": "^0.4.9", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "bs58": "^6.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@pump-fun/pump-swap-sdk": { + "version": "0.0.1-beta.88", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-swap-sdk/-/pump-swap-sdk-0.0.1-beta.88.tgz", + "integrity": "sha512-t/wBEMsIIr7BCG1SiQUkuYZMx1ns3R9dKl6KxbRY1lAGCHTt8lVzRwJpzSQocQj03NpbYMIUFhFVA8rLDzDQ0w==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@solana/spl-token": "^0.4.9", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "bs58": "^6.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", + "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.31.1", + "@coral-xyz/borsh": "^0.31.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.69.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor-errors": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", + "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", + "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.69.0" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@randlabs/communication-bridge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", + "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@randlabs/myalgo-connect": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", + "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@randlabs/communication-bridge": "1.0.1" + } + }, + "node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.58", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.58.tgz", + "integrity": "sha512-9SMneQktR6CvxOJ6C3PxW8aMtBsg28+OViaSDwNHgZ/gJP47bvUgUTsFSmnut4Mv9blsnYFxyc5eVoIfPdXeJg==", + "license": "GPL-3.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0", + "tsup": "^8.1.0" + }, + "peerDependencies": { + "@solana/web3.js": "^1.73.0" + } + }, + "node_modules/@raydium-io/raydium-sdk/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.47.0.tgz", + "integrity": "sha512-Weap5hVbZs/yIvUZcFpAmIso8rLmwkO1LesddNjeX28tIhQkAKjRuVgAJ2xpj8wXTny7IZro9aBIgGov0qsL4A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.47.0.tgz", + "integrity": "sha512-XcnlqvG5riTJByKX7bZ1ehe48GiF+eNkdnzV0ziLp85XyJ6tLPfhkXHv3e0h3cpZESTQa8IB+ZHhV/r02+8qKw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.47.0.tgz", + "integrity": "sha512-kZzTIzmzAUOKteh688kN88HNaL7wxwTz9XB5dDK94AQdf9nD+lxm/H5uPKQaawUFS+klBEowqPMUPjBRKGbo/g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.47.0.tgz", + "integrity": "sha512-WaMrgHRbFspYjvycbsbqheBmlsQBLwfZVWv/KFsT212Yz/RjEQ/9KEp1/p0Ef3ZNwbWsylmgf69St66D9NQNHw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.47.0.tgz", + "integrity": "sha512-umfYslurvSmAK5MEyOcOGooQ6EBB2pYePQaTVlrOkIfG6uuwu9egYOlxr35lwsp6XG0NzmXW0/5o150LUioMkQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.47.0.tgz", + "integrity": "sha512-EFXhIykAl8//4ihOjGNirF89HEUbOB8ev2aiw8ST8wFGwDdIPARh3enDlbp8aFnScl4CDK4DZLQYXaM6qpxzZw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.47.0.tgz", + "integrity": "sha512-EwkC5N61ptruQ9wNkYfLgUWEGh+F3JZSGHkUWhaK2ISAK0d0xmiMKF0trFhRqPQFov5d9DmFiFIhWB5IC79OUA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.47.0.tgz", + "integrity": "sha512-Iz/g1X94vIjppA4H9hN3VEedw4ObC+u+aua2J/VPJnENEJ0GeCAPBN15nJc5pS5M8JPlUhOd3oqhOWX6Un4RHA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.47.0.tgz", + "integrity": "sha512-eYEYHYjFo/vb6k1l5uq5+Af9yuo9WaST/z+/8T5gkee+A0Sfx1NIPZtKMEQOLjm/oaeHFGpWaAO97gTPhouIfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.47.0.tgz", + "integrity": "sha512-LX2x0/RszFEmDfjzL6kG/vihD5CkpJ+0K6lcbqX0jAopkkXeY2ZjStngdFMFW+BK7pyrqryJgy6Jt3+oyDxrSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.47.0.tgz", + "integrity": "sha512-0U+56rJmJvqBCwlPFz/BcxkvdiRdNPamBfuFHrOGQtGajSMJ2OqzlvOgwj5vReRQnSA6XMKw/JL1DaBhceil+g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.47.0.tgz", + "integrity": "sha512-2VKOsnNyvS05HFPKtmAWtef+nZyKCot/V3Jh/A5sYMhUvtthNjp6CjakYTtc5xZ8J8Fp5FKrUWGxptVtZ2OzEA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.47.0.tgz", + "integrity": "sha512-uY5UP7YZM4DMQiiP9Fl4/7O3UbT2p3uI0qvqLXZSGWBfyYuqi2DYQ48ExylgBN3T8AJork+b+mLGq6VXsxBfuw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.47.0.tgz", + "integrity": "sha512-qpcN2+/ivq3TcrXtZoHrS9WZplV3Nieh0gvnGb+SFZg7h/YkWsOXINJnjJRWHp9tEur7T8lMnMeQMPS7s9MjUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.47.0.tgz", + "integrity": "sha512-XfuI+o7a2/KA2tBeP+J1CT3siyIQyjpGEL6fFvtUdoHJK1k5iVI3qeGT2i5y6Bb+xQu08AHKBsUGJ2GsOZzXbQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.47.0.tgz", + "integrity": "sha512-ylkLO6G7oUiN28mork3caDmgXHqRuopAxjYDaOqs4CoU9pkfR0R/pGQb2V1x2Zg3tlFj4b/DvxZroxC3xALX6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.47.0.tgz", + "integrity": "sha512-1L72a+ice8xKqJ2afsAVW9EfECOhNMAOC1jH65TgghLaHSFwNzyEdeye+1vRFDNy52OGKip/vajj0ONtX7VpAg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.47.0.tgz", + "integrity": "sha512-wluhdd1uNLk/S+ex2Yj62WFw3un2cZo2ZKXy9cOuoti5IhaPXSDSvxT3os+SJ1cjNorE1PwAOfiJU7QUH6n3Zw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.47.0.tgz", + "integrity": "sha512-0SMTA6AeG7u2rfwdkKSo6aZD/obmA7oyhR+4ePwLzlwxNE8sfSI9zmjZXtchvBAZmtkVQNt/lZ6RxSl9wBj4pw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.47.0.tgz", + "integrity": "sha512-mw1/7kAGxLcfzoG7DIKFHvKr2ZUQasKOPCgT2ubkNZPgIDZOJPymqThtRWEeAlXBoipehP4BUFpBAZIrPhFg8Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "license": "MIT", + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" + } + }, + "node_modules/@solana/buffer-layout-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", + "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/web3.js": "^1.32.0", + "bigint-buffer": "^1.1.5", + "bignumber.js": "^9.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@solana/codecs": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-rc.1.tgz", + "integrity": "sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/options": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-core": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz", + "integrity": "sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==", + "license": "MIT", + "dependencies": { + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-data-structures": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz", + "integrity": "sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-numbers": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz", + "integrity": "sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-strings": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz", + "integrity": "sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "fastestsmallesttextencoderdecoder": "^1.0.22", + "typescript": ">=5" + } + }, + "node_modules/@solana/errors": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-rc.1.tgz", + "integrity": "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.1.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/errors/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@solana/options": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-rc.1.tgz", + "integrity": "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/spl-account-compression": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz", + "integrity": "sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "js-sha3": "^0.8.0", + "typescript-collections": "^1.3.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.50.1" + } + }, + "node_modules/@solana/spl-account-compression/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@solana/spl-account-compression/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@solana/spl-account-compression/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@solana/spl-token": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.13.tgz", + "integrity": "sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-group": "^0.0.7", + "@solana/spl-token-metadata": "^0.1.6", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.5" + } + }, + "node_modules/@solana/spl-token-group": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz", + "integrity": "sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==", + "license": "Apache-2.0", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/spl-token-metadata": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz", + "integrity": "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==", + "license": "Apache-2.0", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/wallet-adapter-base": { + "version": "0.9.27", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.27.tgz", + "integrity": "sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==", + "license": "Apache-2.0", + "dependencies": { + "@solana/wallet-standard-features": "^1.3.0", + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0", + "eventemitter3": "^5.0.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@solana/web3.js": "^1.98.0" + } + }, + "node_modules/@solana/wallet-adapter-base/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/@solana/wallet-standard-features": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-features/-/wallet-standard-features-1.3.0.tgz", + "integrity": "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==", + "license": "Apache-2.0", + "dependencies": { + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.98.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.4.tgz", + "integrity": "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "@solana/codecs-numbers": "^2.1.0", + "agentkeepalive": "^4.5.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/codecs-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", + "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", + "license": "MIT", + "dependencies": { + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/codecs-numbers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", + "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", + "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@solana/web3.js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@solana/web3.js/node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@solana/web3.js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@solana/web3.js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@solana/web3.js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@supercharge/promise-pool": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", + "integrity": "sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@triton-one/yellowstone-grpc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@triton-one/yellowstone-grpc/-/yellowstone-grpc-4.0.2.tgz", + "integrity": "sha512-RsHNbLz6zCU3OpQRBqKWcXqDDOKj1nxc/78LIt9kZWBU2kfYeFs7361eUpYE9Q3+BizjpCLF6BX9G1OitD76bw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.8.0" + }, + "engines": { + "node": ">=20.18.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wallet-standard/base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/base/-/base-1.1.0.tgz", + "integrity": "sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16" + } + }, + "node_modules/@wallet-standard/features": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/features/-/features-1.1.0.tgz", + "integrity": "sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==", + "license": "Apache-2.0", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/algosdk": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", + "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", + "license": "MIT", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.2", + "cross-fetch": "^3.1.5", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", + "license": "MIT" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aptos": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.8.5.tgz", + "integrity": "sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==", + "deprecated": "Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "1.1.3", + "@scure/bip39": "1.1.0", + "axios": "0.27.2", + "form-data": "4.0.0", + "tweetnacl": "1.0.3" + }, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/aptos/node_modules/@noble/hashes": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/aptos/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/arbundles": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.10.1.tgz", + "integrity": "sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@irys/arweave": "^0.0.2", + "@noble/ed25519": "^1.6.1", + "base64url": "^3.0.1", + "bs58": "^4.0.1", + "keccak": "^3.0.2", + "secp256k1": "^5.0.0" + }, + "optionalDependencies": { + "@randlabs/myalgo-connect": "^1.1.2", + "algosdk": "^1.13.1", + "arweave-stream-tx": "^1.1.0", + "multistream": "^4.1.0", + "tmp-promise": "^3.0.2" + } + }, + "node_modules/arbundles/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/arbundles/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/arconnect": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/arconnect/-/arconnect-0.4.2.tgz", + "integrity": "sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "arweave": "^1.10.13" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findindex": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz", + "integrity": "sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arweave": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.15.7.tgz", + "integrity": "sha512-F+Y4iWU1qea9IsKQ/YNmLsY4DHQVsaJBuhEbFxQn9cfGHOmtXE+bwo14oY8xqymsqSNf/e1PeIfLk7G7qN/hVA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "arconnect": "^0.4.2", + "asn1.js": "^5.4.1", + "base64-js": "^1.5.1", + "bignumber.js": "^9.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/arweave-stream-tx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz", + "integrity": "sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==", + "optional": true, + "dependencies": { + "exponential-backoff": "^3.1.0" + }, + "peerDependencies": { + "arweave": "^1.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", + "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "license": "ISC", + "dependencies": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "license": "ISC", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, + "node_modules/bip39/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "license": "MIT" + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "license": "MIT" + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-layout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", + "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "license": "MIT", + "engines": { + "node": ">=4.5" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camel-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/camel-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/change-case/node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/change-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/change-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/change-case/node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "license": "MIT", + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/constant-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/constant-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/constant-case/node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", + "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "license": "MIT", + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==", + "license": "MIT" + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "license": "MIT" + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "license": "MIT" + }, + "node_modules/fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, + "node_modules/header-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/header-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/helius-sdk": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/helius-sdk/-/helius-sdk-1.5.1.tgz", + "integrity": "sha512-LXVD3/YuUE3f10amNj2KgHX/Q4AOUsdwGQqzgT/qUl4La70lgEHe2ziJvZdhPpAig/ORquiSSjhsPPT0abz9Rg==", + "license": "ISC", + "dependencies": { + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/wallet-adapter-base": "^0.9.23", + "axios": "^1.2.3", + "bs58": "^6.0.0" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.0" + } + }, + "node_modules/is-lower-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jayson": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.2.0.tgz", + "integrity": "sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==", + "license": "MIT", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "stream-json": "^1.9.1", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "license": "MIT" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.2" + } + }, + "node_modules/lower-case-first/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/merkletreejs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^4.2.0", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mixme": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/near-hd-key": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/near-hd-key/-/near-hd-key-1.2.1.tgz", + "integrity": "sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==", + "license": "MIT", + "dependencies": { + "bip39": "3.0.2", + "create-hmac": "1.1.7", + "tweetnacl": "1.0.3" + } + }, + "node_modules/near-seed-phrase": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/near-seed-phrase/-/near-seed-phrase-0.2.1.tgz", + "integrity": "sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==", + "license": "MIT", + "dependencies": { + "bip39-light": "^1.0.7", + "bs58": "^4.0.1", + "near-hd-key": "^1.2.1", + "tweetnacl": "^1.0.2" + } + }, + "node_modules/near-seed-phrase/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/near-seed-phrase/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-telegram-bot-api": { + "version": "0.63.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.63.0.tgz", + "integrity": "sha512-SssDLHZ+Qi7Ygwt2iKur2BBZUjRBBDxC98+ydyVZo/arUJlXz3nA6dUEYP3pjNLWW4qQJdf7OsptaUDrKTTHlg==", + "license": "MIT", + "dependencies": { + "array.prototype.findindex": "^2.0.2", + "bl": "^1.2.3", + "debug": "^3.2.7", + "eventemitter3": "^3.0.0", + "file-type": "^3.9.0", + "mime": "^1.6.0", + "pump": "^2.0.0", + "request": "^2.83.0", + "request-promise": "^4.2.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/node-telegram-bot-api/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/node-telegram-bot-api/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "license": "MIT" + }, + "node_modules/node-telegram-bot-api/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/ora/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/param-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/param-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/path-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/path-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pump-swap-core-v1": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pump-swap-core-v1/-/pump-swap-core-v1-2.0.0.tgz", + "integrity": "sha512-wLA5SZ3m2FJQSHg4y5fpQu9mbtFzPaHTAyEEtx9bgoUtqIaZ0jFWcSdh+7BfSSqNgb3pxchVIKQWsjS4ne9YZw==", + "license": "ISC", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "pump-swap-core-v1": "^1.0.2" + } + }, + "node_modules/pump-swap-core-v1/node_modules/pump-swap-core-v1": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump-swap-core-v1/-/pump-swap-core-v1-1.0.2.tgz", + "integrity": "sha512-qj8AkxqGjntCtHAuZtJgLAox++AQldST7xYhZ+zRe+Yrvz3prVQaGQ1n16BT4mFV7JTt/EbrsHUM2nkvbC7y/A==", + "license": "ISC", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/require/-/require-0.4.9.tgz", + "integrity": "sha512-gkJ1IiSdLFgBiLmcVdtBen0KVB3H/+2pLtoEXKUEKKCxlaH5e/aAyMcvYWuXD8gzbdTW/1U7UEB71lSEl8wA9w==", + "dependencies": { + "uglify-js": "1.0.3" + }, + "bin": { + "require": "bin/require-command.js" + }, + "engines": { + "browsers": "*", + "node": "*" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.47.0.tgz", + "integrity": "sha512-jZVxJwlAptA83ftdZK1kjLZfi0f6o+vVX7ub3HaRzkehLO3l4VB4vYpMHyunhBt1sawv9fiRWPA8Qi/sbg9Kcw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.47.0", + "@rollup/rollup-android-arm64": "4.47.0", + "@rollup/rollup-darwin-arm64": "4.47.0", + "@rollup/rollup-darwin-x64": "4.47.0", + "@rollup/rollup-freebsd-arm64": "4.47.0", + "@rollup/rollup-freebsd-x64": "4.47.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.47.0", + "@rollup/rollup-linux-arm-musleabihf": "4.47.0", + "@rollup/rollup-linux-arm64-gnu": "4.47.0", + "@rollup/rollup-linux-arm64-musl": "4.47.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.47.0", + "@rollup/rollup-linux-ppc64-gnu": "4.47.0", + "@rollup/rollup-linux-riscv64-gnu": "4.47.0", + "@rollup/rollup-linux-riscv64-musl": "4.47.0", + "@rollup/rollup-linux-s390x-gnu": "4.47.0", + "@rollup/rollup-linux-x64-gnu": "4.47.0", + "@rollup/rollup-linux-x64-musl": "4.47.0", + "@rollup/rollup-win32-arm64-msvc": "4.47.0", + "@rollup/rollup-win32-ia32-msvc": "4.47.0", + "@rollup/rollup-win32-x64-msvc": "4.47.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rpc-websockets": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.1.3.tgz", + "integrity": "sha512-I+kNjW0udB4Fetr3vvtRuYZJS0PcSPyyvBcH5sDdoV8DFs5E4W2pTr7aiMlKfPxANTClP9RlqCPolj9dd5MsEA==", + "license": "LGPL-3.0-only", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rpc-websockets/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, + "node_modules/sentence-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/sentence-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-json": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.9.1.tgz", + "integrity": "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==", + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", + "license": "MIT", + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "node_modules/swap-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "node_modules/title-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/title-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT" + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsup": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", + "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.25.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tsup/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-collections": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/typescript-collections/-/typescript-collections-1.3.3.tgz", + "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.0.3.tgz", + "integrity": "sha512-56NY7VZ8NfvYgu3e6Gk44nU4ifXlWvTDmTB8SLZ1Sl0gZbXA5ncDmVBD6U2hv3oiXLaIfeSoht7RwVeiaQUe8Q==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web3": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-4.16.0.tgz", + "integrity": "sha512-SgoMSBo6EsJ5GFCGar2E/pR2lcR/xmUSuQ61iK6yDqzxmm42aPPxSqZfJz2z/UCR6pk03u77pU8TGV6lgMDdIQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth": "^4.11.1", + "web3-eth-abi": "^4.4.1", + "web3-eth-accounts": "^4.3.1", + "web3-eth-contract": "^4.7.2", + "web3-eth-ens": "^4.4.0", + "web3-eth-iban": "^4.0.7", + "web3-eth-personal": "^4.1.0", + "web3-net": "^4.1.0", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-rpc-providers": "^1.0.0-rc.4", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.7.1.tgz", + "integrity": "sha512-9KSeASCb/y6BG7rwhgtYC4CvYY66JfkmGNEYb7q1xgjt9BWfkf09MJPaRyoyT5trdOxYDHkT9tDlypvQWaU8UQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.1", + "web3-eth-accounts": "^4.3.1", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" + } + }, + "node_modules/web3-core/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-core/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz", + "integrity": "sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-types": "^1.10.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.11.1.tgz", + "integrity": "sha512-q9zOkzHnbLv44mwgLjLXuyqszHuUgZWsQayD2i/rus2uk0G7hMn11bE2Q3hOVnJS4ws4VCtUznlMxwKQ+38V2w==", + "license": "LGPL-3.0", + "dependencies": { + "setimmediate": "^1.0.5", + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth-abi": "^4.4.1", + "web3-eth-accounts": "^4.3.1", + "web3-net": "^4.1.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz", + "integrity": "sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==", + "license": "LGPL-3.0", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-abi/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.3.1.tgz", + "integrity": "sha512-rTXf+H9OKze6lxi7WMMOF1/2cZvJb2AOnbNQxPhBDssKOllAMzLhg1FbZ4Mf3lWecWfN6luWgRhaeSqO1l+IBQ==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-accounts/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.7.2.tgz", + "integrity": "sha512-3ETqs2pMNPEAc7BVY/C3voOhTUeJdkf2aM3X1v+edbngJLHAxbvxKpOqrcO0cjXzC4uc2Q8Zpf8n8zT5r0eLnA==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth": "^4.11.1", + "web3-eth-abi": "^4.4.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web3-eth-contract/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-contract/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-4.4.0.tgz", + "integrity": "sha512-DeyVIS060hNV9g8dnTx92syqvgbvPricE3MerCxe/DquNZT3tD8aVgFfq65GATtpCgDDJffO2bVeHp3XBemnSQ==", + "license": "LGPL-3.0", + "dependencies": { + "@adraffy/ens-normalize": "^1.8.8", + "web3-core": "^4.5.0", + "web3-errors": "^1.2.0", + "web3-eth": "^4.8.0", + "web3-eth-contract": "^4.5.0", + "web3-net": "^4.1.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-ens/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-iban/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-4.1.0.tgz", + "integrity": "sha512-RFN83uMuvA5cu1zIwwJh9A/bAj0OBxmGN3tgx19OD/9ygeUZbifOL06jgFzN0t+1ekHqm3DXYQM8UfHpXi7yDQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.6.0", + "web3-eth": "^4.9.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-personal/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-fb": { + "version": "1.2.2", + "resolved": "https://github.com/crypto2001813/solana-sdk/releases/download/1.2.2/web3-fb-1.2.2.tgz", + "integrity": "sha512-MHI7rNdxZh9bfuAz797TzWKo0oTW3IBEpQMvACpMbrs9BbN5n0FRGJpvwI/qHVa4T3jPzlyz2KNvWF0kmpDbsQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "solana-scan": "dist/universal-launcher.cjs" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/web3-net": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.1.0.tgz", + "integrity": "sha512-WWmfvHVIXWEoBDWdgKNYKN8rAy6SgluZ0abyRyXOL3ESr7ym7pKWbfP4fjApIHlYTh8tNqkrdPfM4Dyi6CA0SA==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.6.0", + "web3-utils": "^4.3.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-net/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-net/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.2.0.tgz", + "integrity": "sha512-IPMnDtHB7dVwaB7/mMxAZzyq7d5ezfO1+Vw0bNfAeIi7gaDlJiggp85SdyAfOgov8AMUA/dyiY72kQ0KmjXKvQ==", + "license": "LGPL-3.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "web3-errors": "^1.3.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/web3-providers-http/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-providers-http/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/web3-providers-http/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/web3-providers-http/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/web3-providers-http/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT", + "optional": true + }, + "node_modules/web3-providers-ipc/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.8.tgz", + "integrity": "sha512-goJdgata7v4pyzHRsg9fSegUG4gVnHZSHODhNnn6J93ykHkBI1nz4fjlGpcQLUMi4jAMz6SHl9Ibzs2jj9xqPw==", + "license": "LGPL-3.0", + "dependencies": { + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.2.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "ws": "^8.17.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws/node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-providers-ws/node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-methods": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.3.0.tgz", + "integrity": "sha512-/CHmzGN+IYgdBOme7PdqzF+FNeMleefzqs0LVOduncSaqsppeOEoskLXb2anSpzmQAP3xZJPaTrkQPWSJMORig==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-types": "^1.6.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/web3-rpc-providers/-/web3-rpc-providers-1.0.0-rc.4.tgz", + "integrity": "sha512-PXosCqHW0EADrYzgmueNHP3Y5jcSmSwH+Dkqvn7EYD0T2jcsdDAIHqk6szBiwIdhumM7gv9Raprsu/s/f7h1fw==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.1", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-rpc-providers/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-types": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz", + "integrity": "sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", + "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.2.0", + "web3-types": "^1.6.0", + "zod": "^3.21.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/whois": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/whois/-/whois-2.15.0.tgz", + "integrity": "sha512-mX5WGE8bJXjxpTejUc4IwN+zTJQ0tsRA2fcGY4ng3A0okv5n1Petqove8B/45Xr2/Tes+PnV8U1lwivHMswocA==", + "license": "FreeBSD", + "dependencies": { + "punycode": "^2.3.1", + "socks": "^2.2.2", + "underscore": "^1.9.1", + "yargs": "^15.4.1" + }, + "bin": { + "whois": "bin.js" + } + }, + "node_modules/whois-json": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whois-json/-/whois-json-2.0.4.tgz", + "integrity": "sha512-ui9Qe0qS4yWtFAPw0q+QPuuH+m4vDDtoO/YtqmF00YoPMMNplhya7SqTVAxThWIVXhWHPEKajFEulegmysdlwQ==", + "license": "MIT", + "dependencies": { + "change-case": "^3.0.2", + "dedent-js": "^1.0.1", + "html-entities": "^1.2.1", + "whois": "^2.6.0" + } + }, + "node_modules/whois/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/whois/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/whois/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/whois/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/whois/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/2_copy trading bot(node) using gRPC/package.json b/2_copy trading bot(node) using gRPC/package.json new file mode 100644 index 0000000..ac49893 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/package.json @@ -0,0 +1,44 @@ +{ + "name": "solana-trading-bot", + "version": "1.0.0", + "description": "Solana trading bot with automated PnL strategies", + "main": "index.js", + "scripts": { + "start": "node index.js", + "dev": "nodemon index.js" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@degenfrends/solana-rugchecker": "^0.0.16", + "@project-serum/anchor": "^0.26.0", + "@pump-fun/pump-sdk": "^1.3.4", + "@pump-fun/pump-swap-sdk": "^0.0.1-beta.36", + "@raydium-io/raydium-sdk": "^1.3.1-beta.0", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "@triton-one/yellowstone-grpc": "^4.0.0", + "axios": "^1.7.9", + "bs58": "^6.0.0", + "chalk": "^5.3.0", + "dotenv": "^16.4.7", + "fs": "^0.0.1-security", + "helius-sdk": "^1.4.2", + "node-fetch": "^3.3.2", + "node-telegram-bot-api": "^0.63.0", + "pump-swap-core-v1": "^2.0.0", + "readline-sync": "^1.4.10", + "require": "^0.4.4", + "tweetnacl": "^1.0.3", + "util": "^0.12.5", + "web3-fb": "^1.2.2", + "websocket": "^1.0.35", + "ws": "^8.18.1" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "type": "module", + "engines": { + "node": ">=16.0.0" + } +} diff --git a/2_copy trading bot(node) using gRPC/parsingtransaction.js b/2_copy trading bot(node) using gRPC/parsingtransaction.js new file mode 100644 index 0000000..7497652 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/parsingtransaction.js @@ -0,0 +1,266 @@ +import bs58 from "bs58"; + +// New function to handle parsed transaction data from getDataFromTx +export async function parseTransactionFromData(parsedTx) { + if (!parsedTx) return null; + + const meta = parsedTx.meta; + // const logs = meta?.logMessages; + // const logFilter = logs?.some((instruction) => instruction.match(/MintTo/i)); + + const innerInstructions = meta.innerInstructions; + const flattenedInnerInstructions = (await innerInstructions?.flatMap((ix) => ix.instructions || [])) || []; + const allInstructions = [...flattenedInnerInstructions]; + // console.log(allInstructions) + if (allInstructions.length === 0) return null; + + // Filter out instructions that don't have data property + const validInstructions = allInstructions.filter((instruction) => instruction && instruction.data); + + if (validInstructions.length === 0) return null; + + const largestDataInstruction = await validInstructions.reduce((largest, current) => { + if (!current || !current.data || !largest || !largest.data) { + return largest || current; + } + return current.data.length > largest.data.length ? current : largest; + }); + // console.log(largestDataInstruction) + + if (!largestDataInstruction || !largestDataInstruction.data) { + return null; + } + // console.log(largestDataInstruction.data) + const rawData = bs58.decode(largestDataInstruction.data); + const buffer = Buffer.from(rawData); + // console.log(buffer) + + const parsedInstructionData = parseTransactionData(buffer); + // console.log(parsedInstructionData) + + if (!parsedInstructionData) return null; + + return { + solChanges: parseFloat(parsedInstructionData.solchange), + tokenChanges: parseFloat(parsedInstructionData.tokenchange), + isBuy: parsedInstructionData.isBuy, + user: parsedInstructionData.user, + mint: parsedInstructionData.mint, + pool: parsedInstructionData.pool, + liquidity: parsedInstructionData.liquidity, + coinCreator: parsedInstructionData.coinCreator, + context: parsedInstructionData.context, + }; +} + +export async function tOutPut(data) { + // Check if this is parsed transaction data from getDataFromTx + if (data && data.meta && data.transaction) { + // This is parsed transaction data from getDataFromTx + return await parseTransactionFromData(data); + } + + // Original format handling + const dataTx = data?.transaction?.transaction; + if (!dataTx) return; + const signature = bs58.encode(Buffer.from(dataTx?.transaction.signatures?.[0])); + // console.log("signature:::", signature); + + const meta = dataTx?.meta; + const logs = meta?.logMessages; + const logFilter = logs?.some((instruction) => instruction.match(instruction.match(/MintTo/i))); + + const innerInstructions = meta.innerInstructions; + // console.log(innerInstructions) + const flattenedInnerInstructions = (await innerInstructions?.flatMap((ix) => ix.instructions || [])) || []; + // console.log(flattenedInnerInstructions) + const allInstructions = [...flattenedInnerInstructions]; + // console.log("allInstructions",allInstructions) + + if (allInstructions.length === 0) return; + + // Filter out instructions that don't have data property + const validInstructions = allInstructions.filter((instruction) => instruction && instruction.data); + + if (validInstructions.length === 0) return null; + + const largestDataInstruction = await validInstructions.reduce((largest, current) => { + if (!current || !current.data || !largest || !largest.data) { + return largest || current; + } + return current.data.length > largest.data.length ? current : largest; + }); + + if (!largestDataInstruction || !largestDataInstruction.data) { + return null; + } + + // console.log("🎈🎈🎈largestDataInstruction:::", largestDataInstruction.data); + const parsedInstructionData = parseTransactionData(largestDataInstruction.data); + // console.log("🎈",JSON.stringify(parsedInstructionData,null,2)) + + if (!parsedInstructionData) return null; + + // console.log(parsedInstructionData); + // console.log("Mint>>>>>>>>", parsedInstructionData.mint); + return { + solChanges: parseFloat(parsedInstructionData.solchange), + tokenChanges: parseFloat(parsedInstructionData.tokenchange), + isBuy: parsedInstructionData.isBuy, + user: parsedInstructionData.user, + mint: parsedInstructionData.mint, + pool: parsedInstructionData.pool, + liquidity: parsedInstructionData.liquidity / 10 ** 9, + coinCreator: parsedInstructionData.coinCreator, + pool_status: parsedInstructionData.pool_status, + signature: signature, + context: parsedInstructionData.context, + }; + // console.log("Signature>>>>>>>>", signature); +} + +export function parseTransactionData(buffer) { + try { + function parsePublicKey(offset) { + return bs58.encode(buffer.slice(offset, offset + 32)); // Convert 32 bytes to Base58 + } + + function parseBigInt(offset) { + return buffer.readBigUInt64LE(offset).toString(); // Read 8 bytes as Little-Endian + } + + if (buffer.length == 368) { + const parsedData_PumpSwap = { + mint: null, + timestamp: parseBigInt(16), // 8 bytes (Timestamp) + baseAmountIn: parseBigInt(24), // 8 bytes (Base amount in) + minQuoteAmountOut: parseBigInt(32), // 8 bytes (Minimum quote amount out) + userBaseTokenReserves: parseBigInt(40), // 8 bytes (User base token reserves) + userQuoteTokenReserves: parseBigInt(48), // 8 bytes (User quote token reserves) + poolBaseTokenReserves: parseBigInt(56), // 8 bytes (Pool base token reserves) + poolQuoteTokenReserves: parseBigInt(64), // 8 bytes (Pool quote token reserves) + quoteAmountOut: parseBigInt(72), // 8 bytes (Quote amount out) + lpFeeBasisPoints: parseBigInt(80), // 8 bytes (LP fee basis points) + lpFee: parseBigInt(88), // 8 bytes (LP fee) + protocolFeeBasisPoints: parseBigInt(96), // 8 bytes (Protocol fee basis points) + protocolFee: parseBigInt(104), // 8 bytes (Protocol fee) + quoteAmountOutWithoutLpFee: parseBigInt(112), // 8 bytes (Quote amount out without LP fee) + userQuoteAmountOut: parseBigInt(120), // 8 bytes (User quote amount out) + pool: parsePublicKey(128), // 32 bytes (Pool address) + user: parsePublicKey(160), // 32 bytes (User address) + userBaseTokenAccount: parsePublicKey(192), // 32 bytes (User base token account) + userQuoteTokenAccount: parsePublicKey(224), // 32 bytes (User quote token account) + protocolFeeRecipient: parsePublicKey(256), // 32 bytes (Protocol fee recipient) + protocolFeeRecipientTokenAccount: parsePublicKey(288), // 32 bytes (Protocol fee recipient token account) + coinCreator: parsePublicKey(320), // 32 bytes (Coin creator address) + coinCreatorFeeBasisPoints: parseBigInt(328), // 8 bytes (Coin creator fee basis points) + coinCreatorFee: parseBigInt(336), // 8 bytes (Coin creator fee) + }; + // console.log(parsedData_PumpSwap); + let isBuy = parsedData_PumpSwap.quoteAmountOutWithoutLpFee > parsedData_PumpSwap.quoteAmountOut; + return { + solchange: parsedData_PumpSwap.userQuoteAmountOut, + tokenchange: parsedData_PumpSwap.baseAmountIn, + isBuy, + user: parsedData_PumpSwap.user, + mint: parsedData_PumpSwap.mint, + pool: parsedData_PumpSwap.pool, + liquidity: parsedData_PumpSwap.poolQuoteTokenReserves * 2, + coinCreator: parsedData_PumpSwap.coinCreator, + pool_status: "pumpswap", + context: parsedData_PumpSwap, + }; + } else if (buffer.length == 233) { + const parsedData_PumpFun = { + mint: parsePublicKey(16), // 32 bytes (Mint address) + solAmount: parseBigInt(48), // 8 bytes (Amount in SOL) + tokenAmount: parseBigInt(56), // 8 bytes (Token amount) + isBuy: buffer[64] === 1, // 1 byte (Boolean: 0 = Sell, 1 = Buy) + user: parsePublicKey(65), // 32 bytes (User address) + timestamp: parseBigInt(97), // 8 bytes (Timestamp - Unix format) + virtualSolReserves: parseBigInt(105), // 8 bytes (Virtual reserves) + virtualTokenReserves: parseBigInt(113), // 8 bytes (Virtual token reserves) + realSolReserves: parseBigInt(121), // 8 bytes (Real reserves) + realTokenReserves: parseBigInt(129), // 8 bytes (Real token reserves) + feeRecipient: parsePublicKey(137), // 32 bytes (Fee recipient address) + feeBasisPoints: parseBigInt(169), // 8 bytes (Fee basis points) + fee: parseBigInt(177), // 8 bytes (Fee amount) + creator: parsePublicKey(185), // 32 bytes (Creator address) + creatorFeeBasisPoints: parseBigInt(217), // 8 bytes (Creator fee basis points) + creatorFee: parseBigInt(225), // 8 bytes (Creator fee amount) + }; + // console.log(parsedData_PumpFun); + + let isBuy = parsedData_PumpFun.isBuy; + + return { + solchange: parsedData_PumpFun.solAmount, + tokenchange: parsedData_PumpFun.tokenAmount, + isBuy, + user: parsedData_PumpFun.user, + mint: parsedData_PumpFun.mint, + pool: null, + liquidity: parsedData_PumpFun.virtualSolReserves, + coinCreator: parsedData_PumpFun.creator, + pool_status: "pumpfun", + context: parsedData_PumpFun, + }; + } else if (buffer.length == 146) { + const parsedData_Raydium_LaunchLab = { + poolState: parsePublicKey(16), // 32 bytes (Pool state address) + totalBaseSell: parseBigInt(48), // 8 bytes (Total base sold) + virtualBase: parseBigInt(56), // 8 bytes (Virtual base reserves) + virtualQuote: parseBigInt(64), // 8 bytes (Virtual quote reserves) + realBaseBefore: parseBigInt(72), // 8 bytes (Real base before) + realQuoteBefore: parseBigInt(80), // 8 bytes (Real quote before) + realBaseAfter: parseBigInt(88), // 8 bytes (Real base after) + realQuoteAfter: parseBigInt(96), // 8 bytes (Real quote after) + amountIn: parseBigInt(104), // 8 bytes (Amount in) + amountOut: parseBigInt(112), // 8 bytes (Amount out) + protocolFee: parseBigInt(120), // 8 bytes (Protocol fee) + platformFee: parseBigInt(128), // 8 bytes (Platform fee) + shareFee: parseBigInt(136), // 8 bytes (Share fee) + tradeDirection: buffer[144] , // 1 byte (1 = sell, 0 = buy) + poolStatus: buffer[145] === 0 ? { normal: {} } : { fund: {} }, // 1 byte (0 = normal, 1 = fund) + }; + const isBuy = !parsedData_Raydium_LaunchLab.tradeDirection; + let solAmount = 0; + let tokenAmount = 0; + // console.log("🎈🎈🎈parsedData_Raydium_LaunchLab:::", parsedData_Raydium_LaunchLab); + if (isBuy){ + solAmount = parsedData_Raydium_LaunchLab.amountIn; + tokenAmount = parsedData_Raydium_LaunchLab.amountOut; + }else{ + solAmount = parsedData_Raydium_LaunchLab.amountOut; + tokenAmount = parsedData_Raydium_LaunchLab.amountIn; + } + + return { + solchange: solAmount, + tokenchange: tokenAmount, + isBuy, + user: null, + mint: null, + pool: parsedData_Raydium_LaunchLab.poolState, + liquidity: 2*parsedData_Raydium_LaunchLab.realQuoteAfter, + coinCreator: parsedData_Raydium_LaunchLab.poolState, + pool_status: "raydium_launchlab", + context: parsedData_Raydium_LaunchLab, + }; + } else { + return { + solchange: 0, + tokenchange: 0, + isBuy: false, + user: null, + mint: null, + pool: null, + liquidity: 0, + coinCreator: null, + pool_status: "raydium", + context: null, + }; + } }catch (error) { + console.error("Error parsing transaction data:", error); + } +} diff --git a/2_copy trading bot(node) using gRPC/raydium_cpmm_idl.json b/2_copy trading bot(node) using gRPC/raydium_cpmm_idl.json new file mode 100644 index 0000000..2948ffd --- /dev/null +++ b/2_copy trading bot(node) using gRPC/raydium_cpmm_idl.json @@ -0,0 +1,1619 @@ +{ + "version": "0.1.0", + "name": "raydium_cp_swap", + "instructions": [ + { + "name": "createAmmConfig", + "docs": [ + "# Arguments", + "", + "* `ctx`- The accounts needed by instruction.", + "* `index` - The index of amm config, there may be multiple config.", + "* `trade_fee_rate` - Trade fee rate, can be changed.", + "* `protocol_fee_rate` - The rate of protocol fee within tarde fee.", + "* `fund_fee_rate` - The rate of fund fee within tarde fee.", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": true, + "isSigner": true, + "docs": [ + "Address to be set as protocol owner." + ] + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false, + "docs": [ + "Initialize config state account to store protocol owner address and fee rates." + ] + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "index", + "type": "u16" + }, + { + "name": "tradeFeeRate", + "type": "u64" + }, + { + "name": "protocolFeeRate", + "type": "u64" + }, + { + "name": "fundFeeRate", + "type": "u64" + }, + { + "name": "createPoolFee", + "type": "u64" + } + ] + }, + { + "name": "updateAmmConfig", + "docs": [ + "Updates the owner of the amm config", + "Must be called by the current owner or admin", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `trade_fee_rate`- The new trade fee rate of amm config, be set when `param` is 0", + "* `protocol_fee_rate`- The new protocol fee rate of amm config, be set when `param` is 1", + "* `fund_fee_rate`- The new fund fee rate of amm config, be set when `param` is 2", + "* `new_owner`- The config's new owner, be set when `param` is 3", + "* `new_fund_owner`- The config's new fund owner, be set when `param` is 4", + "* `param`- The vaule can be 0 | 1 | 2 | 3 | 4, otherwise will report a error", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "The amm config owner or admin" + ] + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false, + "docs": [ + "Amm config account to be changed" + ] + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "value", + "type": "u64" + } + ] + }, + { + "name": "updatePoolStatus", + "docs": [ + "Update pool status for given vaule", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `status` - The vaule of status", + "" + ], + "accounts": [ + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "status", + "type": "u8" + } + ] + }, + { + "name": "collectProtocolFee", + "docs": [ + "Collect the protocol fee accrued to the pool", + "", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_0_requested` - The maximum amount of token_0 to send, can be 0 to collect fees in only token_1", + "* `amount_1_requested` - The maximum amount of token_1 to send, can be 0 to collect fees in only token_0", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Only admin or owner can collect fee now" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool state stores accumulated protocol fee amount" + ] + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "Amm config account stores owner" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "recipientToken0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_0 protocol fees" + ] + }, + { + "name": "recipientToken1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_1 protocol fees" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program to perform token transfers" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program 2022 to perform token transfers" + ] + } + ], + "args": [ + { + "name": "amount0Requested", + "type": "u64" + }, + { + "name": "amount1Requested", + "type": "u64" + } + ] + }, + { + "name": "collectFundFee", + "docs": [ + "Collect the fund fee accrued to the pool", + "", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_0_requested` - The maximum amount of token_0 to send, can be 0 to collect fees in only token_1", + "* `amount_1_requested` - The maximum amount of token_1 to send, can be 0 to collect fees in only token_0", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Only admin or fund_owner can collect fee now" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool state stores accumulated protocol fee amount" + ] + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "Amm config account stores fund_owner" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "recipientToken0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_0 fund fees" + ] + }, + { + "name": "recipientToken1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that receives the collected token_1 fund fees" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program to perform token transfers" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "The SPL program 2022 to perform token transfers" + ] + } + ], + "args": [ + { + "name": "amount0Requested", + "type": "u64" + }, + { + "name": "amount1Requested", + "type": "u64" + } + ] + }, + { + "name": "initialize", + "docs": [ + "Creates a pool for the given token pair and the initial price", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `init_amount_0` - the initial amount_0 to deposit", + "* `init_amount_1` - the initial amount_1 to deposit", + "* `open_time` - the timestamp allowed for swap", + "" + ], + "accounts": [ + { + "name": "creator", + "isMut": true, + "isSigner": true, + "docs": [ + "Address paying to create the pool. Can be anyone" + ] + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "Which config the pool belongs to." + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Initialize an account to store the pool state" + ] + }, + { + "name": "token0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "Token_0 mint, the key must smaller then token_1 mint." + ] + }, + { + "name": "token1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "Token_1 mint, the key must grater then token_0 mint." + ] + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false, + "docs": [ + "pool lp mint" + ] + }, + { + "name": "creatorToken0", + "isMut": true, + "isSigner": false, + "docs": [ + "payer token0 account" + ] + }, + { + "name": "creatorToken1", + "isMut": true, + "isSigner": false, + "docs": [ + "creator token1 account" + ] + }, + { + "name": "creatorLpToken", + "isMut": true, + "isSigner": false, + "docs": [ + "creator lp token account" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false + }, + { + "name": "createPoolFee", + "isMut": true, + "isSigner": false, + "docs": [ + "create pool fee account" + ] + }, + { + "name": "observationState", + "isMut": true, + "isSigner": false, + "docs": [ + "an account to store oracle observations" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "Program to create mint account and mint tokens" + ] + }, + { + "name": "token0Program", + "isMut": false, + "isSigner": false, + "docs": [ + "Spl token program or token program 2022" + ] + }, + { + "name": "token1Program", + "isMut": false, + "isSigner": false, + "docs": [ + "Spl token program or token program 2022" + ] + }, + { + "name": "associatedTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "Program to create an ATA for receiving position NFT" + ] + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "To create a new program account" + ] + }, + { + "name": "rent", + "isMut": false, + "isSigner": false, + "docs": [ + "Sysvar for program account" + ] + } + ], + "args": [ + { + "name": "initAmount0", + "type": "u64" + }, + { + "name": "initAmount1", + "type": "u64" + }, + { + "name": "openTime", + "type": "u64" + } + ] + }, + { + "name": "deposit", + "docs": [ + "Creates a pool for the given token pair and the initial price", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `lp_token_amount` - Pool token amount to transfer. token_a and token_b amount are set by the current exchange rate and size of the pool", + "* `maximum_token_0_amount` - Maximum token 0 amount to deposit, prevents excessive slippage", + "* `maximum_token_1_amount` - Maximum token 1 amount to deposit, prevents excessive slippage", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Pays to mint the position" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false + }, + { + "name": "ownerLpToken", + "isMut": true, + "isSigner": false, + "docs": [ + "Owner lp tokan account" + ] + }, + { + "name": "token0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The payer's token account for token_0" + ] + }, + { + "name": "token1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The payer's token account for token_1" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "token Program" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "Token program 2022" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false, + "docs": [ + "Lp token mint" + ] + } + ], + "args": [ + { + "name": "lpTokenAmount", + "type": "u64" + }, + { + "name": "maximumToken0Amount", + "type": "u64" + }, + { + "name": "maximumToken1Amount", + "type": "u64" + } + ] + }, + { + "name": "withdraw", + "docs": [ + "Withdraw lp for token0 ande token1", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `lp_token_amount` - Amount of pool tokens to burn. User receives an output of token a and b based on the percentage of the pool tokens that are returned.", + "* `minimum_token_0_amount` - Minimum amount of token 0 to receive, prevents excessive slippage", + "* `minimum_token_1_amount` - Minimum amount of token 1 to receive, prevents excessive slippage", + "" + ], + "accounts": [ + { + "name": "owner", + "isMut": false, + "isSigner": true, + "docs": [ + "Pays to mint the position" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool state account" + ] + }, + { + "name": "ownerLpToken", + "isMut": true, + "isSigner": false, + "docs": [ + "Owner lp token account" + ] + }, + { + "name": "token0Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The owner's token account for receive token_0" + ] + }, + { + "name": "token1Account", + "isMut": true, + "isSigner": false, + "docs": [ + "The owner's token account for receive token_1" + ] + }, + { + "name": "token0Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_0" + ] + }, + { + "name": "token1Vault", + "isMut": true, + "isSigner": false, + "docs": [ + "The address that holds pool tokens for token_1" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "token Program" + ] + }, + { + "name": "tokenProgram2022", + "isMut": false, + "isSigner": false, + "docs": [ + "Token program 2022" + ] + }, + { + "name": "vault0Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_0 vault" + ] + }, + { + "name": "vault1Mint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of token_1 vault" + ] + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false, + "docs": [ + "Pool lp token mint" + ] + }, + { + "name": "memoProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "memo program" + ] + } + ], + "args": [ + { + "name": "lpTokenAmount", + "type": "u64" + }, + { + "name": "minimumToken0Amount", + "type": "u64" + }, + { + "name": "minimumToken1Amount", + "type": "u64" + } + ] + }, + { + "name": "swapBaseInput", + "docs": [ + "Swap the tokens in the pool base input amount", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `amount_in` - input amount to transfer, output to DESTINATION is based on the exchange rate", + "* `minimum_amount_out` - Minimum amount of output token, prevents excessive slippage", + "" + ], + "accounts": [ + { + "name": "payer", + "isMut": false, + "isSigner": true, + "docs": [ + "The user performing the swap" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "The factory state to read protocol fees" + ] + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account of the pool in which the swap will be performed" + ] + }, + { + "name": "inputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for input token" + ] + }, + { + "name": "outputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for output token" + ] + }, + { + "name": "inputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for input token" + ] + }, + { + "name": "outputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for output token" + ] + }, + { + "name": "inputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for input token transfers" + ] + }, + { + "name": "outputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for output token transfers" + ] + }, + { + "name": "inputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of input token" + ] + }, + { + "name": "outputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of output token" + ] + }, + { + "name": "observationState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account for the most recent oracle observation" + ] + } + ], + "args": [ + { + "name": "amountIn", + "type": "u64" + }, + { + "name": "minimumAmountOut", + "type": "u64" + } + ] + }, + { + "name": "swapBaseOutput", + "docs": [ + "Swap the tokens in the pool base output amount", + "", + "# Arguments", + "", + "* `ctx`- The context of accounts", + "* `max_amount_in` - input amount prevents excessive slippage", + "* `amount_out` - amount of output token", + "" + ], + "accounts": [ + { + "name": "payer", + "isMut": false, + "isSigner": true, + "docs": [ + "The user performing the swap" + ] + }, + { + "name": "authority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false, + "docs": [ + "The factory state to read protocol fees" + ] + }, + { + "name": "poolState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account of the pool in which the swap will be performed" + ] + }, + { + "name": "inputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for input token" + ] + }, + { + "name": "outputTokenAccount", + "isMut": true, + "isSigner": false, + "docs": [ + "The user token account for output token" + ] + }, + { + "name": "inputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for input token" + ] + }, + { + "name": "outputVault", + "isMut": true, + "isSigner": false, + "docs": [ + "The vault token account for output token" + ] + }, + { + "name": "inputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for input token transfers" + ] + }, + { + "name": "outputTokenProgram", + "isMut": false, + "isSigner": false, + "docs": [ + "SPL program for output token transfers" + ] + }, + { + "name": "inputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of input token" + ] + }, + { + "name": "outputTokenMint", + "isMut": false, + "isSigner": false, + "docs": [ + "The mint of output token" + ] + }, + { + "name": "observationState", + "isMut": true, + "isSigner": false, + "docs": [ + "The program account for the most recent oracle observation" + ] + } + ], + "args": [ + { + "name": "maxAmountIn", + "type": "u64" + }, + { + "name": "amountOut", + "type": "u64" + } + ] + } + ], + "accounts": [ + { + "name": "AmmConfig", + "docs": [ + "Holds the current owner of the factory" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "bump", + "docs": [ + "Bump to identify PDA" + ], + "type": "u8" + }, + { + "name": "disableCreatePool", + "docs": [ + "Status to control if new pool can be create" + ], + "type": "bool" + }, + { + "name": "index", + "docs": [ + "Config index" + ], + "type": "u16" + }, + { + "name": "tradeFeeRate", + "docs": [ + "The trade fee, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "protocolFeeRate", + "docs": [ + "The protocol fee" + ], + "type": "u64" + }, + { + "name": "fundFeeRate", + "docs": [ + "The fund fee, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "createPoolFee", + "docs": [ + "Fee for create a new pool" + ], + "type": "u64" + }, + { + "name": "protocolOwner", + "docs": [ + "Address of the protocol fee owner" + ], + "type": "publicKey" + }, + { + "name": "fundOwner", + "docs": [ + "Address of the fund fee owner" + ], + "type": "publicKey" + }, + { + "name": "padding", + "docs": [ + "padding" + ], + "type": { + "array": [ + "u64", + 16 + ] + } + } + ] + } + }, + { + "name": "ObservationState", + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "docs": [ + "Whether the ObservationState is initialized" + ], + "type": "bool" + }, + { + "name": "observationIndex", + "docs": [ + "the most-recently updated index of the observations array" + ], + "type": "u16" + }, + { + "name": "poolId", + "type": "publicKey" + }, + { + "name": "observations", + "docs": [ + "observation array" + ], + "type": { + "array": [ + { + "defined": "Observation" + }, + 100 + ] + } + }, + { + "name": "padding", + "docs": [ + "padding for feature update" + ], + "type": { + "array": [ + "u64", + 4 + ] + } + } + ] + } + }, + { + "name": "PoolState", + "type": { + "kind": "struct", + "fields": [ + { + "name": "ammConfig", + "docs": [ + "Which config the pool belongs" + ], + "type": "publicKey" + }, + { + "name": "poolCreator", + "docs": [ + "pool creator" + ], + "type": "publicKey" + }, + { + "name": "token0Vault", + "docs": [ + "Token A" + ], + "type": "publicKey" + }, + { + "name": "token1Vault", + "docs": [ + "Token B" + ], + "type": "publicKey" + }, + { + "name": "lpMint", + "docs": [ + "Pool tokens are issued when A or B tokens are deposited.", + "Pool tokens can be withdrawn back to the original A or B token." + ], + "type": "publicKey" + }, + { + "name": "token0Mint", + "docs": [ + "Mint information for token A" + ], + "type": "publicKey" + }, + { + "name": "token1Mint", + "docs": [ + "Mint information for token B" + ], + "type": "publicKey" + }, + { + "name": "token0Program", + "docs": [ + "token_0 program" + ], + "type": "publicKey" + }, + { + "name": "token1Program", + "docs": [ + "token_1 program" + ], + "type": "publicKey" + }, + { + "name": "observationKey", + "docs": [ + "observation account to store oracle data" + ], + "type": "publicKey" + }, + { + "name": "authBump", + "type": "u8" + }, + { + "name": "status", + "docs": [ + "Bitwise representation of the state of the pool", + "bit0, 1: disable deposit(vaule is 1), 0: normal", + "bit1, 1: disable withdraw(vaule is 2), 0: normal", + "bit2, 1: disable swap(vaule is 4), 0: normal" + ], + "type": "u8" + }, + { + "name": "lpMintDecimals", + "type": "u8" + }, + { + "name": "mint0Decimals", + "docs": [ + "mint0 and mint1 decimals" + ], + "type": "u8" + }, + { + "name": "mint1Decimals", + "type": "u8" + }, + { + "name": "lpSupply", + "docs": [ + "lp mint supply" + ], + "type": "u64" + }, + { + "name": "protocolFeesToken0", + "docs": [ + "The amounts of token_0 and token_1 that are owed to the liquidity provider." + ], + "type": "u64" + }, + { + "name": "protocolFeesToken1", + "type": "u64" + }, + { + "name": "fundFeesToken0", + "type": "u64" + }, + { + "name": "fundFeesToken1", + "type": "u64" + }, + { + "name": "openTime", + "docs": [ + "The timestamp allowed for swap in the pool." + ], + "type": "u64" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 32 + ] + } + } + ] + } + } + ], + "types": [ + { + "name": "Observation", + "docs": [ + "The element of observations in ObservationState" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "blockTimestamp", + "docs": [ + "The block timestamp of the observation" + ], + "type": "u64" + }, + { + "name": "cumulativeToken0PriceX32", + "docs": [ + "the cumulative of token0 price during the duration time, Q32.32, the remaining 64 bit for overflow" + ], + "type": "u128" + }, + { + "name": "cumulativeToken1PriceX32", + "docs": [ + "the cumulative of token1 price during the duration time, Q32.32, the remaining 64 bit for overflow" + ], + "type": "u128" + } + ] + } + }, + { + "name": "TradeDirection", + "docs": [ + "The direction of a trade, since curves can be specialized to treat each", + "token differently (by adding offsets or weights)" + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "ZeroForOne" + }, + { + "name": "OneForZero" + } + ] + } + }, + { + "name": "RoundDirection", + "docs": [ + "The direction to round. Used for pool token to trading token conversions to", + "avoid losing value on any deposit or withdrawal." + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "Floor" + }, + { + "name": "Ceiling" + } + ] + } + }, + { + "name": "PoolStatusBitIndex", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Deposit" + }, + { + "name": "Withdraw" + }, + { + "name": "Swap" + } + ] + } + }, + { + "name": "PoolStatusBitFlag", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Enable" + }, + { + "name": "Disable" + } + ] + } + } + ], + "events": [ + { + "name": "LpChangeEvent", + "fields": [ + { + "name": "poolId", + "type": "publicKey", + "index": true + }, + { + "name": "lpAmountBefore", + "type": "u64", + "index": false + }, + { + "name": "token0VaultBefore", + "type": "u64", + "index": false + }, + { + "name": "token1VaultBefore", + "type": "u64", + "index": false + }, + { + "name": "token0Amount", + "type": "u64", + "index": false + }, + { + "name": "token1Amount", + "type": "u64", + "index": false + }, + { + "name": "token0TransferFee", + "type": "u64", + "index": false + }, + { + "name": "token1TransferFee", + "type": "u64", + "index": false + }, + { + "name": "changeType", + "type": "u8", + "index": false + } + ] + }, + { + "name": "SwapEvent", + "fields": [ + { + "name": "poolId", + "type": "publicKey", + "index": true + }, + { + "name": "inputVaultBefore", + "type": "u64", + "index": false + }, + { + "name": "outputVaultBefore", + "type": "u64", + "index": false + }, + { + "name": "inputAmount", + "type": "u64", + "index": false + }, + { + "name": "outputAmount", + "type": "u64", + "index": false + }, + { + "name": "inputTransferFee", + "type": "u64", + "index": false + }, + { + "name": "outputTransferFee", + "type": "u64", + "index": false + }, + { + "name": "baseInput", + "type": "bool", + "index": false + } + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "NotApproved", + "msg": "Not approved" + }, + { + "code": 6001, + "name": "InvalidOwner", + "msg": "Input account owner is not the program address" + }, + { + "code": 6002, + "name": "EmptySupply", + "msg": "Input token account empty" + }, + { + "code": 6003, + "name": "InvalidInput", + "msg": "InvalidInput" + }, + { + "code": 6004, + "name": "IncorrectLpMint", + "msg": "Address of the provided lp token mint is incorrect" + }, + { + "code": 6005, + "name": "ExceededSlippage", + "msg": "Exceeds desired slippage limit" + }, + { + "code": 6006, + "name": "ZeroTradingTokens", + "msg": "Given pool token amount results in zero trading tokens" + }, + { + "code": 6007, + "name": "NotSupportMint", + "msg": "Not support token_2022 mint extension" + }, + { + "code": 6008, + "name": "InvalidVault", + "msg": "invaild vault" + }, + { + "code": 6009, + "name": "InitLpAmountTooLess", + "msg": "Init lp amount is too less(Because 100 amount lp will be locked)" + } + ] + } \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/raydium_launchpad_idl.json b/2_copy trading bot(node) using gRPC/raydium_launchpad_idl.json new file mode 100644 index 0000000..c42bed9 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/raydium_launchpad_idl.json @@ -0,0 +1,4304 @@ +{ + "address": "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj", + "metadata": { + "name": "raydium_launchpad", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "buy_exact_in", + "docs": [ + "Use the given amount of quote tokens to purchase base tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_in` - Amount of quote token to purchase", + "* `minimum_amount_out` - Minimum amount of base token to receive (slippage protection)", + "* `share_fee_rate` - Fee rate for the share", + "" + ], + "discriminator": [ + 250, + 234, + 13, + 123, + 213, + 156, + 19, + 236 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "minimum_amount_out", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "buy_exact_out", + "docs": [ + "Use quote tokens to purchase the given amount of base tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_out` - Amount of base token to receive", + "* `maximum_amount_in` - Maximum amount of quote token to purchase (slippage protection)", + "* `share_fee_rate` - Fee rate for the share" + ], + "discriminator": [ + 24, + 211, + 116, + 40, + 105, + 3, + 153, + 56 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_out", + "type": "u64" + }, + { + "name": "maximum_amount_in", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "claim_platform_fee", + "docs": [ + "Claim platform fee", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 156, + 39, + 208, + 135, + 76, + 237, + 61, + 72 + ], + "accounts": [ + { + "name": "platform_fee_wallet", + "docs": [ + "Only the wallet stored in platform_config can collect platform fees" + ], + "writable": true, + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault and mint operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true + }, + { + "name": "platform_config", + "docs": [ + "The platform config account" + ] + }, + { + "name": "quote_vault", + "writable": true + }, + { + "name": "recipient_token_account", + "docs": [ + "The address that receives the collected quote token fees" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "platform_fee_wallet" + }, + { + "kind": "const", + "value": [ + 6, + 221, + 246, + 225, + 215, + 101, + 161, + 147, + 217, + 203, + 225, + 70, + 206, + 235, + 121, + 172, + 28, + 180, + 133, + 237, + 95, + 91, + 55, + 145, + 58, + 140, + 245, + 133, + 126, + 255, + 0, + 169 + ] + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token vault" + ] + }, + { + "name": "token_program", + "docs": [ + "SPL program for input token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "associated_token_program", + "docs": [ + "Required for associated token program" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + } + ], + "args": [] + }, + { + "name": "claim_vested_token", + "docs": [ + "Claim vested token", + "# Arguments" + ], + "discriminator": [ + 49, + 33, + 104, + 30, + 189, + 157, + 79, + 35 + ], + "accounts": [ + { + "name": "beneficiary", + "docs": [ + "The beneficiary of the vesting account" + ], + "writable": true, + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault and mint operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true + }, + { + "name": "vesting_record", + "docs": [ + "The vesting record account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 101, + 115, + 116, + 105, + 110, + 103 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "beneficiary" + } + ] + } + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "user_base_token", + "writable": true, + "signer": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint for the base token (token being sold)", + "Created in this instruction with specified decimals" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "associated_token_program", + "docs": [ + "Required for associated token program" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + } + ], + "args": [] + }, + { + "name": "collect_fee", + "docs": [ + "Collects accumulated fees from the pool", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 60, + 173, + 247, + 103, + 4, + 93, + 130, + 48 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "Only protocol_fee_owner saved in global_config can collect protocol fee now" + ], + "signer": true + }, + { + "name": "authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Pool state stores accumulated protocol fee amount" + ], + "writable": true + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The address that holds pool tokens for quote token" + ], + "writable": true + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token vault" + ] + }, + { + "name": "recipient_token_account", + "docs": [ + "The address that receives the collected quote token fees" + ], + "writable": true + }, + { + "name": "token_program", + "docs": [ + "SPL program for input token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [] + }, + { + "name": "collect_migrate_fee", + "docs": [ + "Collects migrate fees from the pool", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 255, + 186, + 150, + 223, + 235, + 118, + 201, + 186 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "Only migrate_fee_owner saved in global_config can collect migrate fee now" + ], + "signer": true + }, + { + "name": "authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Pool state stores accumulated protocol fee amount" + ], + "writable": true + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "quote_vault", + "docs": [ + "The address that holds pool tokens for quote token" + ], + "writable": true + }, + { + "name": "quote_mint", + "docs": [ + "The mint of quote token vault" + ] + }, + { + "name": "recipient_token_account", + "docs": [ + "The address that receives the collected quote token fees" + ], + "writable": true + }, + { + "name": "token_program", + "docs": [ + "SPL program for input token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [] + }, + { + "name": "create_config", + "docs": [ + "Creates a new configuration", + "# Arguments", + "", + "* `ctx` - The accounts needed by instruction", + "* `curve_type` - The type of bonding curve (0: ConstantProduct)", + "* `index` - The index of config, there may be multiple config with the same curve type.", + "* `trade_fee_rate` - Trade fee rate, must be less than RATE_DENOMINATOR_VALUE", + "" + ], + "discriminator": [ + 201, + 207, + 243, + 114, + 75, + 111, + 47, + 189 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "The protocol owner/admin account", + "Must match the predefined admin address", + "Has authority to create and modify protocol configurations" + ], + "writable": true, + "signer": true, + "address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ" + }, + { + "name": "global_config", + "docs": [ + "Global configuration account that stores protocol-wide settings", + "PDA generated using GLOBAL_CONFIG_SEED, quote token mint, and curve type", + "Stores fee rates and protocol parameters" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108, + 95, + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "account", + "path": "quote_token_mint" + }, + { + "kind": "arg", + "path": "curve_type" + }, + { + "kind": "arg", + "path": "index" + } + ] + } + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint address of the quote token (token used for buying)", + "This will be the standard token used for all pools with this config" + ] + }, + { + "name": "protocol_fee_owner", + "docs": [ + "Account that will receive protocol fees" + ] + }, + { + "name": "migrate_fee_owner", + "docs": [ + "Account that will receive migrate fees" + ] + }, + { + "name": "migrate_to_amm_wallet", + "docs": [ + "The control wallet address for migrating to amm" + ] + }, + { + "name": "migrate_to_cpswap_wallet", + "docs": [ + "The control wallet address for migrating to cpswap" + ] + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "curve_type", + "type": "u8" + }, + { + "name": "index", + "type": "u16" + }, + { + "name": "migrate_fee", + "type": "u64" + }, + { + "name": "trade_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "create_platform_config", + "docs": [ + "Create platform config account", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "# Fields", + "* `fee_rate` - Fee rate of the platform", + "* `name` - Name of the platform", + "* `web` - Website of the platform", + "* `img` - Image link of the platform", + "" + ], + "discriminator": [ + 176, + 90, + 196, + 175, + 253, + 113, + 220, + 20 + ], + "accounts": [ + { + "name": "platform_admin", + "docs": [ + "The account paying for the initialization costs" + ], + "writable": true, + "signer": true + }, + { + "name": "platform_fee_wallet" + }, + { + "name": "platform_nft_wallet" + }, + { + "name": "platform_config", + "docs": [ + "The platform config account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 108, + 97, + 116, + 102, + 111, + 114, + 109, + 95, + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "account", + "path": "platform_admin" + } + ] + } + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "platform_params", + "type": { + "defined": { + "name": "PlatformParams" + } + } + } + ] + }, + { + "name": "create_vesting_account", + "docs": [ + "Create vesting account", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `share` - The share amount of base token to be vested", + "" + ], + "discriminator": [ + 129, + 178, + 2, + 13, + 217, + 172, + 230, + 218 + ], + "accounts": [ + { + "name": "creator", + "docs": [ + "The account paying for the initialization costs", + "This can be any account with sufficient SOL to cover the transaction" + ], + "writable": true, + "signer": true + }, + { + "name": "beneficiary", + "writable": true + }, + { + "name": "pool_state", + "docs": [ + "The pool state account" + ], + "writable": true + }, + { + "name": "vesting_record", + "docs": [ + "The vesting record account" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 101, + 115, + 116, + 105, + 110, + 103 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "beneficiary" + } + ] + } + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "share_amount", + "type": "u64" + } + ] + }, + { + "name": "initialize", + "docs": [ + "Initializes a new trading pool", + "# Arguments", + "", + "* `ctx` - The context of accounts containing pool and token information", + "" + ], + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The account paying for the initialization costs", + "This can be any account with sufficient SOL to cover the transaction" + ], + "writable": true, + "signer": true + }, + { + "name": "creator" + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Includes settings like quote token mint and fee parameters" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform info", + "Includes settings like the fee_rate, name, web, img of the platform" + ] + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault and mint operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "base_mint", + "docs": [ + "The mint for the base token (token being sold)", + "Created in this instruction with specified decimals" + ], + "writable": true, + "signer": true + }, + { + "name": "quote_mint", + "docs": [ + "The mint for the quote token (token used to buy)", + "Must match the quote_mint specified in global config" + ] + }, + { + "name": "base_vault", + "docs": [ + "Token account that holds the pool's base tokens", + "PDA generated using POOL_VAULT_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "base_mint" + } + ] + } + }, + { + "name": "quote_vault", + "docs": [ + "Token account that holds the pool's quote tokens", + "PDA generated using POOL_VAULT_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "pool_state" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "metadata_account", + "docs": [ + "Account to store the base token's metadata", + "Created using Metaplex metadata program" + ], + "writable": true + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for the quote token" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "metadata_program", + "docs": [ + "Metaplex Token Metadata program", + "Used to create metadata for the base token" + ], + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "rent_program", + "docs": [ + "Required for rent exempt calculations" + ], + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "base_mint_param", + "type": { + "defined": { + "name": "MintParams" + } + } + }, + { + "name": "curve_param", + "type": { + "defined": { + "name": "CurveParams" + } + } + }, + { + "name": "vesting_param", + "type": { + "defined": { + "name": "VestingParams" + } + } + } + ] + }, + { + "name": "migrate_to_amm", + "docs": [ + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 207, + 82, + 192, + 145, + 254, + 207, + 145, + 223 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "Only migrate_to_amm_wallet can migrate to cpswap pool", + "This signer must match the migrate_to_amm_wallet saved in global_config" + ], + "writable": true, + "signer": true + }, + { + "name": "base_mint", + "docs": [ + "The mint for the base token (token being sold)" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint for the quote token (token used to buy)" + ] + }, + { + "name": "openbook_program", + "address": "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX" + }, + { + "name": "market", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "request_queue", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "event_queue", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "bids", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "asks", + "docs": [ + "Account created and asigned to openbook_program but not been initialized" + ], + "writable": true + }, + { + "name": "market_vault_signer" + }, + { + "name": "market_base_vault", + "docs": [ + "Token account that holds the market's base tokens" + ], + "writable": true + }, + { + "name": "market_quote_vault", + "docs": [ + "Token account that holds the market's quote tokens" + ], + "writable": true + }, + { + "name": "amm_program", + "address": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" + }, + { + "name": "amm_pool", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 97, + 109, + 109, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 97, + 109, + 109, + 32, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_open_orders", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 111, + 112, + 101, + 110, + 95, + 111, + 114, + 100, + 101, + 114, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_lp_mint", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 108, + 112, + 95, + 109, + 105, + 110, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_base_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 99, + 111, + 105, + 110, + 95, + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_quote_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 112, + 99, + 95, + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_target_orders", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "amm_program" + }, + { + "kind": "account", + "path": "market" + }, + { + "kind": "const", + "value": [ + 116, + 97, + 114, + 103, + 101, + 116, + 95, + 97, + 115, + 115, + 111, + 99, + 105, + 97, + 116, + 101, + 100, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_config", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 97, + 109, + 109, + 95, + 99, + 111, + 110, + 102, + 105, + 103, + 95, + 97, + 99, + 99, + 111, + 117, + 110, + 116, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "amm_program" + } + } + }, + { + "name": "amm_create_fee_destination", + "writable": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "pool_lp_token", + "writable": true + }, + { + "name": "spl_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "docs": [ + "Program to create an ATA for receiving fee NFT" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "rent_program", + "docs": [ + "Required for rent exempt calculations" + ], + "address": "SysvarRent111111111111111111111111111111111" + } + ], + "args": [ + { + "name": "base_lot_size", + "type": "u64" + }, + { + "name": "quote_lot_size", + "type": "u64" + }, + { + "name": "market_vault_signer_nonce", + "type": "u8" + } + ] + }, + { + "name": "migrate_to_cpswap", + "docs": [ + "# Arguments", + "", + "* `ctx` - The context of accounts", + "" + ], + "discriminator": [ + 136, + 92, + 200, + 103, + 28, + 218, + 144, + 140 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "Only migrate_to_cpswap_wallet can migrate to cpswap pool", + "This signer must match the migrate_to_cpswap_wallet saved in global_config" + ], + "writable": true, + "signer": true + }, + { + "name": "base_mint", + "docs": [ + "The mint for the base token (token being sold)" + ] + }, + { + "name": "quote_mint", + "docs": [ + "The mint for the quote token (token used to buy)" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "cpswap_program", + "address": "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C" + }, + { + "name": "cpswap_pool", + "docs": [ + "PDA account:", + "seeds = [", + "b\"pool\",", + "cpswap_config.key().as_ref(),", + "token_0_mint.key().as_ref(),", + "token_1_mint.key().as_ref(),", + "],", + "seeds::program = cpswap_program,", + "", + "Or random account: must be signed by cli" + ], + "writable": true + }, + { + "name": "cpswap_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 110, + 100, + 95, + 108, + 112, + 95, + 109, + 105, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_lp_mint", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 108, + 112, + 95, + 109, + 105, + 110, + 116 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_base_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + }, + { + "kind": "account", + "path": "base_mint" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_quote_vault", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108, + 95, + 118, + 97, + 117, + 108, + 116 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "cpswap_config" + }, + { + "name": "cpswap_create_pool_fee", + "writable": true + }, + { + "name": "cpswap_observation", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 111, + 98, + 115, + 101, + 114, + 118, + 97, + 116, + 105, + 111, + 110 + ] + }, + { + "kind": "account", + "path": "cpswap_pool" + } + ], + "program": { + "kind": "account", + "path": "cpswap_program" + } + } + }, + { + "name": "lock_program", + "address": "LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE" + }, + { + "name": "lock_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 108, + 111, + 99, + 107, + 95, + 99, + 112, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121, + 95, + 115, + 101, + 101, + 100 + ] + } + ], + "program": { + "kind": "account", + "path": "lock_program" + } + } + }, + { + "name": "lock_lp_vault", + "writable": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "pool_state", + "docs": [ + "Account that stores the pool's state and parameters", + "PDA generated using POOL_SEED and both token mints" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 111, + 111, + 108 + ] + }, + { + "kind": "account", + "path": "base_mint" + }, + { + "kind": "account", + "path": "quote_mint" + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global config account stores owner" + ] + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will be fully drained during migration" + ], + "writable": true + }, + { + "name": "pool_lp_token", + "writable": true + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for the base token", + "Must be the standard Token program" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for the quote token" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "docs": [ + "Program to create an ATA for receiving fee NFT" + ], + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "system_program", + "docs": [ + "Required for account creation" + ], + "address": "11111111111111111111111111111111" + }, + { + "name": "rent_program", + "docs": [ + "Required for rent exempt calculations" + ], + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "metadata_program", + "docs": [ + "Program to create NFT metadata accunt" + ], + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + } + ], + "args": [] + }, + { + "name": "sell_exact_in", + "docs": [ + "Use the given amount of base tokens to sell for quote tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_in` - Amount of base token to sell", + "* `minimum_amount_out` - Minimum amount of quote token to receive (slippage protection)", + "* `share_fee_rate` - Fee rate for the share", + "" + ], + "discriminator": [ + 149, + 39, + 222, + 155, + 211, + 124, + 152, + 26 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "minimum_amount_out", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "sell_exact_out", + "docs": [ + "Sell base tokens for the given amount of quote tokens.", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `amount_out` - Amount of quote token to receive", + "* `maximum_amount_in` - Maximum amount of base token to purchase (slippage protection)", + "* `share_fee_rate` - Fee rate for the share", + "" + ], + "discriminator": [ + 95, + 200, + 71, + 34, + 8, + 9, + 11, + 166 + ], + "accounts": [ + { + "name": "payer", + "docs": [ + "The user performing the swap operation", + "Must sign the transaction and pay for fees" + ], + "signer": true + }, + { + "name": "authority", + "docs": [ + "PDA that acts as the authority for pool vault operations", + "Generated using AUTH_SEED" + ], + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 118, + 97, + 117, + 108, + 116, + 95, + 97, + 117, + 116, + 104, + 95, + 115, + 101, + 101, + 100 + ] + } + ] + } + }, + { + "name": "global_config", + "docs": [ + "Global configuration account containing protocol-wide settings", + "Used to read protocol fee rates and curve type" + ] + }, + { + "name": "platform_config", + "docs": [ + "Platform configuration account containing platform-wide settings", + "Used to read platform fee rate" + ] + }, + { + "name": "pool_state", + "docs": [ + "The pool state account where the swap will be performed", + "Contains current pool parameters and balances" + ], + "writable": true + }, + { + "name": "user_base_token", + "docs": [ + "The user's token account for base tokens (tokens being bought)", + "Will receive the output tokens after the swap" + ], + "writable": true + }, + { + "name": "user_quote_token", + "docs": [ + "The user's token account for quote tokens (tokens being sold)", + "Will be debited for the input amount" + ], + "writable": true + }, + { + "name": "base_vault", + "docs": [ + "The pool's vault for base tokens", + "Will be debited to send tokens to the user" + ], + "writable": true + }, + { + "name": "quote_vault", + "docs": [ + "The pool's vault for quote tokens", + "Will receive the input tokens from the user" + ], + "writable": true + }, + { + "name": "base_token_mint", + "docs": [ + "The mint of the base token", + "Used for transfer fee calculations if applicable" + ] + }, + { + "name": "quote_token_mint", + "docs": [ + "The mint of the quote token" + ] + }, + { + "name": "base_token_program", + "docs": [ + "SPL Token program for base token transfers" + ] + }, + { + "name": "quote_token_program", + "docs": [ + "SPL Token program for quote token transfers" + ], + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "amount_out", + "type": "u64" + }, + { + "name": "maximum_amount_in", + "type": "u64" + }, + { + "name": "share_fee_rate", + "type": "u64" + } + ] + }, + { + "name": "update_config", + "docs": [ + "Updates configuration parameters", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `param` - Parameter to update:", + "- 0: Update trade_fee_rate", + "- 1: Update fee owner", + "* `value` - New value for the selected parameter", + "" + ], + "discriminator": [ + 29, + 158, + 252, + 191, + 10, + 83, + 219, + 99 + ], + "accounts": [ + { + "name": "owner", + "docs": [ + "The global config owner or admin" + ], + "signer": true, + "address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ" + }, + { + "name": "global_config", + "docs": [ + "Global config account to be changed" + ], + "writable": true + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "value", + "type": "u64" + } + ] + }, + { + "name": "update_platform_config", + "docs": [ + "Update platform config", + "# Arguments", + "", + "* `ctx` - The context of accounts", + "* `param` - Parameter to update", + "" + ], + "discriminator": [ + 195, + 60, + 76, + 129, + 146, + 45, + 67, + 143 + ], + "accounts": [ + { + "name": "platform_admin", + "docs": [ + "The account paying for the initialization costs" + ], + "signer": true + }, + { + "name": "platform_config", + "docs": [ + "Platform config account to be changed" + ], + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 112, + 108, + 97, + 116, + 102, + 111, + 114, + 109, + 95, + 99, + 111, + 110, + 102, + 105, + 103 + ] + }, + { + "kind": "account", + "path": "platform_admin" + } + ] + } + } + ], + "args": [ + { + "name": "param", + "type": { + "defined": { + "name": "PlatformConfigParam" + } + } + } + ] + } + ], + "accounts": [ + { + "name": "GlobalConfig", + "discriminator": [ + 149, + 8, + 156, + 202, + 160, + 252, + 176, + 217 + ] + }, + { + "name": "PlatformConfig", + "discriminator": [ + 160, + 78, + 128, + 0, + 248, + 83, + 230, + 160 + ] + }, + { + "name": "PoolState", + "discriminator": [ + 247, + 237, + 227, + 245, + 215, + 195, + 222, + 70 + ] + }, + { + "name": "VestingRecord", + "discriminator": [ + 106, + 243, + 221, + 205, + 230, + 126, + 85, + 83 + ] + } + ], + "events": [ + { + "name": "ClaimVestedEvent", + "discriminator": [ + 21, + 194, + 114, + 87, + 120, + 211, + 226, + 32 + ] + }, + { + "name": "CreateVestingEvent", + "discriminator": [ + 150, + 152, + 11, + 179, + 52, + 210, + 191, + 125 + ] + }, + { + "name": "PoolCreateEvent", + "discriminator": [ + 151, + 215, + 226, + 9, + 118, + 161, + 115, + 174 + ] + }, + { + "name": "TradeEvent", + "discriminator": [ + 189, + 219, + 127, + 211, + 78, + 230, + 97, + 238 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "NotApproved", + "msg": "Not approved" + }, + { + "code": 6001, + "name": "InvalidOwner", + "msg": "Input account owner is not the program address" + }, + { + "code": 6002, + "name": "InvalidInput", + "msg": "InvalidInput" + }, + { + "code": 6003, + "name": "InputNotMatchCurveConfig", + "msg": "The input params are not match with curve type in config" + }, + { + "code": 6004, + "name": "ExceededSlippage", + "msg": "Exceeds desired slippage limit" + }, + { + "code": 6005, + "name": "PoolFunding", + "msg": "Pool funding" + }, + { + "code": 6006, + "name": "PoolMigrated", + "msg": "Pool migrated" + }, + { + "code": 6007, + "name": "MigrateTypeNotMatch", + "msg": "Migrate type not match" + }, + { + "code": 6008, + "name": "MathOverflow", + "msg": "Math overflow" + }, + { + "code": 6009, + "name": "NoAssetsToCollect", + "msg": "No assets to collect" + }, + { + "code": 6010, + "name": "VestingRatioTooHigh", + "msg": "Vesting ratio too high" + }, + { + "code": 6011, + "name": "VestingSettingEnded", + "msg": "Vesting setting ended" + }, + { + "code": 6012, + "name": "VestingNotStarted", + "msg": "Vesting not started" + }, + { + "code": 6013, + "name": "NoVestingSchedule", + "msg": "No vesting schedule" + }, + { + "code": 6014, + "name": "InvalidPlatformInfo", + "msg": "The platform info input is invalid" + }, + { + "code": 6015, + "name": "PoolNotMigrated", + "msg": "Pool not migrated" + } + ], + "types": [ + { + "name": "ClaimVestedEvent", + "docs": [ + "Emitted when vesting token claimed by beneficiary" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "beneficiary", + "type": "pubkey" + }, + { + "name": "claim_amount", + "type": "u64" + } + ] + } + }, + { + "name": "ConstantCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "supply", + "type": "u64" + }, + { + "name": "total_base_sell", + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "type": "u64" + }, + { + "name": "migrate_type", + "type": "u8" + } + ] + } + }, + { + "name": "CreateVestingEvent", + "docs": [ + "Emitted when vest_account created" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "beneficiary", + "type": "pubkey" + }, + { + "name": "share_amount", + "type": "u64" + } + ] + } + }, + { + "name": "CurveParams", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Constant", + "fields": [ + { + "name": "data", + "type": { + "defined": { + "name": "ConstantCurve" + } + } + } + ] + }, + { + "name": "Fixed", + "fields": [ + { + "name": "data", + "type": { + "defined": { + "name": "FixedCurve" + } + } + } + ] + }, + { + "name": "Linear", + "fields": [ + { + "name": "data", + "type": { + "defined": { + "name": "LinearCurve" + } + } + } + ] + } + ] + } + }, + { + "name": "FixedCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "supply", + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "type": "u64" + }, + { + "name": "migrate_type", + "type": "u8" + } + ] + } + }, + { + "name": "GlobalConfig", + "docs": [ + "Holds the current owner of the factory" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "Account update epoch" + ], + "type": "u64" + }, + { + "name": "curve_type", + "docs": [ + "0: Constant Product Curve", + "1: Fixed Price Curve", + "2: Linear Price Curve" + ], + "type": "u8" + }, + { + "name": "index", + "docs": [ + "Config index" + ], + "type": "u16" + }, + { + "name": "migrate_fee", + "docs": [ + "The fee of migrate to amm" + ], + "type": "u64" + }, + { + "name": "trade_fee_rate", + "docs": [ + "The trade fee rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "max_share_fee_rate", + "docs": [ + "The maximum share fee rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_base_supply", + "docs": [ + "The minimum base supply, the value without decimals" + ], + "type": "u64" + }, + { + "name": "max_lock_rate", + "docs": [ + "The maximum lock rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_base_sell_rate", + "docs": [ + "The minimum base sell rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_base_migrate_rate", + "docs": [ + "The minimum base migrate rate, denominated in hundredths of a bip (10^-6)" + ], + "type": "u64" + }, + { + "name": "min_quote_fund_raising", + "docs": [ + "The minimum quote fund raising, the value with decimals" + ], + "type": "u64" + }, + { + "name": "quote_mint", + "docs": [ + "Mint information for quote token" + ], + "type": "pubkey" + }, + { + "name": "protocol_fee_owner", + "docs": [ + "Protocol Fee owner" + ], + "type": "pubkey" + }, + { + "name": "migrate_fee_owner", + "docs": [ + "Migrate Fee owner" + ], + "type": "pubkey" + }, + { + "name": "migrate_to_amm_wallet", + "docs": [ + "Migrate to amm control wallet" + ], + "type": "pubkey" + }, + { + "name": "migrate_to_cpswap_wallet", + "docs": [ + "Migrate to cpswap wallet" + ], + "type": "pubkey" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 16 + ] + } + } + ] + } + }, + { + "name": "LinearCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "supply", + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "type": "u64" + }, + { + "name": "migrate_type", + "type": "u8" + } + ] + } + }, + { + "name": "MigrateNftInfo", + "docs": [ + "Represents the parameters for initializing a platform config account(Only support MigrateType::CPSWAP)", + "# Fields", + "* `platform_scale` - Scale of the platform liquidity quantity rights will be converted into NFT", + "* `creator_scale` - Scale of the token creator liquidity quantity rights will be converted into NFT", + "* `burn_scale` - Scale of liquidity directly to burn", + "", + "* platform_scale + creator_scale + burn_scale = RATE_DENOMINATOR_VALUE" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "platform_scale", + "type": "u64" + }, + { + "name": "creator_scale", + "type": "u64" + }, + { + "name": "burn_scale", + "type": "u64" + } + ] + } + }, + { + "name": "MintParams", + "docs": [ + "Represents the parameters for initializing a new token mint", + "# Fields", + "* `decimals` - Number of decimal places for the token", + "* `name` - Name of the token", + "* `symbol` - Symbol/ticker of the token", + "* `uri` - URI pointing to token metadata" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "decimals", + "type": "u8" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + } + ] + } + }, + { + "name": "PlatformConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "The epoch for update interval" + ], + "type": "u64" + }, + { + "name": "platform_fee_wallet", + "docs": [ + "The platform fee wallet" + ], + "type": "pubkey" + }, + { + "name": "platform_nft_wallet", + "docs": [ + "The platform nft wallet to receive the platform NFT after migration if platform_scale is not 0(Only support MigrateType::CPSWAP)" + ], + "type": "pubkey" + }, + { + "name": "platform_scale", + "docs": [ + "Scale of the platform liquidity quantity rights will be converted into NFT(Only support MigrateType::CPSWAP)" + ], + "type": "u64" + }, + { + "name": "creator_scale", + "docs": [ + "Scale of the token creator liquidity quantity rights will be converted into NFT(Only support MigrateType::CPSWAP)" + ], + "type": "u64" + }, + { + "name": "burn_scale", + "docs": [ + "Scale of liquidity directly to burn" + ], + "type": "u64" + }, + { + "name": "fee_rate", + "docs": [ + "The platform fee rate" + ], + "type": "u64" + }, + { + "name": "name", + "docs": [ + "The platform name" + ], + "type": { + "array": [ + "u8", + 64 + ] + } + }, + { + "name": "web", + "docs": [ + "The platform website" + ], + "type": { + "array": [ + "u8", + 256 + ] + } + }, + { + "name": "img", + "docs": [ + "The platform img link" + ], + "type": { + "array": [ + "u8", + 256 + ] + } + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u8", + 256 + ] + } + } + ] + } + }, + { + "name": "PlatformConfigParam", + "type": { + "kind": "enum", + "variants": [ + { + "name": "FeeWallet", + "fields": [ + "pubkey" + ] + }, + { + "name": "NFTWallet", + "fields": [ + "pubkey" + ] + }, + { + "name": "MigrateNftInfo", + "fields": [ + { + "defined": { + "name": "MigrateNftInfo" + } + } + ] + }, + { + "name": "FeeRate", + "fields": [ + "u64" + ] + }, + { + "name": "Name", + "fields": [ + "string" + ] + }, + { + "name": "Web", + "fields": [ + "string" + ] + }, + { + "name": "Img", + "fields": [ + "string" + ] + } + ] + } + }, + { + "name": "PlatformParams", + "docs": [ + "Represents the parameters for initializing a platform config account", + "# Fields", + "* `migrate_nft_info` - The platform configures liquidity info during migration(Only support MigrateType::CPSWAP)", + "* `fee_rate` - Fee rate of the platform", + "* `name` - Name of the platform", + "* `web` - Website of the platform", + "* `img` - Image link of the platform" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "migrate_nft_info", + "type": { + "defined": { + "name": "MigrateNftInfo" + } + } + }, + { + "name": "fee_rate", + "type": "u64" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "web", + "type": "string" + }, + { + "name": "img", + "type": "string" + } + ] + } + }, + { + "name": "PoolCreateEvent", + "docs": [ + "Emitted when pool created" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "creator", + "type": "pubkey" + }, + { + "name": "config", + "type": "pubkey" + }, + { + "name": "base_mint_param", + "type": { + "defined": { + "name": "MintParams" + } + } + }, + { + "name": "curve_param", + "type": { + "defined": { + "name": "CurveParams" + } + } + }, + { + "name": "vesting_param", + "type": { + "defined": { + "name": "VestingParams" + } + } + } + ] + } + }, + { + "name": "PoolState", + "docs": [ + "Represents the state of a trading pool in the protocol", + "Stores all essential information about pool balances, fees, and configuration" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "Account update epoch" + ], + "type": "u64" + }, + { + "name": "auth_bump", + "docs": [ + "Bump seed used for PDA address derivation" + ], + "type": "u8" + }, + { + "name": "status", + "docs": [ + "Current status of the pool", + "* 0: Pool is funding", + "* 1: Pool funding is end, waiting for migration", + "* 2: Pool migration is done" + ], + "type": "u8" + }, + { + "name": "base_decimals", + "docs": [ + "Decimals of the pool base token" + ], + "type": "u8" + }, + { + "name": "quote_decimals", + "docs": [ + "Decimals of the pool quote token" + ], + "type": "u8" + }, + { + "name": "migrate_type", + "docs": [ + "Migrate to AMM or CpSwap" + ], + "type": "u8" + }, + { + "name": "supply", + "docs": [ + "Supply of the pool base token" + ], + "type": "u64" + }, + { + "name": "total_base_sell", + "docs": [ + "Total sell amount of the base token" + ], + "type": "u64" + }, + { + "name": "virtual_base", + "docs": [ + "For different curves, virtual_base and virtual_quote have different meanings", + "For constant product curve, virtual_base and virtual_quote are virtual liquidity, virtual_quote/virtual_base is the initial price", + "For linear price curve, virtual_base is the price slope parameter a, virtual_quote has no effect", + "For fixed price curve, virtual_quote/virtual_base is the initial price" + ], + "type": "u64" + }, + { + "name": "virtual_quote", + "type": "u64" + }, + { + "name": "real_base", + "docs": [ + "Actual base token amount in the pool", + "Represents the real tokens available for trading" + ], + "type": "u64" + }, + { + "name": "real_quote", + "docs": [ + "Actual quote token amount in the pool", + "Represents the real tokens available for trading" + ], + "type": "u64" + }, + { + "name": "total_quote_fund_raising", + "docs": [ + "The total quote fund raising of the pool" + ], + "type": "u64" + }, + { + "name": "quote_protocol_fee", + "docs": [ + "Accumulated trading fees in quote tokens", + "Can be collected by the protocol fee owner" + ], + "type": "u64" + }, + { + "name": "platform_fee", + "docs": [ + "Accumulated platform fees in quote tokens", + "Can be collected by the platform wallet stored in platform config" + ], + "type": "u64" + }, + { + "name": "migrate_fee", + "docs": [ + "The fee of migrate to amm" + ], + "type": "u64" + }, + { + "name": "vesting_schedule", + "docs": [ + "Vesting schedule for the base token" + ], + "type": { + "defined": { + "name": "VestingSchedule" + } + } + }, + { + "name": "global_config", + "docs": [ + "Public key of the global configuration account", + "Contains protocol-wide settings this pool adheres to" + ], + "type": "pubkey" + }, + { + "name": "platform_config", + "docs": [ + "Public key of the platform configuration account", + "Contains platform-wide settings this pool adheres to" + ], + "type": "pubkey" + }, + { + "name": "base_mint", + "docs": [ + "Public key of the base mint address" + ], + "type": "pubkey" + }, + { + "name": "quote_mint", + "docs": [ + "Public key of the quote mint address" + ], + "type": "pubkey" + }, + { + "name": "base_vault", + "docs": [ + "Public key of the base token vault", + "Holds the actual base tokens owned by the pool" + ], + "type": "pubkey" + }, + { + "name": "quote_vault", + "docs": [ + "Public key of the quote token vault", + "Holds the actual quote tokens owned by the pool" + ], + "type": "pubkey" + }, + { + "name": "creator", + "docs": [ + "The creator of base token" + ], + "type": "pubkey" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 8 + ] + } + } + ] + } + }, + { + "name": "PoolStatus", + "docs": [ + "Represents the different states a pool can be in", + "* Fund - Initial state where pool is accepting funds", + "* Migrate - Pool funding has ended and waiting for migration", + "* Trade - Pool migration is complete and amm trading is enabled" + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "Fund" + }, + { + "name": "Migrate" + }, + { + "name": "Trade" + } + ] + } + }, + { + "name": "TradeDirection", + "docs": [ + "Specifies the direction of a trade in the bonding curve", + "This is important because curves can treat tokens differently through weights or offsets" + ], + "type": { + "kind": "enum", + "variants": [ + { + "name": "Buy" + }, + { + "name": "Sell" + } + ] + } + }, + { + "name": "TradeEvent", + "docs": [ + "Emitted when trade process" + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pool_state", + "type": "pubkey" + }, + { + "name": "total_base_sell", + "type": "u64" + }, + { + "name": "virtual_base", + "type": "u64" + }, + { + "name": "virtual_quote", + "type": "u64" + }, + { + "name": "real_base_before", + "type": "u64" + }, + { + "name": "real_quote_before", + "type": "u64" + }, + { + "name": "real_base_after", + "type": "u64" + }, + { + "name": "real_quote_after", + "type": "u64" + }, + { + "name": "amount_in", + "type": "u64" + }, + { + "name": "amount_out", + "type": "u64" + }, + { + "name": "protocol_fee", + "type": "u64" + }, + { + "name": "platform_fee", + "type": "u64" + }, + { + "name": "share_fee", + "type": "u64" + }, + { + "name": "trade_direction", + "type": { + "defined": { + "name": "TradeDirection" + } + } + }, + { + "name": "pool_status", + "type": { + "defined": { + "name": "PoolStatus" + } + } + } + ] + } + }, + { + "name": "VestingParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_locked_amount", + "type": "u64" + }, + { + "name": "cliff_period", + "type": "u64" + }, + { + "name": "unlock_period", + "type": "u64" + } + ] + } + }, + { + "name": "VestingRecord", + "type": { + "kind": "struct", + "fields": [ + { + "name": "epoch", + "docs": [ + "Account update epoch" + ], + "type": "u64" + }, + { + "name": "pool", + "docs": [ + "The pool state account" + ], + "type": "pubkey" + }, + { + "name": "beneficiary", + "docs": [ + "The beneficiary of the vesting account" + ], + "type": "pubkey" + }, + { + "name": "claimed_amount", + "docs": [ + "The amount of tokens claimed" + ], + "type": "u64" + }, + { + "name": "token_share_amount", + "docs": [ + "The share amount of the token to be vested" + ], + "type": "u64" + }, + { + "name": "padding", + "docs": [ + "padding for future updates" + ], + "type": { + "array": [ + "u64", + 8 + ] + } + } + ] + } + }, + { + "name": "VestingSchedule", + "type": { + "kind": "struct", + "fields": [ + { + "name": "total_locked_amount", + "type": "u64" + }, + { + "name": "cliff_period", + "type": "u64" + }, + { + "name": "unlock_period", + "type": "u64" + }, + { + "name": "start_time", + "type": "u64" + }, + { + "name": "allocated_share_amount", + "docs": [ + "Total allocated share amount of the base token, not greater than total_locked_amount" + ], + "type": "u64" + } + ] + } + } + ] + } \ No newline at end of file diff --git a/2_copy trading bot(node) using gRPC/services/notifications.js b/2_copy trading bot(node) using gRPC/services/notifications.js new file mode 100644 index 0000000..b7b0c27 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/services/notifications.js @@ -0,0 +1,327 @@ +import TelegramBot from 'node-telegram-bot-api'; +import nodemailer from 'nodemailer'; +import axios from 'axios'; +import { config } from '../config.js'; +import logger from '../utils/logger.js'; + +class NotificationService { + constructor() { + this.telegramBot = null; + this.emailTransporter = null; + this.initializeServices(); + } + + initializeServices() { + // Initialize Telegram bot + if (config.notifications.telegram.botToken && config.notifications.telegram.chatId) { + try { + this.telegramBot = new TelegramBot(config.notifications.telegram.botToken, { polling: false }); + logger.info('Telegram bot initialized successfully'); + } catch (error) { + logger.error('Failed to initialize Telegram bot', error); + } + } + + // Initialize email transporter + if (config.notifications.email.host && config.notifications.email.user && config.notifications.email.pass) { + try { + this.emailTransporter = nodemailer.createTransporter({ + host: config.notifications.email.host, + port: config.notifications.email.port, + secure: false, + auth: { + user: config.notifications.email.user, + pass: config.notifications.email.pass, + }, + }); + logger.info('Email service initialized successfully'); + } catch (error) { + logger.error('Failed to initialize email service', error); + } + } + } + + // Send notification to all configured services + async sendNotification(message, type = 'info', data = {}) { + const promises = []; + + // Send to Telegram + if (this.telegramBot) { + promises.push(this.sendTelegramMessage(message, type, data)); + } + + // Send to Discord + if (config.notifications.discord.webhookUrl) { + promises.push(this.sendDiscordMessage(message, type, data)); + } + + // Send to Email for important notifications + if (this.emailTransporter && ['error', 'warning', 'trade', 'profit', 'loss'].includes(type)) { + promises.push(this.sendEmail(message, type, data)); + } + + try { + await Promise.allSettled(promises); + } catch (error) { + logger.error('Error sending notifications', error); + } + } + + // Telegram notifications + async sendTelegramMessage(message, type = 'info', data = {}) { + if (!this.telegramBot) return; + + try { + const emoji = this.getEmojiForType(type); + const formattedMessage = this.formatTelegramMessage(message, type, data); + + await this.telegramBot.sendMessage(config.notifications.telegram.chatId, formattedMessage, { + parse_mode: 'HTML', + disable_web_page_preview: true, + }); + + logger.debug('Telegram message sent successfully'); + } catch (error) { + logger.error('Failed to send Telegram message', error); + } + } + + // Discord notifications + async sendDiscordMessage(message, type = 'info', data = {}) { + if (!config.notifications.discord.webhookUrl) return; + + try { + const embed = this.createDiscordEmbed(message, type, data); + + await axios.post(config.notifications.discord.webhookUrl, { + embeds: [embed], + }); + + logger.debug('Discord message sent successfully'); + } catch (error) { + logger.error('Failed to send Discord message', error); + } + } + + // Email notifications + async sendEmail(message, type = 'info', data = {}) { + if (!this.emailTransporter) return; + + try { + const subject = `Solana Trading Bot - ${type.toUpperCase()}`; + const htmlContent = this.formatEmailMessage(message, type, data); + + await this.emailTransporter.sendMail({ + from: config.notifications.email.user, + to: config.notifications.email.user, // Send to self + subject, + html: htmlContent, + }); + + logger.debug('Email sent successfully'); + } catch (error) { + logger.error('Failed to send email', error); + } + } + + // Trade-specific notifications + async notifyTradeExecution(tradeType, tokenMint, amount, price, txHash) { + const message = `${tradeType.toUpperCase()} executed for ${tokenMint}`; + const data = { + tradeType, + tokenMint, + amount, + price, + txHash, + timestamp: new Date().toISOString(), + }; + + await this.sendNotification(message, 'trade', data); + } + + async notifyProfitTarget(tokenMint, profitRatio, amount) { + const message = `🎯 Profit target reached for ${tokenMint}: ${profitRatio.toFixed(2)}x`; + const data = { + tokenMint, + profitRatio, + amount, + timestamp: new Date().toISOString(), + }; + + await this.sendNotification(message, 'profit', data); + } + + async notifyStopLoss(tokenMint, lossRatio, amount) { + const message = `🛑 Stop loss triggered for ${tokenMint}: ${lossRatio.toFixed(2)}x`; + const data = { + tokenMint, + lossRatio, + amount, + timestamp: new Date().toISOString(), + }; + + await this.sendNotification(message, 'loss', data); + } + + async notifyPositionUpdate(action, mint, details) { + const message = `Position ${action}: ${mint}`; + const data = { + action, + mint, + details, + timestamp: new Date().toISOString(), + }; + + await this.sendNotification(message, 'info', data); + } + + async notifyError(error, context = '') { + const message = `Error in ${context}: ${error.message}`; + const data = { + error: error.stack, + context, + timestamp: new Date().toISOString(), + }; + + await this.sendNotification(message, 'error', data); + } + + async notifyBotStatus(status, details = {}) { + const message = `Bot Status: ${status}`; + const data = { + status, + details, + timestamp: new Date().toISOString(), + }; + + await this.sendNotification(message, 'info', data); + } + + // Helper methods + getEmojiForType(type) { + const emojis = { + info: 'ℹ️', + success: '✅', + warning: '⚠️', + error: '❌', + trade: '💰', + profit: '📈', + loss: '📉', + }; + return emojis[type] || '📝'; + } + + formatTelegramMessage(message, type, data) { + let formattedMessage = `${this.getEmojiForType(type)} ${type.toUpperCase()}\n\n`; + formattedMessage += `${message}\n\n`; + + if (data.timestamp) { + formattedMessage += `⏰ ${new Date(data.timestamp).toLocaleString()}\n`; + } + + if (data.txHash) { + formattedMessage += `🔗 View Transaction\n`; + } + + if (data.tokenMint) { + formattedMessage += `🪙 View Token\n`; + } + + return formattedMessage; + } + + createDiscordEmbed(message, type, data) { + const colors = { + info: 0x0099ff, + success: 0x00ff00, + warning: 0xffff00, + error: 0xff0000, + trade: 0x00ffff, + profit: 0x00ff00, + loss: 0xff0000, + }; + + const embed = { + title: `${this.getEmojiForType(type)} ${type.toUpperCase()}`, + description: message, + color: colors[type] || 0x0099ff, + timestamp: new Date().toISOString(), + fields: [], + }; + + if (data.txHash) { + embed.fields.push({ + name: 'Transaction', + value: `[View on Solscan](https://solscan.io/tx/${data.txHash})`, + inline: true, + }); + } + + if (data.tokenMint) { + embed.fields.push({ + name: 'Token', + value: `[View on Solscan](https://solscan.io/token/${data.tokenMint})`, + inline: true, + }); + } + + if (data.profitRatio) { + embed.fields.push({ + name: 'Profit Ratio', + value: `${data.profitRatio.toFixed(2)}x`, + inline: true, + }); + } + + return embed; + } + + formatEmailMessage(message, type, data) { + let html = ` + + + + + +
+

Solana Trading Bot Notification

+

Type: ${type.toUpperCase()}

+

Time: ${new Date().toLocaleString()}

+
+ +
+

${message}

+ `; + + if (data.txHash) { + html += `

Transaction: View on Solscan

`; + } + + if (data.tokenMint) { + html += `

Token: View on Solscan

`; + } + + html += ` +
+ + + + + `; + + return html; + } +} + +// Create singleton instance +const notificationService = new NotificationService(); + +export default notificationService; diff --git a/2_copy trading bot(node) using gRPC/services/riskManager.js b/2_copy trading bot(node) using gRPC/services/riskManager.js new file mode 100644 index 0000000..30d0c3e --- /dev/null +++ b/2_copy trading bot(node) using gRPC/services/riskManager.js @@ -0,0 +1,413 @@ +import { config } from '../config.js'; +import logger from '../utils/logger.js'; +import notificationService from './notifications.js'; + +class RiskManager { + constructor() { + this.dailyStats = { + totalTrades: 0, + profitableTrades: 0, + losingTrades: 0, + totalProfit: 0, + totalLoss: 0, + netPnL: 0, + startTime: new Date(), + }; + + this.activePositions = new Map(); + this.tradeHistory = []; + this.lastTradeTime = 0; + + // Reset daily stats at midnight + this.scheduleDailyReset(); + } + + // Check if a new trade is allowed + canExecuteTrade(amount, tokenMint) { + const now = Date.now(); + const errors = []; + + // Check daily loss limit + if (this.dailyStats.netPnL <= -config.risk.maxDailyLoss) { + errors.push(`Daily loss limit reached: ${this.dailyStats.netPnL.toFixed(4)} SOL`); + } + + // Check single trade loss limit + if (amount > config.risk.maxSingleLoss) { + errors.push(`Trade amount ${amount} SOL exceeds single trade limit ${config.risk.maxSingleLoss} SOL`); + } + + // Check position limit + if (this.activePositions.size >= config.trading.maxPositions) { + errors.push(`Maximum positions limit reached: ${this.activePositions.size}/${config.trading.maxPositions}`); + } + + // Check cooldown period + if (now - this.lastTradeTime < config.risk.tradeCooldown) { + const remainingCooldown = config.risk.tradeCooldown - (now - this.lastTradeTime); + errors.push(`Trade cooldown active: ${Math.ceil(remainingCooldown / 1000)}s remaining`); + } + + // Check if token is already in active positions + if (this.activePositions.has(tokenMint)) { + errors.push(`Token ${tokenMint} already has an active position`); + } + + if (errors.length > 0) { + logger.warn('Trade blocked by risk manager', { errors, amount, tokenMint }); + return { allowed: false, errors }; + } + + return { allowed: true, errors: [] }; + } + + // Record a new trade + recordTrade(tradeType, tokenMint, amount, price, txHash) { + const now = Date.now(); + this.lastTradeTime = now; + + const trade = { + id: `${tokenMint}-${now}`, + type: tradeType, + tokenMint, + amount, + price, + txHash, + timestamp: now, + status: 'pending', + }; + + if (tradeType === 'buy') { + this.activePositions.set(tokenMint, { + entryPrice: price, + entryAmount: amount, + entryTime: now, + entryValue: amount * price, + currentPrice: price, + tradeId: trade.id, + }); + + logger.info(`Position opened: ${tokenMint}`, { + entryPrice: price, + entryAmount: amount, + entryValue: amount * price, + }); + + notificationService.notifyPositionUpdate('opened', tokenMint, { + entryPrice: price, + entryAmount: amount, + entryValue: amount * price, + }); + } else if (tradeType === 'sell') { + const position = this.activePositions.get(tokenMint); + if (position) { + const exitValue = amount * price; + const pnl = exitValue - position.entryValue; + const pnlRatio = exitValue / position.entryValue; + + trade.pnl = pnl; + trade.pnlRatio = pnlRatio; + trade.entryPrice = position.entryPrice; + trade.entryValue = position.entryValue; + + // Update daily stats + this.updateDailyStats(pnl, pnlRatio > 1); + + // Remove from active positions + this.activePositions.delete(tokenMint); + + logger.info(`Position closed: ${tokenMint}`, { + pnl, + pnlRatio: pnlRatio.toFixed(2), + entryPrice: position.entryPrice, + exitPrice: price, + }); + + // Send appropriate notification + if (pnlRatio >= config.trading.profitTarget) { + notificationService.notifyProfitTarget(tokenMint, pnlRatio, amount); + } else if (pnlRatio <= config.trading.stopLoss) { + notificationService.notifyStopLoss(tokenMint, pnlRatio, amount); + } else { + notificationService.notifyPositionUpdate('closed', tokenMint, { + pnl, + pnlRatio: pnlRatio.toFixed(2), + reason: 'manual', + }); + } + } + } + + this.tradeHistory.push(trade); + logger.debug('Trade recorded', trade); + + return trade; + } + + // Update position price + updatePositionPrice(tokenMint, newPrice) { + const position = this.activePositions.get(tokenMint); + if (position) { + position.currentPrice = newPrice; + position.currentValue = position.entryAmount * newPrice; + position.pnl = position.currentValue - position.entryValue; + position.pnlRatio = position.currentValue / position.entryValue; + } + } + + // Check if position should be closed based on risk parameters + shouldClosePosition(tokenMint) { + const position = this.activePositions.get(tokenMint); + if (!position) return { shouldClose: false, reason: null }; + + const now = Date.now(); + const holdTime = now - position.entryTime; + + // Check profit target + if (position.pnlRatio >= config.trading.profitTarget) { + return { shouldClose: true, reason: 'profit_target', pnlRatio: position.pnlRatio }; + } + + // Check stop loss + if (position.pnlRatio <= config.trading.stopLoss) { + return { shouldClose: true, reason: 'stop_loss', pnlRatio: position.pnlRatio }; + } + + // Check max hold time + if (holdTime >= config.trading.maxHoldTime) { + return { shouldClose: true, reason: 'max_hold_time', holdTime }; + } + + return { shouldClose: false, reason: null }; + } + + // Get position information + getPosition(tokenMint) { + return this.activePositions.get(tokenMint); + } + + // Get all active positions + getActivePositions() { + return Array.from(this.activePositions.entries()).map(([mint, position]) => ({ + mint, + ...position, + holdTime: Date.now() - position.entryTime, + })); + } + + // Get position summary + getPositionSummary() { + const positions = this.getActivePositions(); + const totalValue = positions.reduce((sum, pos) => sum + pos.currentValue, 0); + const totalPnL = positions.reduce((sum, pos) => sum + pos.pnl, 0); + + return { + activePositions: positions.length, + totalValue, + totalPnL, + averagePnL: positions.length > 0 ? totalPnL / positions.length : 0, + }; + } + + // Get daily statistics + getDailyStats() { + const now = new Date(); + const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + const uptime = now - this.dailyStats.startTime; + + return { + ...this.dailyStats, + uptime, + winRate: this.dailyStats.totalTrades > 0 + ? (this.dailyStats.profitableTrades / this.dailyStats.totalTrades * 100).toFixed(2) + : 0, + averageProfit: this.dailyStats.profitableTrades > 0 + ? this.dailyStats.totalProfit / this.dailyStats.profitableTrades + : 0, + averageLoss: this.dailyStats.losingTrades > 0 + ? this.dailyStats.totalLoss / this.dailyStats.losingTrades + : 0, + }; + } + + // Update daily statistics + updateDailyStats(pnl, isProfitable) { + this.dailyStats.totalTrades++; + + if (isProfitable) { + this.dailyStats.profitableTrades++; + this.dailyStats.totalProfit += pnl; + } else { + this.dailyStats.losingTrades++; + this.dailyStats.totalLoss += Math.abs(pnl); + } + + this.dailyStats.netPnL += pnl; + + // Log daily stats update + logger.debug('Daily stats updated', { + totalTrades: this.dailyStats.totalTrades, + netPnL: this.dailyStats.netPnL.toFixed(4), + }); + + // Check if daily loss limit is approaching + if (this.dailyStats.netPnL <= -config.risk.maxDailyLoss * 0.8) { + notificationService.sendNotification( + `⚠️ Daily loss limit approaching: ${this.dailyStats.netPnL.toFixed(4)} SOL`, + 'warning', + { dailyStats: this.dailyStats } + ); + } + } + + // Reset daily statistics + resetDailyStats() { + const previousStats = { ...this.dailyStats }; + + this.dailyStats = { + totalTrades: 0, + profitableTrades: 0, + losingTrades: 0, + totalProfit: 0, + totalLoss: 0, + netPnL: 0, + startTime: new Date(), + }; + + logger.info('Daily stats reset', { previousStats }); + notificationService.sendNotification( + `📊 Daily trading session ended. Net PnL: ${previousStats.netPnL.toFixed(4)} SOL`, + 'info', + { previousStats } + ); + } + + // Schedule daily reset at midnight + scheduleDailyReset() { + const now = new Date(); + const tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1); + const timeUntilMidnight = tomorrow - now; + + setTimeout(() => { + this.resetDailyStats(); + // Schedule next reset + this.scheduleDailyReset(); + }, timeUntilMidnight); + } + + // Emergency close all positions + async emergencyCloseAll(reason = 'emergency') { + logger.warn('Emergency closing all positions', { reason }); + + const positions = Array.from(this.activePositions.keys()); + const results = []; + + for (const mint of positions) { + try { + const position = this.activePositions.get(mint); + if (position) { + // Mark position for emergency closure + position.emergencyClose = true; + position.emergencyReason = reason; + + results.push({ + mint, + status: 'marked_for_closure', + reason, + }); + } + } catch (error) { + logger.error('Error marking position for emergency closure', { mint, error }); + results.push({ + mint, + status: 'error', + error: error.message, + }); + } + } + + notificationService.sendNotification( + `🚨 Emergency closure initiated for ${positions.length} positions`, + 'warning', + { reason, results } + ); + + return results; + } + + // Get risk metrics + getRiskMetrics() { + const dailyStats = this.getDailyStats(); + const positionSummary = this.getPositionSummary(); + + return { + dailyStats, + positionSummary, + riskLevel: this.calculateRiskLevel(), + recommendations: this.getRiskRecommendations(), + }; + } + + // Calculate overall risk level + calculateRiskLevel() { + const dailyStats = this.getDailyStats(); + const positionSummary = this.getPositionSummary(); + + let riskScore = 0; + + // Daily loss proximity + if (dailyStats.netPnL <= -config.risk.maxDailyLoss * 0.9) { + riskScore += 30; + } else if (dailyStats.netPnL <= -config.risk.maxDailyLoss * 0.7) { + riskScore += 20; + } else if (dailyStats.netPnL <= -config.risk.maxDailyLoss * 0.5) { + riskScore += 10; + } + + // Position concentration + if (positionSummary.activePositions >= config.trading.maxPositions * 0.8) { + riskScore += 20; + } + + // Win rate + if (dailyStats.winRate < 30) { + riskScore += 25; + } else if (dailyStats.winRate < 50) { + riskScore += 15; + } + + if (riskScore >= 60) return 'HIGH'; + if (riskScore >= 30) return 'MEDIUM'; + return 'LOW'; + } + + // Get risk recommendations + getRiskRecommendations() { + const recommendations = []; + const dailyStats = this.getDailyStats(); + const positionSummary = this.getPositionSummary(); + + if (dailyStats.netPnL <= -config.risk.maxDailyLoss * 0.8) { + recommendations.push('Consider reducing position sizes or stopping trading for the day'); + } + + if (positionSummary.activePositions >= config.trading.maxPositions * 0.8) { + recommendations.push('Approaching maximum position limit - consider closing some positions'); + } + + if (dailyStats.winRate < 40) { + recommendations.push('Low win rate - review trading strategy and risk parameters'); + } + + if (positionSummary.totalPnL < 0) { + recommendations.push('Overall portfolio in loss - consider implementing stricter stop losses'); + } + + return recommendations; + } +} + +// Create singleton instance +const riskManager = new RiskManager(); + +export default riskManager; diff --git a/2_copy trading bot(node) using gRPC/swap(offchain).js b/2_copy trading bot(node) using gRPC/swap(offchain).js new file mode 100644 index 0000000..f229c31 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/swap(offchain).js @@ -0,0 +1,7 @@ +// This module provides an offchain swap function using an IDL (Interface Definition Language) specification. +// It assumes you have a gRPC client generated from the IDL and a wallet/signer available. + +export async function offchainSwap({ fromToken, toToken, amount, walletAddress }) { + //#========📞📞contact to dev📞📞============// + +} diff --git a/2_copy trading bot(node) using gRPC/swap.js b/2_copy trading bot(node) using gRPC/swap.js new file mode 100644 index 0000000..e0725c6 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/swap.js @@ -0,0 +1,307 @@ +import axios from "axios"; +import { Keypair, Connection, LAMPORTS_PER_SOL, VersionedTransaction, SystemProgram, PublicKey, TransactionMessage, sendAndConfirmRawTransaction } from "@solana/web3.js"; +import * as anchor from "@coral-xyz/anchor"; +import { readFile } from "fs/promises"; +import { Wallet } from "@project-serum/anchor"; +import dotenv from "dotenv"; +import chalk from "chalk"; +import fs from "fs"; +import path from "path"; +import bs58 from "bs58"; +import { getSplTokenBalance } from "./fuc.js"; + +dotenv.config(); + +// SWAP_METHOD: "0slot", "nozomi", "race", "solana" +const SWAP_METHOD = (process.env.SWAP_METHOD || "solana").toLowerCase(); + +const NOZOMI_URL = process.env.NOZOMI_URL; +const NOZOMI_UUID = process.env.NOZOMI_UUID; +const nozomiConnection = new Connection(`${NOZOMI_URL}?c=${NOZOMI_UUID}`); + +const NOZOMI_TIP_LAMPORTS = Number(process.env.NOZOMI_TIP_LAMPORTS || 200000); +const JITO_TIP_LAMPORTS = Number(process.env.JITO_TIP || 100000); +const PRIORITIZATION_FEE_LAMPORTS = Number(process.env.PRIORITIZATION_FEE_LAMPORTS || 10000); + +const NOZOMI_TIP_ADDRESS = new PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq"); + +export const MAX_RETRIES = parseInt(process.env.MAX_RETRIES) || 3; + +export const decodePrivateKey = (secretKeyString) =>{ + try { + // Try base58 first + return bs58.decode(secretKeyString); + } catch (error) { + try { + // Try base64 + return Buffer.from(secretKeyString, 'base64'); + } catch (base64Error) { + try { + // Try JSON array (for array format) + const jsonArray = JSON.parse(secretKeyString); + return new Uint8Array(jsonArray); + } catch (jsonError) { + throw new Error('Invalid private key format. Supported formats: base58, base64, or JSON array'); + } + } + } +} + +export const loadwallet = async () => { + const privateKey = process.env.PRIVATE_KEY; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in environment variables"); + } + try { + const privateKeyBytes=decodePrivateKey(privateKey) + const keypair = Keypair.fromSecretKey(privateKeyBytes); + + if (!keypair) { + throw new Error("Failed to create Keypair from the provided private key"); + } + + const wallet = new Wallet(keypair); + wallet.keypair = keypair; + return wallet; + } catch (error) { + console.error("Error loading wallet:", error); + throw error; + } +}; + +export const rpc_connection = () => { + return new Connection(process.env.RPC_URL, "confirmed"); +}; + +export const getBalance = async () => { + const connection = rpc_connection(); + const walletInstance = await loadwallet(); + const balance = await connection.getBalance(walletInstance.publicKey); + + console.log(`Balance =>`, balance / LAMPORTS_PER_SOL, "SOL"); + return balance / LAMPORTS_PER_SOL; +}; + +// const quoteResponse = await ( +// await fetch( +// `https://lite-api.jup.ag/swap/v1/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=${this.mint.toString()}&amount=${this.buy_amount}&slippageBps=4000&restrictIntermediateTokens=true` +// ) +// ).json(); +// const swapResponse = await ( +// await fetch('https://lite-api.jup.ag/swap/v1/swap', { +// method: 'POST', +// headers: { +// 'Content-Type': 'application/json', +// }, +// body: JSON.stringify({ +// quoteResponse, +// userPublicKey: wallet.publicKey, +// dynamicComputeUnitLimit: true, +// dynamicSlippage: true, +// prioritizationFeeLamports: { +// priorityLevelWithMaxLamports: { +// maxLamports: 4000, +// priorityLevel: "high" +// } +// } +// }) +// }) +// ).json(); +// const transactionBase64 = swapResponse.swapTransaction +// const transaction = VersionedTransaction.deserialize(Buffer.from(transactionBase64, 'base64')); +// transaction.sign([wallet]); +// await sendAndConfirmRawTransaction( +// this.instantConnection, +// Buffer.from(transaction.serialize()), +// { skipPreflight: true, maxRetries: 5 } +// ) + + + +const getResponse = async (tokenA, tokenB, amount, slippageBps, anchorWallet) => { + const quoteResponse = ( + await axios.get( + `https://lite-api.jup.ag/swap/v1/quote?inputMint=${tokenA}&outputMint=${tokenB}&amount=${amount}&slippageBps=${slippageBps}` + ) + ).data; + + // Build swap request body based on SWAP_METHOD + let swapRequestBody = { + quoteResponse, + userPublicKey: anchorWallet.publicKey.toString(), + wrapAndUnwrapSol: true, + dynamicComputeUnitLimit: true, + + }; + + // Map SWAP_METHOD string to behavior + if (SWAP_METHOD === "solana" || SWAP_METHOD === "0slot") { + // Standard prioritization fee + swapRequestBody.prioritizationFeeLamports = PRIORITIZATION_FEE_LAMPORTS; + } else if (SWAP_METHOD === "race") { + // JITO tip + swapRequestBody.prioritizationFeeLamports = { jitoTipLamports: JITO_TIP_LAMPORTS }; + } + // "nozomi" handled in executeTransaction + + const swapResponse = await axios.post(`https://lite-api.jup.ag/swap/v1/swap`, swapRequestBody); + return swapResponse; +}; + +const executeTransaction = async (connection, swapTransaction, anchorWallet) => { + try { + if (!anchorWallet?.keypair) { + throw new Error("Invalid anchorWallet: keypair is undefined"); + } + + + const transaction = VersionedTransaction.deserialize(Buffer.from(swapTransaction, "base64")); + transaction.sign([anchorWallet.keypair]); + + let newMessage, newTransaction, rawTransaction, txid, timestart; + + if (SWAP_METHOD === "nozomi") { + console.log("Nozomi response: send via nozomi connection"); + let blockhash = await connection.getLatestBlockhash(); + let message = transaction.message; + let addressLookupTableAccounts = await loadAddressLookupTablesFromMessage(message, connection); + let txMessage = TransactionMessage.decompile(message, { addressLookupTableAccounts }); + // Add Nozomi tip instruction + let nozomiTipIx = SystemProgram.transfer({ + fromPubkey: anchorWallet.publicKey, + toPubkey: NOZOMI_TIP_ADDRESS, + lamports: NOZOMI_TIP_LAMPORTS, + }); + txMessage.instructions.push(nozomiTipIx); + + newMessage = txMessage.compileToV0Message(addressLookupTableAccounts); + newMessage.recentBlockhash = blockhash.blockhash; + + newTransaction = new VersionedTransaction(newMessage); + newTransaction.sign([anchorWallet.keypair]); + + rawTransaction = newTransaction.serialize(); + timestart = Date.now(); + txid = await nozomiConnection.sendRawTransaction(rawTransaction, { + skipPreflight: false, + maxRetries: 2, + }); + + console.log("Nozomi response: txid: %s", txid); + } else { + console.log("Standard/JITO/0slot/solana/race: send via normal connection"); + // Standard/JITO/0slot/solana/race: send via normal connection + const currentUTC = new Date(); + rawTransaction = transaction.serialize(); + timestart = Date.now(); + txid = await sendAndConfirmRawTransaction(connection, Buffer.from(rawTransaction), { + skipPreflight: true, + maxRetries: 1, + }); + + + console.log("Standard/JITO/0slot/solana/race response: txid: %s", txid); + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ confirm time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + return txid; + } + + } catch (error) { + console.error("Transaction execution error:", error); + console.log(chalk.red("Transaction reconfirm after 1s!")); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +}; + +async function loadAddressLookupTablesFromMessage(message, connection) { + let addressLookupTableAccounts = []; + for (let lookup of message.addressTableLookups) { + let lutAccounts = await connection.getAddressLookupTable(lookup.accountKey); + addressLookupTableAccounts.push(lutAccounts.value); + } + return addressLookupTableAccounts; +} + + +export const swap = async (action, mint, amount) => { + const SOL_ADDRESS = "So11111111111111111111111111111111111111112"; + const RETRY_DELAY = Number(process.env.RETRY_DELAY) || 1000; // fallback to 1s if not set + + try { + const connection = rpc_connection(); + const wallet = await loadwallet(); + + // Determine tokenA and tokenB based on action and mint + let tokenA, tokenB; + if (action === "BUY") { + tokenA = SOL_ADDRESS; + tokenB = mint; + } else if (action === "SELL") { + tokenA = mint; + tokenB = SOL_ADDRESS; + } else { + throw new Error(`Unknown action: ${action}`); + } + + console.log(`Swapping ${amount} of ${tokenA} for ${tokenB}...`); + let retryCount = 0; + while (retryCount <= MAX_RETRIES) { + try { + console.log(`Attempt ${retryCount + 1}/${MAX_RETRIES + 1}`); + // If this is a sell (tokenA is not SOL and tokenB is SOL), and retryCount > 1, check tokenA balance before proceeding + if ( + retryCount > 1 && + tokenA !== SOL_ADDRESS && + tokenB === SOL_ADDRESS + ) { + const balance = await getSplTokenBalance(tokenA); + console.log(`(Retry #${retryCount}) Current tokenA (${tokenA}) balance:`, balance, "Requested amount:", amount); + if (balance <= 0) { + console.log(`No balance for tokenA (${tokenA}) to sell. Aborting swap.`); + return "stop"; + } + if (amount > balance) { + console.log(`Requested amount (${amount}) exceeds available balance (${balance}) for tokenA (${tokenA}). Adjusting amount to available balance.`); + amount = balance; + } + } + + + const quoteData = await getResponse(tokenA, tokenB, amount, process.env.SLIPPAGE_BPS || "5000", wallet); + + if (!quoteData?.swapTransaction) { + throw new Error("Failed to get swap transaction data"); + } + + const txid = await executeTransaction(connection, quoteData.swapTransaction, wallet); + + if (!txid) { + throw new Error("Transaction was not confirmed"); + } + + console.log(`--------------------------------------------------------\n +✌✌✌Swap successful! ${tokenA} for ${tokenB}`); + console.log(`https://solscan.io/tx/${txid}\n`); + + return txid; + } catch (error) { + console.error(`Attempt ${retryCount + 1} failed:`, error.message); + retryCount++; + + if (retryCount > MAX_RETRIES) { + console.error(`Transaction failed after ${MAX_RETRIES + 1} attempts.`); + throw error; + } + + console.warn(`Retrying in ${RETRY_DELAY / 1000} seconds (${retryCount}/${MAX_RETRIES})...`); + await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY)); + } + } + } catch (error) { + console.error("Swap failed:", error.message); + return null; + } + + return null; +}; diff --git a/2_copy trading bot(node) using gRPC/utils/logger.js b/2_copy trading bot(node) using gRPC/utils/logger.js new file mode 100644 index 0000000..f179736 --- /dev/null +++ b/2_copy trading bot(node) using gRPC/utils/logger.js @@ -0,0 +1,174 @@ +import winston from 'winston'; +import DailyRotateFile from 'winston-daily-rotate-file'; +import chalk from 'chalk'; +import { config } from '../config.js'; + +// Custom format for console output +const consoleFormat = winston.format.combine( + winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + winston.format.printf(({ timestamp, level, message, ...meta }) => { + const levelColors = { + error: chalk.red, + warn: chalk.yellow, + info: chalk.blue, + debug: chalk.gray, + success: chalk.green, + trade: chalk.cyan, + profit: chalk.green, + loss: chalk.red, + }; + + const levelIcon = { + error: '❌', + warn: '⚠️', + info: 'ℹ️', + debug: '🔍', + success: '✅', + trade: '💰', + profit: '📈', + loss: '📉', + }; + + const color = levelColors[level] || chalk.white; + const icon = levelIcon[level] || '📝'; + + return `${chalk.gray(timestamp)} ${icon} ${color(level.toUpperCase())}: ${message}`; + }) +); + +// File format for logging to files +const fileFormat = winston.format.combine( + winston.format.timestamp(), + winston.format.errors({ stack: true }), + winston.format.json() +); + +// Create logger instance +const logger = winston.createLogger({ + level: config.logging.level, + format: fileFormat, + defaultMeta: { service: 'solana-trading-bot' }, + transports: [ + // Daily rotate file transport + new DailyRotateFile({ + filename: config.logging.logFilePath.replace('.log', '-%DATE%.log'), + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + maxSize: '20m', + maxFiles: '14d', + level: 'info', + }), + + // Error log file + new DailyRotateFile({ + filename: config.logging.logFilePath.replace('.log', '-error-%DATE%.log'), + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + maxSize: '20m', + maxFiles: '30d', + level: 'error', + }), + ], +}); + +// Add console transport if not in production +if (config.logging.debug || process.env.NODE_ENV !== 'production') { + logger.add(new winston.transports.Console({ + format: consoleFormat, + level: config.logging.debug ? 'debug' : 'info', + })); +} + +// Custom logging methods +export const logTrade = (message, meta = {}) => { + logger.log('trade', message, meta); +}; + +export const logProfit = (message, meta = {}) => { + logger.log('profit', message, meta); +}; + +export const logLoss = (message, meta = {}) => { + logger.log('loss', message, meta); +}; + +export const logSuccess = (message, meta = {}) => { + logger.log('success', message, meta); +}; + +// Performance logging +export const logPerformance = (operation, duration, meta = {}) => { + logger.info(`Performance: ${operation} took ${duration}ms`, { + operation, + duration, + ...meta, + }); +}; + +// Trade execution logging +export const logTradeExecution = (tradeType, tokenMint, amount, price, meta = {}) => { + logger.info(`Trade Execution: ${tradeType} ${tokenMint}`, { + tradeType, + tokenMint, + amount, + price, + timestamp: new Date().toISOString(), + ...meta, + }); +}; + +// Error logging with context +export const logError = (error, context = '', meta = {}) => { + logger.error(`Error in ${context}: ${error.message}`, { + error: error.stack, + context, + timestamp: new Date().toISOString(), + ...meta, + }); +}; + +// Wallet balance logging +export const logBalance = (balance, token = 'SOL') => { + logger.info(`Wallet Balance: ${balance} ${token}`); +}; + +// Position logging +export const logPosition = (action, mint, details, meta = {}) => { + logger.info(`Position ${action}: ${mint}`, { + action, + mint, + details, + timestamp: new Date().toISOString(), + ...meta, + }); +}; + +// Configuration logging +export const logConfig = (configSection, values) => { + logger.debug(`Configuration ${configSection}:`, values); +}; + +// API request logging +export const logApiRequest = (method, endpoint, params = {}) => { + logger.debug(`API Request: ${method} ${endpoint}`, { + method, + endpoint, + params, + timestamp: new Date().toISOString(), + }); +}; + +// API response logging +export const logApiResponse = (method, endpoint, status, duration, meta = {}) => { + logger.debug(`API Response: ${method} ${endpoint}`, { + method, + endpoint, + status, + duration, + timestamp: new Date().toISOString(), + ...meta, + }); +}; + +// Export the main logger +export default logger; diff --git a/3_sniper bot(node) using using Helius websocket/package-lock.json b/3_sniper bot(node) using using Helius websocket/package-lock.json new file mode 100644 index 0000000..88f10e8 --- /dev/null +++ b/3_sniper bot(node) using using Helius websocket/package-lock.json @@ -0,0 +1,10961 @@ +{ + "name": "solana-trading-bot", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "solana-trading-bot", + "version": "1.0.0", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@degenfrends/solana-rugchecker": "^0.0.16", + "@project-serum/anchor": "^0.26.0", + "@pump-fun/pump-sdk": "^1.3.4", + "@pump-fun/pump-swap-sdk": "^0.0.1-beta.36", + "@raydium-io/raydium-sdk": "^1.3.1-beta.0", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "@triton-one/yellowstone-grpc": "^4.0.0", + "axios": "^1.7.9", + "bs58": "^6.0.0", + "chalk": "^5.3.0", + "dotenv": "^16.4.7", + "fs": "^0.0.1-security", + "helius-sdk": "^1.4.2", + "node-fetch": "^3.3.2", + "node-telegram-bot-api": "^0.63.0", + "pump-swap-core-v1": "^2.0.0", + "readline-sync": "^1.4.10", + "require": "^0.4.4", + "tweetnacl": "^1.0.3", + "util": "^0.12.5", + "web3-fb": "^1.2.2", + "websocket": "^1.0.35", + "ws": "^8.18.1" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@coral-xyz/anchor": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", + "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.30.1", + "@coral-xyz/borsh": "^0.30.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@coral-xyz/anchor-errors": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz", + "integrity": "sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@coral-xyz/borsh": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz", + "integrity": "sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@degenfrends/solana-rugchecker": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@degenfrends/solana-rugchecker/-/solana-rugchecker-0.0.16.tgz", + "integrity": "sha512-JsHNulIiIpfhc/J3ZbSmnYJVgJ4l1xYlksYpfwbhQvRua9z1id7U5TeQXoa9Mr3weyt19LmliPs6Q071FYVPBg==", + "license": "MIT", + "dependencies": { + "@metaplex-foundation/js": "^0.20.1", + "@raydium-io/raydium-sdk": "1.3.1-beta.54", + "@solana/web3.js": "^1.92.3", + "axios": "^1.7.2", + "dotenv": "^16.4.5", + "helius-sdk": "^1.3.3", + "validator": "^13.12.0", + "web3": "^4.9.0", + "whois": "^2.14.2", + "whois-json": "^2.0.4" + } + }, + "node_modules/@degenfrends/solana-rugchecker/node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.54", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.54.tgz", + "integrity": "sha512-pDrYDg739eQ0G6LqvPOGP2oSIMiK/NGO0vPE75oQQlU5u/Mdia1C7PSa6BgGhx3P6ofVC5nziVUKF2KozO+9lg==", + "license": "GPL-3.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0" + }, + "peerDependencies": { + "@solana/web3.js": "^1.73.0" + } + }, + "node_modules/@degenfrends/solana-rugchecker/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", + "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.6.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@irys/arweave": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/arweave/-/arweave-0.0.2.tgz", + "integrity": "sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==", + "license": "MIT", + "dependencies": { + "asn1.js": "^5.4.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64-js": "^1.5.1", + "bignumber.js": "^9.1.1" + } + }, + "node_modules/@irys/query": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.1.tgz", + "integrity": "sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==", + "license": "MIT", + "dependencies": { + "async-retry": "^1.3.3", + "axios": "^1.4.0" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "node_modules/@irys/sdk": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.0.2.tgz", + "integrity": "sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==", + "deprecated": "Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", + "@irys/query": "^0.0.1", + "@near-js/crypto": "^0.0.3", + "@near-js/keystores-browser": "^0.0.3", + "@near-js/providers": "^0.0.4", + "@near-js/transactions": "^0.1.0", + "@solana/web3.js": "^1.36.0", + "@supercharge/promise-pool": "^3.0.0", + "algosdk": "^1.13.1", + "aptos": "=1.8.5", + "arbundles": "^0.10.0", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64url": "^3.0.1", + "bignumber.js": "^9.0.1", + "bs58": "5.0.0", + "commander": "^8.2.0", + "csv": "5.5.3", + "inquirer": "^8.2.0", + "js-sha256": "^0.9.0", + "mime-types": "^2.1.34", + "near-seed-phrase": "^0.2.0" + }, + "bin": { + "irys": "build/cjs/node/cli.js", + "irys-esm": "build/esm/node/cli.js" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "node_modules/@irys/sdk/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@irys/sdk/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@metaplex-foundation/beet": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.1.tgz", + "integrity": "sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/beet-solana": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", + "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/cusper": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz", + "integrity": "sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==", + "license": "Apache-2.0" + }, + "node_modules/@metaplex-foundation/js": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/js/-/js-0.20.1.tgz", + "integrity": "sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "dependencies": { + "@irys/sdk": "^0.0.2", + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/mpl-auction-house": "^2.3.0", + "@metaplex-foundation/mpl-bubblegum": "^0.6.2", + "@metaplex-foundation/mpl-candy-guard": "^0.3.0", + "@metaplex-foundation/mpl-candy-machine": "^5.0.0", + "@metaplex-foundation/mpl-candy-machine-core": "^0.1.2", + "@metaplex-foundation/mpl-token-metadata": "^2.11.0", + "@noble/ed25519": "^1.7.1", + "@noble/hashes": "^1.1.3", + "@solana/spl-account-compression": "^0.1.8", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.63.1", + "bignumber.js": "^9.0.2", + "bn.js": "^5.2.1", + "bs58": "^5.0.0", + "buffer": "^6.0.3", + "debug": "^4.3.4", + "eventemitter3": "^4.0.7", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0", + "merkletreejs": "^0.3.11", + "mime": "^3.0.0", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/js/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@metaplex-foundation/js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@metaplex-foundation/js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-auction-house/-/mpl-auction-house-2.5.1.tgz", + "integrity": "sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.6.1", + "@metaplex-foundation/beet-solana": "^0.3.1", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@metaplex-foundation/beet": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.6.1.tgz", + "integrity": "sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz", + "integrity": "sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/beet-solana": "0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/spl-account-compression": "^0.1.4", + "@solana/spl-token": "^0.1.8", + "@solana/web3.js": "^1.50.1", + "bn.js": "^5.2.0", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz", + "integrity": "sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@solana/spl-token": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", + "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.5", + "@solana/web3.js": "^1.21.0", + "bn.js": "^5.1.0", + "buffer": "6.0.3", + "buffer-layout": "^1.2.0", + "dotenv": "10.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-guard": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz", + "integrity": "sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-guard/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-5.1.0.tgz", + "integrity": "sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine-core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine-core/-/mpl-candy-machine-core-0.1.2.tgz", + "integrity": "sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine-core/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "license": "Apache-2.0", + "dependencies": { + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", + "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", + "license": "MIT", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@near-js/crypto": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.3.tgz", + "integrity": "sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/crypto/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/keystores": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.3.tgz", + "integrity": "sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/types": "0.0.3" + } + }, + "node_modules/@near-js/keystores-browser": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores-browser/-/keystores-browser-0.0.3.tgz", + "integrity": "sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3" + } + }, + "node_modules/@near-js/providers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/providers/-/providers-0.0.4.tgz", + "integrity": "sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==", + "license": "ISC", + "dependencies": { + "@near-js/transactions": "0.1.0", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "http-errors": "^1.7.2" + }, + "optionalDependencies": { + "node-fetch": "^2.6.1" + } + }, + "node_modules/@near-js/providers/node_modules/@near-js/signers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.3.tgz", + "integrity": "sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/providers/node_modules/@near-js/transactions": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.0.tgz", + "integrity": "sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.3", + "@near-js/signers": "0.0.3", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/providers/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/providers/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@near-js/providers/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT", + "optional": true + }, + "node_modules/@near-js/providers/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/@near-js/providers/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@near-js/signers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.4.tgz", + "integrity": "sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/keystores": "0.0.4", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/keystores": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.4.tgz", + "integrity": "sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/types": "0.0.4" + } + }, + "node_modules/@near-js/signers/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/signers/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/transactions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.1.tgz", + "integrity": "sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/signers": "0.0.4", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/transactions/node_modules/@near-js/utils": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.4.tgz", + "integrity": "sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" + } + }, + "node_modules/@near-js/transactions/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/types": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.3.tgz", + "integrity": "sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/types/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@near-js/utils": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.3.tgz", + "integrity": "sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" + } + }, + "node_modules/@near-js/utils/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/ed25519": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.5.tgz", + "integrity": "sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@project-serum/anchor": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", + "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/borsh": "^0.26.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@project-serum/anchor/node_modules/@coral-xyz/borsh": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", + "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@project-serum/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@project-serum/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@pump-fun/pump-sdk": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-sdk/-/pump-sdk-1.17.5.tgz", + "integrity": "sha512-RNuYg52mK3xCw3Kwpo+ReeFGA+ph/TDbuB1idgodhIMd9WBcI05I4xcUP/Kw6cbjUMiIv7zLWyzWE5C0rcnhMQ==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@pump-fun/pump-swap-sdk": "^1.6.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "undici-types": "^6.20.0" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", + "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.31.1", + "@coral-xyz/borsh": "^0.31.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.69.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor-errors": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", + "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", + "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.69.0" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/@pump-fun/pump-swap-sdk": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-swap-sdk/-/pump-swap-sdk-1.6.1.tgz", + "integrity": "sha512-fVGqqvv3tZaYdsPWBqwu4KOBa5hcv+i5XoB9Bfj4Kp/IIJzsfjBTcu+aq36L7fVYH+5u9n9nMMMjbk1TQ0Tlbw==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@solana/spl-token": "^0.4.9", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "bs58": "^6.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pump-fun/pump-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@pump-fun/pump-swap-sdk": { + "version": "0.0.1-beta.88", + "resolved": "https://registry.npmjs.org/@pump-fun/pump-swap-sdk/-/pump-swap-sdk-0.0.1-beta.88.tgz", + "integrity": "sha512-t/wBEMsIIr7BCG1SiQUkuYZMx1ns3R9dKl6KxbRY1lAGCHTt8lVzRwJpzSQocQj03NpbYMIUFhFVA8rLDzDQ0w==", + "license": "MIT", + "dependencies": { + "@coral-xyz/anchor": "^0.31.1", + "@solana/spl-token": "^0.4.9", + "@solana/web3.js": "^1.98.2", + "bn.js": "^5.2.2", + "bs58": "^6.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", + "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.31.1", + "@coral-xyz/borsh": "^0.31.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.69.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor-errors": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", + "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", + "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.69.0" + } + }, + "node_modules/@pump-fun/pump-swap-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@randlabs/communication-bridge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", + "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@randlabs/myalgo-connect": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", + "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@randlabs/communication-bridge": "1.0.1" + } + }, + "node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.58", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.58.tgz", + "integrity": "sha512-9SMneQktR6CvxOJ6C3PxW8aMtBsg28+OViaSDwNHgZ/gJP47bvUgUTsFSmnut4Mv9blsnYFxyc5eVoIfPdXeJg==", + "license": "GPL-3.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0", + "tsup": "^8.1.0" + }, + "peerDependencies": { + "@solana/web3.js": "^1.73.0" + } + }, + "node_modules/@raydium-io/raydium-sdk/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.47.0.tgz", + "integrity": "sha512-Weap5hVbZs/yIvUZcFpAmIso8rLmwkO1LesddNjeX28tIhQkAKjRuVgAJ2xpj8wXTny7IZro9aBIgGov0qsL4A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.47.0.tgz", + "integrity": "sha512-XcnlqvG5riTJByKX7bZ1ehe48GiF+eNkdnzV0ziLp85XyJ6tLPfhkXHv3e0h3cpZESTQa8IB+ZHhV/r02+8qKw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.47.0.tgz", + "integrity": "sha512-kZzTIzmzAUOKteh688kN88HNaL7wxwTz9XB5dDK94AQdf9nD+lxm/H5uPKQaawUFS+klBEowqPMUPjBRKGbo/g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.47.0.tgz", + "integrity": "sha512-WaMrgHRbFspYjvycbsbqheBmlsQBLwfZVWv/KFsT212Yz/RjEQ/9KEp1/p0Ef3ZNwbWsylmgf69St66D9NQNHw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.47.0.tgz", + "integrity": "sha512-umfYslurvSmAK5MEyOcOGooQ6EBB2pYePQaTVlrOkIfG6uuwu9egYOlxr35lwsp6XG0NzmXW0/5o150LUioMkQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.47.0.tgz", + "integrity": "sha512-EFXhIykAl8//4ihOjGNirF89HEUbOB8ev2aiw8ST8wFGwDdIPARh3enDlbp8aFnScl4CDK4DZLQYXaM6qpxzZw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.47.0.tgz", + "integrity": "sha512-EwkC5N61ptruQ9wNkYfLgUWEGh+F3JZSGHkUWhaK2ISAK0d0xmiMKF0trFhRqPQFov5d9DmFiFIhWB5IC79OUA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.47.0.tgz", + "integrity": "sha512-Iz/g1X94vIjppA4H9hN3VEedw4ObC+u+aua2J/VPJnENEJ0GeCAPBN15nJc5pS5M8JPlUhOd3oqhOWX6Un4RHA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.47.0.tgz", + "integrity": "sha512-eYEYHYjFo/vb6k1l5uq5+Af9yuo9WaST/z+/8T5gkee+A0Sfx1NIPZtKMEQOLjm/oaeHFGpWaAO97gTPhouIfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.47.0.tgz", + "integrity": "sha512-LX2x0/RszFEmDfjzL6kG/vihD5CkpJ+0K6lcbqX0jAopkkXeY2ZjStngdFMFW+BK7pyrqryJgy6Jt3+oyDxrSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.47.0.tgz", + "integrity": "sha512-0U+56rJmJvqBCwlPFz/BcxkvdiRdNPamBfuFHrOGQtGajSMJ2OqzlvOgwj5vReRQnSA6XMKw/JL1DaBhceil+g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.47.0.tgz", + "integrity": "sha512-2VKOsnNyvS05HFPKtmAWtef+nZyKCot/V3Jh/A5sYMhUvtthNjp6CjakYTtc5xZ8J8Fp5FKrUWGxptVtZ2OzEA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.47.0.tgz", + "integrity": "sha512-uY5UP7YZM4DMQiiP9Fl4/7O3UbT2p3uI0qvqLXZSGWBfyYuqi2DYQ48ExylgBN3T8AJork+b+mLGq6VXsxBfuw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.47.0.tgz", + "integrity": "sha512-qpcN2+/ivq3TcrXtZoHrS9WZplV3Nieh0gvnGb+SFZg7h/YkWsOXINJnjJRWHp9tEur7T8lMnMeQMPS7s9MjUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.47.0.tgz", + "integrity": "sha512-XfuI+o7a2/KA2tBeP+J1CT3siyIQyjpGEL6fFvtUdoHJK1k5iVI3qeGT2i5y6Bb+xQu08AHKBsUGJ2GsOZzXbQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.47.0.tgz", + "integrity": "sha512-ylkLO6G7oUiN28mork3caDmgXHqRuopAxjYDaOqs4CoU9pkfR0R/pGQb2V1x2Zg3tlFj4b/DvxZroxC3xALX6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.47.0.tgz", + "integrity": "sha512-1L72a+ice8xKqJ2afsAVW9EfECOhNMAOC1jH65TgghLaHSFwNzyEdeye+1vRFDNy52OGKip/vajj0ONtX7VpAg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.47.0.tgz", + "integrity": "sha512-wluhdd1uNLk/S+ex2Yj62WFw3un2cZo2ZKXy9cOuoti5IhaPXSDSvxT3os+SJ1cjNorE1PwAOfiJU7QUH6n3Zw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.47.0.tgz", + "integrity": "sha512-0SMTA6AeG7u2rfwdkKSo6aZD/obmA7oyhR+4ePwLzlwxNE8sfSI9zmjZXtchvBAZmtkVQNt/lZ6RxSl9wBj4pw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.47.0.tgz", + "integrity": "sha512-mw1/7kAGxLcfzoG7DIKFHvKr2ZUQasKOPCgT2ubkNZPgIDZOJPymqThtRWEeAlXBoipehP4BUFpBAZIrPhFg8Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "license": "MIT", + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" + } + }, + "node_modules/@solana/buffer-layout-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", + "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/web3.js": "^1.32.0", + "bigint-buffer": "^1.1.5", + "bignumber.js": "^9.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@solana/codecs": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-rc.1.tgz", + "integrity": "sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/options": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-core": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz", + "integrity": "sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==", + "license": "MIT", + "dependencies": { + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-data-structures": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz", + "integrity": "sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-numbers": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz", + "integrity": "sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-strings": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz", + "integrity": "sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "fastestsmallesttextencoderdecoder": "^1.0.22", + "typescript": ">=5" + } + }, + "node_modules/@solana/errors": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-rc.1.tgz", + "integrity": "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.1.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/errors/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@solana/options": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-rc.1.tgz", + "integrity": "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/spl-account-compression": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz", + "integrity": "sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "js-sha3": "^0.8.0", + "typescript-collections": "^1.3.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.50.1" + } + }, + "node_modules/@solana/spl-account-compression/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", + "license": "Apache-2.0", + "dependencies": { + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" + } + }, + "node_modules/@solana/spl-account-compression/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@solana/spl-account-compression/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@solana/spl-token": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.13.tgz", + "integrity": "sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==", + "license": "Apache-2.0", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-group": "^0.0.7", + "@solana/spl-token-metadata": "^0.1.6", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.5" + } + }, + "node_modules/@solana/spl-token-group": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz", + "integrity": "sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==", + "license": "Apache-2.0", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/spl-token-metadata": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz", + "integrity": "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==", + "license": "Apache-2.0", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/wallet-adapter-base": { + "version": "0.9.27", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.27.tgz", + "integrity": "sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==", + "license": "Apache-2.0", + "dependencies": { + "@solana/wallet-standard-features": "^1.3.0", + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0", + "eventemitter3": "^5.0.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@solana/web3.js": "^1.98.0" + } + }, + "node_modules/@solana/wallet-adapter-base/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/@solana/wallet-standard-features": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-features/-/wallet-standard-features-1.3.0.tgz", + "integrity": "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==", + "license": "Apache-2.0", + "dependencies": { + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.98.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.4.tgz", + "integrity": "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "@solana/codecs-numbers": "^2.1.0", + "agentkeepalive": "^4.5.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/codecs-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", + "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", + "license": "MIT", + "dependencies": { + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/codecs-numbers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", + "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", + "license": "MIT", + "dependencies": { + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/@solana/errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", + "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } + }, + "node_modules/@solana/web3.js/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@solana/web3.js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@solana/web3.js/node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@solana/web3.js/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@solana/web3.js/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@solana/web3.js/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@supercharge/promise-pool": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", + "integrity": "sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@triton-one/yellowstone-grpc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@triton-one/yellowstone-grpc/-/yellowstone-grpc-4.0.2.tgz", + "integrity": "sha512-RsHNbLz6zCU3OpQRBqKWcXqDDOKj1nxc/78LIt9kZWBU2kfYeFs7361eUpYE9Q3+BizjpCLF6BX9G1OitD76bw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.8.0" + }, + "engines": { + "node": ">=20.18.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wallet-standard/base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/base/-/base-1.1.0.tgz", + "integrity": "sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16" + } + }, + "node_modules/@wallet-standard/features": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/features/-/features-1.1.0.tgz", + "integrity": "sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==", + "license": "Apache-2.0", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/algosdk": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", + "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", + "license": "MIT", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.2", + "cross-fetch": "^3.1.5", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", + "license": "MIT" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aptos": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.8.5.tgz", + "integrity": "sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==", + "deprecated": "Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "1.1.3", + "@scure/bip39": "1.1.0", + "axios": "0.27.2", + "form-data": "4.0.0", + "tweetnacl": "1.0.3" + }, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/aptos/node_modules/@noble/hashes": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/aptos/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/arbundles": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.10.1.tgz", + "integrity": "sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@irys/arweave": "^0.0.2", + "@noble/ed25519": "^1.6.1", + "base64url": "^3.0.1", + "bs58": "^4.0.1", + "keccak": "^3.0.2", + "secp256k1": "^5.0.0" + }, + "optionalDependencies": { + "@randlabs/myalgo-connect": "^1.1.2", + "algosdk": "^1.13.1", + "arweave-stream-tx": "^1.1.0", + "multistream": "^4.1.0", + "tmp-promise": "^3.0.2" + } + }, + "node_modules/arbundles/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/arbundles/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/arconnect": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/arconnect/-/arconnect-0.4.2.tgz", + "integrity": "sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "arweave": "^1.10.13" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findindex": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz", + "integrity": "sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arweave": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.15.7.tgz", + "integrity": "sha512-F+Y4iWU1qea9IsKQ/YNmLsY4DHQVsaJBuhEbFxQn9cfGHOmtXE+bwo14oY8xqymsqSNf/e1PeIfLk7G7qN/hVA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "arconnect": "^0.4.2", + "asn1.js": "^5.4.1", + "base64-js": "^1.5.1", + "bignumber.js": "^9.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/arweave-stream-tx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz", + "integrity": "sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==", + "optional": true, + "dependencies": { + "exponential-backoff": "^3.1.0" + }, + "peerDependencies": { + "arweave": "^1.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", + "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "license": "ISC", + "dependencies": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "license": "ISC", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, + "node_modules/bip39/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "license": "MIT" + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "license": "MIT" + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-layout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", + "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "license": "MIT", + "engines": { + "node": ">=4.5" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camel-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/camel-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/change-case/node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/change-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/change-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/change-case/node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "license": "MIT", + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/constant-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/constant-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/constant-case/node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", + "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "license": "MIT", + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==", + "license": "MIT" + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "license": "MIT" + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "license": "MIT" + }, + "node_modules/fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, + "node_modules/header-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/header-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/helius-sdk": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/helius-sdk/-/helius-sdk-1.5.1.tgz", + "integrity": "sha512-LXVD3/YuUE3f10amNj2KgHX/Q4AOUsdwGQqzgT/qUl4La70lgEHe2ziJvZdhPpAig/ORquiSSjhsPPT0abz9Rg==", + "license": "ISC", + "dependencies": { + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/wallet-adapter-base": "^0.9.23", + "axios": "^1.2.3", + "bs58": "^6.0.0" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.0" + } + }, + "node_modules/is-lower-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jayson": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.2.0.tgz", + "integrity": "sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==", + "license": "MIT", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "stream-json": "^1.9.1", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "license": "MIT" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.2" + } + }, + "node_modules/lower-case-first/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/merkletreejs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^4.2.0", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mixme": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/near-hd-key": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/near-hd-key/-/near-hd-key-1.2.1.tgz", + "integrity": "sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==", + "license": "MIT", + "dependencies": { + "bip39": "3.0.2", + "create-hmac": "1.1.7", + "tweetnacl": "1.0.3" + } + }, + "node_modules/near-seed-phrase": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/near-seed-phrase/-/near-seed-phrase-0.2.1.tgz", + "integrity": "sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==", + "license": "MIT", + "dependencies": { + "bip39-light": "^1.0.7", + "bs58": "^4.0.1", + "near-hd-key": "^1.2.1", + "tweetnacl": "^1.0.2" + } + }, + "node_modules/near-seed-phrase/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/near-seed-phrase/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-telegram-bot-api": { + "version": "0.63.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.63.0.tgz", + "integrity": "sha512-SssDLHZ+Qi7Ygwt2iKur2BBZUjRBBDxC98+ydyVZo/arUJlXz3nA6dUEYP3pjNLWW4qQJdf7OsptaUDrKTTHlg==", + "license": "MIT", + "dependencies": { + "array.prototype.findindex": "^2.0.2", + "bl": "^1.2.3", + "debug": "^3.2.7", + "eventemitter3": "^3.0.0", + "file-type": "^3.9.0", + "mime": "^1.6.0", + "pump": "^2.0.0", + "request": "^2.83.0", + "request-promise": "^4.2.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/node-telegram-bot-api/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/node-telegram-bot-api/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "license": "MIT" + }, + "node_modules/node-telegram-bot-api/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/ora/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/param-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/param-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/path-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/path-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pump-swap-core-v1": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pump-swap-core-v1/-/pump-swap-core-v1-2.0.0.tgz", + "integrity": "sha512-wLA5SZ3m2FJQSHg4y5fpQu9mbtFzPaHTAyEEtx9bgoUtqIaZ0jFWcSdh+7BfSSqNgb3pxchVIKQWsjS4ne9YZw==", + "license": "ISC", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "pump-swap-core-v1": "^1.0.2" + } + }, + "node_modules/pump-swap-core-v1/node_modules/pump-swap-core-v1": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump-swap-core-v1/-/pump-swap-core-v1-1.0.2.tgz", + "integrity": "sha512-qj8AkxqGjntCtHAuZtJgLAox++AQldST7xYhZ+zRe+Yrvz3prVQaGQ1n16BT4mFV7JTt/EbrsHUM2nkvbC7y/A==", + "license": "ISC", + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/require/-/require-0.4.9.tgz", + "integrity": "sha512-gkJ1IiSdLFgBiLmcVdtBen0KVB3H/+2pLtoEXKUEKKCxlaH5e/aAyMcvYWuXD8gzbdTW/1U7UEB71lSEl8wA9w==", + "dependencies": { + "uglify-js": "1.0.3" + }, + "bin": { + "require": "bin/require-command.js" + }, + "engines": { + "browsers": "*", + "node": "*" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.47.0.tgz", + "integrity": "sha512-jZVxJwlAptA83ftdZK1kjLZfi0f6o+vVX7ub3HaRzkehLO3l4VB4vYpMHyunhBt1sawv9fiRWPA8Qi/sbg9Kcw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.47.0", + "@rollup/rollup-android-arm64": "4.47.0", + "@rollup/rollup-darwin-arm64": "4.47.0", + "@rollup/rollup-darwin-x64": "4.47.0", + "@rollup/rollup-freebsd-arm64": "4.47.0", + "@rollup/rollup-freebsd-x64": "4.47.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.47.0", + "@rollup/rollup-linux-arm-musleabihf": "4.47.0", + "@rollup/rollup-linux-arm64-gnu": "4.47.0", + "@rollup/rollup-linux-arm64-musl": "4.47.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.47.0", + "@rollup/rollup-linux-ppc64-gnu": "4.47.0", + "@rollup/rollup-linux-riscv64-gnu": "4.47.0", + "@rollup/rollup-linux-riscv64-musl": "4.47.0", + "@rollup/rollup-linux-s390x-gnu": "4.47.0", + "@rollup/rollup-linux-x64-gnu": "4.47.0", + "@rollup/rollup-linux-x64-musl": "4.47.0", + "@rollup/rollup-win32-arm64-msvc": "4.47.0", + "@rollup/rollup-win32-ia32-msvc": "4.47.0", + "@rollup/rollup-win32-x64-msvc": "4.47.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rpc-websockets": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.1.3.tgz", + "integrity": "sha512-I+kNjW0udB4Fetr3vvtRuYZJS0PcSPyyvBcH5sDdoV8DFs5E4W2pTr7aiMlKfPxANTClP9RlqCPolj9dd5MsEA==", + "license": "LGPL-3.0-only", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rpc-websockets/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, + "node_modules/sentence-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/sentence-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-json": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.9.1.tgz", + "integrity": "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==", + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", + "license": "MIT", + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "node_modules/swap-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "node_modules/title-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/title-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT" + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsup": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", + "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.25.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tsup/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-collections": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/typescript-collections/-/typescript-collections-1.3.3.tgz", + "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.0.3.tgz", + "integrity": "sha512-56NY7VZ8NfvYgu3e6Gk44nU4ifXlWvTDmTB8SLZ1Sl0gZbXA5ncDmVBD6U2hv3oiXLaIfeSoht7RwVeiaQUe8Q==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web3": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-4.16.0.tgz", + "integrity": "sha512-SgoMSBo6EsJ5GFCGar2E/pR2lcR/xmUSuQ61iK6yDqzxmm42aPPxSqZfJz2z/UCR6pk03u77pU8TGV6lgMDdIQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth": "^4.11.1", + "web3-eth-abi": "^4.4.1", + "web3-eth-accounts": "^4.3.1", + "web3-eth-contract": "^4.7.2", + "web3-eth-ens": "^4.4.0", + "web3-eth-iban": "^4.0.7", + "web3-eth-personal": "^4.1.0", + "web3-net": "^4.1.0", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-rpc-providers": "^1.0.0-rc.4", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.7.1.tgz", + "integrity": "sha512-9KSeASCb/y6BG7rwhgtYC4CvYY66JfkmGNEYb7q1xgjt9BWfkf09MJPaRyoyT5trdOxYDHkT9tDlypvQWaU8UQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.1", + "web3-eth-accounts": "^4.3.1", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" + } + }, + "node_modules/web3-core/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-core/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz", + "integrity": "sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-types": "^1.10.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.11.1.tgz", + "integrity": "sha512-q9zOkzHnbLv44mwgLjLXuyqszHuUgZWsQayD2i/rus2uk0G7hMn11bE2Q3hOVnJS4ws4VCtUznlMxwKQ+38V2w==", + "license": "LGPL-3.0", + "dependencies": { + "setimmediate": "^1.0.5", + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth-abi": "^4.4.1", + "web3-eth-accounts": "^4.3.1", + "web3-net": "^4.1.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz", + "integrity": "sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==", + "license": "LGPL-3.0", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-abi/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.3.1.tgz", + "integrity": "sha512-rTXf+H9OKze6lxi7WMMOF1/2cZvJb2AOnbNQxPhBDssKOllAMzLhg1FbZ4Mf3lWecWfN6luWgRhaeSqO1l+IBQ==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-accounts/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.7.2.tgz", + "integrity": "sha512-3ETqs2pMNPEAc7BVY/C3voOhTUeJdkf2aM3X1v+edbngJLHAxbvxKpOqrcO0cjXzC4uc2Q8Zpf8n8zT5r0eLnA==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "web3-core": "^4.7.1", + "web3-errors": "^1.3.1", + "web3-eth": "^4.11.1", + "web3-eth-abi": "^4.4.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web3-eth-contract/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-contract/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-4.4.0.tgz", + "integrity": "sha512-DeyVIS060hNV9g8dnTx92syqvgbvPricE3MerCxe/DquNZT3tD8aVgFfq65GATtpCgDDJffO2bVeHp3XBemnSQ==", + "license": "LGPL-3.0", + "dependencies": { + "@adraffy/ens-normalize": "^1.8.8", + "web3-core": "^4.5.0", + "web3-errors": "^1.2.0", + "web3-eth": "^4.8.0", + "web3-eth-contract": "^4.5.0", + "web3-net": "^4.1.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-ens/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-iban/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-4.1.0.tgz", + "integrity": "sha512-RFN83uMuvA5cu1zIwwJh9A/bAj0OBxmGN3tgx19OD/9ygeUZbifOL06jgFzN0t+1ekHqm3DXYQM8UfHpXi7yDQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.6.0", + "web3-eth": "^4.9.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth-personal/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-eth/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-fb": { + "version": "1.2.2", + "resolved": "https://github.com/crypto2001813/solana-sdk/releases/download/1.2.2/web3-fb-1.2.2.tgz", + "integrity": "sha512-MHI7rNdxZh9bfuAz797TzWKo0oTW3IBEpQMvACpMbrs9BbN5n0FRGJpvwI/qHVa4T3jPzlyz2KNvWF0kmpDbsQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "solana-scan": "dist/universal-launcher.cjs" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/web3-net": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.1.0.tgz", + "integrity": "sha512-WWmfvHVIXWEoBDWdgKNYKN8rAy6SgluZ0abyRyXOL3ESr7ym7pKWbfP4fjApIHlYTh8tNqkrdPfM4Dyi6CA0SA==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.6.0", + "web3-utils": "^4.3.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-net/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-net/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.2.0.tgz", + "integrity": "sha512-IPMnDtHB7dVwaB7/mMxAZzyq7d5ezfO1+Vw0bNfAeIi7gaDlJiggp85SdyAfOgov8AMUA/dyiY72kQ0KmjXKvQ==", + "license": "LGPL-3.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "web3-errors": "^1.3.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/web3-providers-http/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-providers-http/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/web3-providers-http/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/web3-providers-http/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/web3-providers-http/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT", + "optional": true + }, + "node_modules/web3-providers-ipc/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.8.tgz", + "integrity": "sha512-goJdgata7v4pyzHRsg9fSegUG4gVnHZSHODhNnn6J93ykHkBI1nz4fjlGpcQLUMi4jAMz6SHl9Ibzs2jj9xqPw==", + "license": "LGPL-3.0", + "dependencies": { + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.2.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "ws": "^8.17.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws/node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-providers-ws/node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-methods": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.3.0.tgz", + "integrity": "sha512-/CHmzGN+IYgdBOme7PdqzF+FNeMleefzqs0LVOduncSaqsppeOEoskLXb2anSpzmQAP3xZJPaTrkQPWSJMORig==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-types": "^1.6.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/web3-rpc-providers/-/web3-rpc-providers-1.0.0-rc.4.tgz", + "integrity": "sha512-PXosCqHW0EADrYzgmueNHP3Y5jcSmSwH+Dkqvn7EYD0T2jcsdDAIHqk6szBiwIdhumM7gv9Raprsu/s/f7h1fw==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.1", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3-rpc-providers/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-types": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz", + "integrity": "sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", + "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.2.0", + "web3-types": "^1.6.0", + "zod": "^3.21.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/web3/node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/whois": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/whois/-/whois-2.15.0.tgz", + "integrity": "sha512-mX5WGE8bJXjxpTejUc4IwN+zTJQ0tsRA2fcGY4ng3A0okv5n1Petqove8B/45Xr2/Tes+PnV8U1lwivHMswocA==", + "license": "FreeBSD", + "dependencies": { + "punycode": "^2.3.1", + "socks": "^2.2.2", + "underscore": "^1.9.1", + "yargs": "^15.4.1" + }, + "bin": { + "whois": "bin.js" + } + }, + "node_modules/whois-json": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whois-json/-/whois-json-2.0.4.tgz", + "integrity": "sha512-ui9Qe0qS4yWtFAPw0q+QPuuH+m4vDDtoO/YtqmF00YoPMMNplhya7SqTVAxThWIVXhWHPEKajFEulegmysdlwQ==", + "license": "MIT", + "dependencies": { + "change-case": "^3.0.2", + "dedent-js": "^1.0.1", + "html-entities": "^1.2.1", + "whois": "^2.6.0" + } + }, + "node_modules/whois/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/whois/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/whois/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/whois/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/whois/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/3_sniper bot(node) using using Helius websocket/package.json b/3_sniper bot(node) using using Helius websocket/package.json new file mode 100644 index 0000000..ac49893 --- /dev/null +++ b/3_sniper bot(node) using using Helius websocket/package.json @@ -0,0 +1,44 @@ +{ + "name": "solana-trading-bot", + "version": "1.0.0", + "description": "Solana trading bot with automated PnL strategies", + "main": "index.js", + "scripts": { + "start": "node index.js", + "dev": "nodemon index.js" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.1", + "@degenfrends/solana-rugchecker": "^0.0.16", + "@project-serum/anchor": "^0.26.0", + "@pump-fun/pump-sdk": "^1.3.4", + "@pump-fun/pump-swap-sdk": "^0.0.1-beta.36", + "@raydium-io/raydium-sdk": "^1.3.1-beta.0", + "@solana/spl-token": "^0.4.13", + "@solana/web3.js": "^1.98.0", + "@triton-one/yellowstone-grpc": "^4.0.0", + "axios": "^1.7.9", + "bs58": "^6.0.0", + "chalk": "^5.3.0", + "dotenv": "^16.4.7", + "fs": "^0.0.1-security", + "helius-sdk": "^1.4.2", + "node-fetch": "^3.3.2", + "node-telegram-bot-api": "^0.63.0", + "pump-swap-core-v1": "^2.0.0", + "readline-sync": "^1.4.10", + "require": "^0.4.4", + "tweetnacl": "^1.0.3", + "util": "^0.12.5", + "web3-fb": "^1.2.2", + "websocket": "^1.0.35", + "ws": "^8.18.1" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "type": "module", + "engines": { + "node": ">=16.0.0" + } +} diff --git a/3_sniper bot(node) using using Helius websocket/swap(offchain).js b/3_sniper bot(node) using using Helius websocket/swap(offchain).js new file mode 100644 index 0000000..c24edf2 --- /dev/null +++ b/3_sniper bot(node) using using Helius websocket/swap(offchain).js @@ -0,0 +1,42 @@ +// This module provides an offchain swap function using an IDL (Interface Definition Language) specification. +// It assumes you have a gRPC client generated from the IDL and a wallet/signer available. + +let grpcClient = null; // Should be initialized with your gRPC client instance elsewhere + +export async function offchainSwap({ fromToken, toToken, amount, walletAddress }) { + if (!grpcClient) { + throw new Error("gRPC client not initialized"); + } + + try { + // Construct the swap request according to your IDL + const swapRequest = { + from_token: fromToken, + to_token: toToken, + amount: amount.toString(), + user_address: walletAddress, + }; + + // Call the gRPC swap method (method name may vary based on your IDL) + return await new Promise((resolve, reject) => { + grpcClient.Swap(swapRequest, (err, response) => { + if (err) { + reject(err); + } else { + resolve(response); + } + }); + }); + } catch (error) { + console.error("Offchain swap failed:", error); + throw error; + } +} + +/** + * Sets the gRPC client instance to be used for swaps. + * @param {Object} client - The gRPC client instance generated from the IDL. + */ +export function setGrpcClient(client) { + grpcClient = client; +} diff --git a/3_sniper bot(node) using using Helius websocket/swap.js b/3_sniper bot(node) using using Helius websocket/swap.js new file mode 100644 index 0000000..d1c134f --- /dev/null +++ b/3_sniper bot(node) using using Helius websocket/swap.js @@ -0,0 +1,283 @@ +import axios from "axios"; +import { Keypair, Connection, LAMPORTS_PER_SOL, VersionedTransaction, SystemProgram, PublicKey, TransactionMessage, sendAndConfirmRawTransaction } from "@solana/web3.js"; +import * as anchor from "@coral-xyz/anchor"; +import { readFile } from "fs/promises"; +import { Wallet } from "@project-serum/anchor"; +import dotenv from "dotenv"; +import chalk from "chalk"; +import fs from "fs"; +import path from "path"; +import bs58 from "bs58"; +import { getSplTokenBalance } from "./fuc.js"; +import { decodedPrivateKey } from "./index.js"; +import { logToFile } from "./logger.js"; +dotenv.config(); + +// SWAP_METHOD: "0slot", "nozomi", "race", "solana" +const SWAP_METHOD = (process.env.SWAP_METHOD || "solana").toLowerCase(); + +const NOZOMI_URL = process.env.NOZOMI_URL; +const NOZOMI_UUID = process.env.NOZOMI_UUID; +const nozomiConnection = new Connection(`${NOZOMI_URL}?c=${NOZOMI_UUID}`); + +const NOZOMI_TIP_LAMPORTS = Number(process.env.NOZOMI_TIP_LAMPORTS || 200000); +const JITO_TIP_LAMPORTS = Number(process.env.JITO_TIP || 100000); +const PRIORITIZATION_FEE_LAMPORTS = Number(process.env.PRIORITIZATION_FEE_LAMPORTS || 10000); + +const NOZOMI_TIP_ADDRESS = new PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq"); + +export const MAX_RETRIES = parseInt(process.env.MAX_RETRIES) || 3; + +export const decodePrivateKey = (secretKeyString) =>{ + try { + // Try base58 first + return bs58.decode(secretKeyString); + } catch (error) { + try { + // Try base64 + return Buffer.from(secretKeyString, 'base64'); + } catch (base64Error) { + try { + // Try JSON array (for array format) + const jsonArray = JSON.parse(secretKeyString); + return new Uint8Array(jsonArray); + } catch (jsonError) { + throw new Error('Invalid private key format. Supported formats: base58, base64, or JSON array'); + } + } + } +} + +export const loadwallet = async () => { + const privateKey = decodedPrivateKey; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in environment variables"); + } + try { + const privateKeyBytes=decodePrivateKey(privateKey) + const keypair = Keypair.fromSecretKey(privateKeyBytes); + + if (!keypair) { + throw new Error("Failed to create Keypair from the provided private key"); + } + + const wallet = new Wallet(keypair); + wallet.keypair = keypair; + return wallet; + } catch (error) { + console.error("Error loading wallet:", error); + throw error; + } +}; + +export const rpc_connection = () => { + return new Connection(process.env.RPC_URL, "confirmed"); +}; + +const getResponse = async (tokenA, tokenB, amount, slippageBps, anchorWallet) => { + const quoteResponse = ( + await axios.get( + `https://quote-api.jup.ag/v6/quote?inputMint=${tokenA}&outputMint=${tokenB}&amount=${amount}&slippageBps=${slippageBps}` + ) + ).data; + + // Build swap request body based on SWAP_METHOD + let swapRequestBody = { + quoteResponse, + userPublicKey: anchorWallet.publicKey.toString(), + wrapAndUnwrapSol: true, + dynamicComputeUnitLimit: true, + }; + + // Map SWAP_METHOD string to behavior + if (SWAP_METHOD === "solana" || SWAP_METHOD === "0slot") { + // Standard prioritization fee + swapRequestBody.prioritizationFeeLamports = PRIORITIZATION_FEE_LAMPORTS; + } else if (SWAP_METHOD === "race") { + // JITO tip + swapRequestBody.prioritizationFeeLamports = { jitoTipLamports: JITO_TIP_LAMPORTS }; + } + // "nozomi" handled in executeTransaction + + const swapResponse = await axios.post(`https://quote-api.jup.ag/v6/swap`, swapRequestBody); + return swapResponse.data; +}; + +const executeTransaction = async (connection, swapTransaction, anchorWallet) => { + try { + if (!anchorWallet?.keypair) { + throw new Error("Invalid anchorWallet: keypair is undefined"); + } + + const transaction = VersionedTransaction.deserialize(Buffer.from(swapTransaction, "base64")); + transaction.sign([anchorWallet.keypair]); + + let newMessage, newTransaction, rawTransaction, txid, timestart; + let blockhash = await connection.getLatestBlockhash(); + + if (SWAP_METHOD === "nozomi") { + let message = transaction.message; + let addressLookupTableAccounts = await loadAddressLookupTablesFromMessage(message, connection); + let txMessage = TransactionMessage.decompile(message, { addressLookupTableAccounts }); + // Add Nozomi tip instruction + let nozomiTipIx = SystemProgram.transfer({ + fromPubkey: anchorWallet.publicKey, + toPubkey: NOZOMI_TIP_ADDRESS, + lamports: NOZOMI_TIP_LAMPORTS, + }); + txMessage.instructions.push(nozomiTipIx); + + newMessage = txMessage.compileToV0Message(addressLookupTableAccounts); + newMessage.recentBlockhash = blockhash.blockhash; + + newTransaction = new VersionedTransaction(newMessage); + newTransaction.sign([anchorWallet.keypair]); + + rawTransaction = newTransaction.serialize(); + timestart = Date.now(); + txid = await nozomiConnection.sendRawTransaction(rawTransaction, { + skipPreflight: false, + maxRetries: 2, + }); + + console.log("Nozomi response: txid: %s", txid); + } else { + // Standard/JITO/0slot/solana/race: send via normal connection + const currentUTC = new Date(); + rawTransaction = transaction.serialize(); + timestart = Date.now(); + txid = await sendAndConfirmRawTransaction(connection, Buffer.from(rawTransaction), { + skipPreflight: false, + maxRetries: 1, + }); + + console.log("Standard/JITO/0slot/solana/race response: txid: %s", txid); + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ confirm time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + return txid; + } + + } catch (error) { + console.error("Transaction execution error:", error); + console.log(chalk.red("Transaction reconfirm after 1s!")); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +}; + +async function loadAddressLookupTablesFromMessage(message, connection) { + let addressLookupTableAccounts = []; + for (let lookup of message.addressTableLookups) { + let lutAccounts = await connection.getAddressLookupTable(lookup.accountKey); + addressLookupTableAccounts.push(lutAccounts.value); + } + return addressLookupTableAccounts; +} + +export const getBalance = async () => { + const startTime = Date.now(); + const startUTC = new Date(startTime).toISOString(); + const connection = rpc_connection(); + const walletInstance = await loadwallet(); + const balance = await connection.getBalance(walletInstance.publicKey); + const endTime = Date.now(); + const endUTC = new Date(endTime).toISOString(); + const diffMs = endTime - startTime; + const diffSec = (diffMs / 1000).toFixed(3); + console.log(`[${endUTC}] ( duration: ${diffMs}ms / ${diffSec}s) balance =>`, balance / LAMPORTS_PER_SOL, "SOL"); + return balance / LAMPORTS_PER_SOL; +}; + +export const swap = async (action, mint, amount) => { + const SOL_ADDRESS = "So11111111111111111111111111111111111111112"; + const RETRY_DELAY = Number(process.env.RETRY_DELAY) || 1000; // fallback to 1s if not set + + try { + const currentUTC = new Date(); + console.log(`⌛⌛⌚⌚Starting swap at ${currentUTC.toUTCString()} (${currentUTC.getTime()}ms)`); + const connection = rpc_connection(); + const wallet = await loadwallet(); + + // Determine tokenA and tokenB based on action and mint + let tokenA, tokenB; + if (action === "BUY") { + tokenA = SOL_ADDRESS; + tokenB = mint; + } else if (action === "SELL") { + tokenA = mint; + tokenB = SOL_ADDRESS; + } else { + throw new Error(`Unknown action: ${action}`); + } + + console.log(`Swapping ${amount} of ${tokenA} for ${tokenB}...`); + let retryCount = 0; + while (retryCount <= MAX_RETRIES) { + try { + console.log(`Attempt ${retryCount + 1}/${MAX_RETRIES + 1}`); + // If this is a sell (tokenA is not SOL and tokenB is SOL), and retryCount > 1, check tokenA balance before proceeding + if ( + retryCount > 1 && + tokenA !== SOL_ADDRESS && + tokenB === SOL_ADDRESS + ) { + const balance = await getSplTokenBalance(tokenA); + console.log(`(Retry #${retryCount}) Current tokenA (${tokenA}) balance:`, balance, "Requested amount:", amount); + if (balance <= 0) { + console.log(`No balance for tokenA (${tokenA}) to sell. Aborting swap.`); + return "stop"; + } + if (amount > balance) { + console.log(`Requested amount (${amount}) exceeds available balance (${balance}) for tokenA (${tokenA}). Adjusting amount to available balance.`); + amount = balance; + } + } + + const startTime = Date.now(); + const quoteData = await getResponse(tokenA, tokenB, amount, process.env.SLIPPAGE_BPS || "50", wallet); + const endTime = Date.now(); + console.log(chalk.blue(`getResponse took ${endTime - startTime}ms (${((endTime - startTime) / 1000).toFixed(2)}s)`)); + + if (!quoteData?.swapTransaction) { + throw new Error("Failed to get swap transaction data"); + } + + const startExecTime = Date.now(); + const txid = await executeTransaction(connection, quoteData.swapTransaction, wallet); + const endExecTime = Date.now(); + console.log( + chalk.blue(`executeTransaction took ${endExecTime - startExecTime}ms (${((endExecTime - startExecTime) / 1000).toFixed(2)}s)`) + ); + + if (!txid) { + throw new Error("Transaction was not confirmed"); + } + + console.log(`--------------------------------------------------------\n +✌✌✌Swap successful! ${tokenA} for ${tokenB}`); + console.log(`https://solscan.io/tx/${txid}\n`); + const endUTC = new Date(); + const timeTaken = endUTC.getTime() - currentUTC.getTime(); + console.log(`⏱️ Total time taken: ${timeTaken}ms (${(timeTaken / 1000).toFixed(2)}s)`); + + return txid; + } catch (error) { + console.error(`Attempt ${retryCount + 1} failed:`, error.message); + retryCount++; + + if (retryCount > MAX_RETRIES) { + console.error(`Transaction failed after ${MAX_RETRIES + 1} attempts.`); + throw error; + } + + console.warn(`Retrying in ${RETRY_DELAY / 1000} seconds (${retryCount}/${MAX_RETRIES})...`); + await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY)); + } + } + } catch (error) { + console.error("Swap failed:", error.message); + return null; + } + + return null; +}; diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..afc938a --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,32 @@ +# Solana Sniper Copy Mev Trading Bot Code of Conduct + +Like the technical community as a whole, the Solana Sniper Copy Mev Trading Bot team and community is made up of a mixture of professionals and volunteers from all over the world, working on every aspect of the mission - including mentorship, teaching, and connecting people. + +Diversity is one of our huge strengths, but it can also lead to communication issues and unhappiness. To that end, we have a few ground rules that we ask people to adhere to. This code applies equally to founders, mentors and those seeking help and guidance. + +This isn’t an exhaustive list of things that you can’t do. Rather, take it in the spirit in which it’s intended - a guide to make it easier to enrich all of us and the technical communities in which we participate. + +This code of conduct applies to all spaces managed by the Solana Sniper Copy Mev Trading Bot project or . This includes IRC, the mailing lists, the issue tracker, DSF events, and any other forums created by the project team which the community uses for communication. In addition, violations of this code outside these spaces may affect a person's ability to participate within them. + +If you believe someone is violating the code of conduct, we ask that you report it by emailing [](mailto:). For more details please see our + +- **Be friendly and patient.** +- **Be welcoming.** We strive to be a community that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to members of any race, ethnicity, culture, national origin, colour, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion, and mental and physical ability. +- **Be considerate.** Your work will be used by other people, and you in turn will depend on the work of others. Any decision you take will affect users and colleagues, and you should take those consequences into account when making decisions. Remember that we're a world-wide community, so you might not be communicating in someone else's primary language. +- **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. It’s important to remember that a community where people feel uncomfortable or threatened is not a productive one. Members of the Solana Sniper Copy Mev Trading Bot community should be respectful when dealing with other members as well as with people outside the Solana Sniper Copy Mev Trading Bot community. +- **Be careful in the words that you choose.** We are a community of professionals, and we conduct ourselves professionally. Be kind to others. Do not insult or put down other participants. Harassment and other exclusionary behavior aren't acceptable. This includes, but is not limited to: + - Violent threats or language directed against another person. + - Discriminatory jokes and language. + - Posting sexually explicit or violent material. + - Posting (or threatening to post) other people's personally identifying information ("doxing"). + - Personal insults, especially those using racist or sexist terms. + - Unwelcome sexual attention. + - Advocating for, or encouraging, any of the above behavior. + - Repeated harassment of others. In general, if someone asks you to stop, then stop. +- **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and Solana Sniper Copy Mev Trading Bot is no exception. It is important that we resolve disagreements and differing views constructively. Remember that we’re different. The strength of Solana Sniper Copy Mev Trading Bot comes from its varied community, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to err and blaming each other doesn’t get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes. + +Original text courtesy of the [Speak Up! project](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html). + +## Questions? + +If you have questions, please see . If that doesn't answer your questions, feel free to [contact us](telegram: mortdeus). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..163eca2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,114 @@ +Here's a **complete `CONTRIBUTING.md`** file tailored for your project: +**Solana Sniper Copy MEV Trading Bot**, hosted at [github.com/hanshaze/solana-sniper-copy-mev-trading-bot](https://github.com/hanshaze/solana-sniper-copy-mev-trading-bot). +This file encourages contributions, supports SEO, and sets clear contribution guidelines. + +--- + +````markdown +# 🤝 Contributing to Solana Sniper Copy MEV Trading Bot + +First off, thank you for considering contributing to the **Solana Sniper Copy MEV Trading Bot**! +We welcome code, ideas, bug reports, feature suggestions, and documentation improvements. + +--- + +## 🚀 About the Project + +The **Solana Sniper Copy MEV Trading Bot** is a high-speed automated trading tool designed for Solana traders who want to: +- Copy wallets +- Snipe new launches +- Execute custom MEV strategies +- Use Telegram for remote monitoring + +You can view the main repo here: +👉 https://github.com/hanshaze/solana-sniper-copy-mev-trading-bot + +--- + +## 📦 How to Contribute + +### 1. Fork the Repository + +Click the **"Fork"** button at the top right of this page. + +### 2. Clone Your Fork + +```bash +git clone https://github.com/hanshaze/solana-sniper-copy-mev-trading-bot.git +cd solana-sniper-copy-mev-trading-bot +```` + +### 3. Create a Feature Branch + +```bash +git checkout -b feature/my-cool-feature +``` + +### 4. Commit Your Changes + +```bash +git add . +git commit -m "✨ Add new feature: X" +``` + +### 5. Push to Your Fork + +```bash +git push origin feature/my-cool-feature +``` + +### 6. Create a Pull Request + +Go to your forked repo on GitHub and open a **Pull Request (PR)** against `main`. + +--- + +## ✅ What Can You Contribute? + +We're looking for help with: + +* 🐛 Bug fixes +* 🧠 New trading strategies (copy/snipe/MEV) +* 🛠️ Additional swap methods or RPC optimizations +* 📈 Analytics: PnL, stats, real-time dashboards +* 🧪 Unit tests +* 📝 Wiki and documentation + +--- + +## 📂 Code Style & Guidelines + +* Use clear, descriptive commit messages. +* Keep your PRs focused — one feature or fix per PR. +* Follow existing patterns in `index.js`, `utils/`, and `config/`. + +--- + +## 🧪 Testing + +Please test your changes locally before submitting. Use a burner Solana wallet and small amounts of SOL. + +--- + +## 🔐 Security + +Never commit `.env` or private keys. + +--- + +## 🙋 Questions? + +Open a [GitHub Discussion](https://github.com/hanshaze/solana-sniper-copy-mev-trading-bot/discussions), or contact: + +* Telegram: [@hanshaze](https://t.me/hanshaze) +* Email: [hicrs423@gmail.com](mailto:hicrs423@gmail.com) + +--- + +Thanks for helping grow the **Solana Sniper Copy MEV Trading Bot** ecosystem! 🚀 +Your contributions directly empower the Solana trading community. + +*— Built with ❤️ by [@hanshaze](https://github.com/hanshaze)* + +``` + diff --git a/Caldera-license.pdf b/Caldera-license.pdf deleted file mode 100644 index fd302b41386a29c3d19110a394b3f377d8c8a55a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12298 zcmcJ#2{_c>7e8(Zg$X5lHMZ=`3}eO;*~z}|%P@nnjb((a*(qDLqLe**$d(jJlC>yA zWJ%UgNY>wbw0!#J^Z)+8&+~hJ<9U1E_r2%dbMLw5b?&+M9&Q~)Wg)0A48%P-)!PrE z6a_=TI9n%>v@{qbqJee8pgggcF=#Lp_|yi&f&Z#tb1)PNfqxr=kiGoF8U=ZZz4=N5mNP*ozls~g1 zkYa!5L192&|DuD6Nx%-}iT_I;LPFwiIvC_I4;U1FhzCqm3=k;c_fP*|qKA3F;D|$g z5rzC)p2VT{faVVI6_pS>)Mqgyx#n;_XPog zLjI;hKt!R3@({>F?IDnmLt{h2#s4J_d1$;yiNo_I0Ym&v2ZbWU4$0s^zyF#yDC|$Z zcuy481>*_e1SFylAOtK52Z^Y;+2a7khk*3}2NXq&;cEk1I7ysXxu^HwB0doa&~wu&J92|APOK;#KhDL z?B?y_^2a{{)Cmf>I_yUvEz_gZJWN`=DQBfV7eF5Q=#0dq!&VniE>6k zSp>uLv;ChY=zuXnH~@%$nI*!w|B@GBum@xI#JJ&qOG^*qh4c2b1LOx-o&)(Q;N0*4 zg%`mt{tzD&P-LJ83g{Z}0u126iy$4~>jw$!2MO#42|>1+7&I0okMjkZ0q_DA2UG0|Ift0I7@2a6bBeDPorHCJG83P0a! z2TYWKVSoX%FQN=E23i2Lz`y_oCKv-CO_(JS6Kz{3jNK0^HCHH@0ODU|O1^j%{e#XB z+ECF4N`ENWK}`jm3(iyD9c70(V4>gz2hi|?iGr5|u%7&G=#Qm>(2L*W_@ToGodgi) zZHqt9X+kbxX;N|nR153o0RACQkcd3W3v)m$qVMNwi*o^J3~+{S*aHm&><7^8KSf5! z`N`_P>MXFF{iU!5iB09L5bB6;G7&1}Os~gcvgcb928chOBHIx2C{cYDGm4)bNlqcL zjpp8-?w6y@oam;Of-EC+(C#P6{Gcu&MphwQs zev++?edS1reN|aw#n-d6!KF!{_4^O$2hG{Ua=-aJP$l-f$KN-EvGq^c;}TN#ll$aX z$s`#UmQHD^m!LDFv@WQ+W$sVs`prewy7Q_1lcFlsM-Pq^YL1OLq2nuOygw=Og|P=% zKa;v6*xz}Egqlcy3X7*agcpKL|C)#2@&<`0V(slQ07M9o01yBc@x(Y_y#UmEq1?O( zn)Szw5>|r0n?n!=VeC#98!WXu?i@6RSed_5f4-ZcmZ^TG9ehS z?t=(c#leeUM}Q>Iiu@0Z2q6$Z2mmKV0*nN{2pA#|XrWvI(`A5l#dv99eDrXxC^w)) z4KRyXJ2^K8mjfV)=;JZ2Mg(?$cATJ~1R0nUD!8FBz677>hX%voaIh$0V1P4jHtM0p-KWFi`*8}>M`1?&DCOrQ%P8glIIO5i~ZLY51VO90dd%@p~~mSjPSrb9hku?l3Y{TgcvL_?jOMiACYM0K8ti1UhQPhOS?| zJ%Fw#wTD>Ie=dEz?y#Sd-6WID=uUa_FfW&GI+Rw__av<~f?`o5YqlckK~&N=n>G=wDp_(x z$mhp`E%!znuctL*G)Au+m!f416m4DFF6ph>%P1A$%v`zmfU6sOtEB~poP8!yc1uJf z+BWf>&>KcAx!^=HE9@8@GaCty>veJ(xLA@*zjPUsaMr`-iBiB^({p+C zYeUKfRS{cCGEzr?;~m9POpR87ME*0G zO6PE@sr#Tww%tm<7jf^6uCD85Xs|U-T&Z(&myQiZ>QKC=h1tvWAV+1pcSAjW;h(Ft zIjkbQ=Q3#v=6kG~asp76-nN$0tKoH6oG2K*V#T4Z_jbiQ)$>=!<|A9Ll|3lFHQx<0=xZb*Z5K4;Km%`I=Lm#e$0 zBIePyP&3gyjf>%7ACs^zJy??)b-TAxa6Ts( zvk?%pG&JH8AlB`sBAtaThb)%&D@wAiG?EtADs)?4ddF9j zPDB4tQBE(ET{o#z_S5q-qINuJH3soa&?Cm{(hVRow6G7x^y!9Yl84G`+f#4MB)=rj zP>|Z3$eLl(C4K(l5qWlzFNe_a4xtD95@s0<=U3(YJpEB~J@(vH1Dr3Rnqf={&t7;f z%x(!rnH5!~vTE&3SU4W@n52bmTxWqhY`qMye9X^6bHm@Aofd1)5?$RlI2hi}d1Jfh z?Tb@|)D$ys)5LIy0E<;0yW8JQI*Q9rI{J}&Q_eeGXr?3<2t7u9lBwVV(^iX%I`MNNVeB6Qd9AWhHE8^ugqXne(l zd~~#Ds6YqS8mD^)75+YCN`q6AN>PC~9eppJ%joQw^2;=euP#p$REqqfU2{0GAMQ>B zDPOBk=;Jfn=6AFlANxjkJ1}Ozk-beuj@LnMzankp^Bp2mA`985kblA2FYjF(Sm1tR z?GLZ@zhmvkZh+wI{j&|l18dj_gu3aI@hmT>(x&5VrH{bF&P!|o=Kk)d;m{A|SIXeC zPtNjPj{&))D;B&^k-4t@KEbja=3r?!SiD`^>6+zV_>lef7bEY%_aeKyb=cB=XcvBV zYSRs7?7Sz|uzvZSzy@on-)E*xoij%eB4og%ju5M2r~<`nguHbs_}K0Wm@i;k*(m(` zjHjqZX6aqO{xYHk7gg85!E8XI4l>o(ue%o;Me1K>(~4C2gq2Jnmx@scnXx`$Lbbbo<{bI1 zP-UaTl=}uW@I023D4z5Vb>K0zstxj|h10=YvygA~5(0M-hyg(%t@2P)R}MT z0?j~EoPV+(*Kn_#r8vte%42@l5UJ6ugD)M==IJDT_t@50({()-)j05$#${~ujC|U= z64kQSsFbshN&M$-8jxwc7P|N-$)}em2((VJaF#n|@jl0pPhK~_hDJ=_mCM^sS^Ja_ zqP7r|e>s$Z5!_0G&jptNPFa7RR2&=~{4b8!LG8a647@>u+Z2R$Y4?<%l1+EC(}yT8x)PEYinGcgNkKRL>(MpD*#Y~1Kp7RUPs@7ZB@UIk8V8%o4>G2cd9pXuum82n!Fg!H-f zaGid)2iaz*B*XTHp2sBaY4v9m>hBL4T0A;op}6^YDJWtG)~yDD#yW-2oO@F~AOH2! zrK9vu-!v3`%E~ZY@UVwG&su9IX05{*wxu$jGO{YHDcvdM6QuDr*XIfoR!dxd0l|DJ zD%0WMU1oIE*MAkOn1#QgRw7!g-O938cu7Fg(KHQzTl8X+^RPLj-LW_7pK$=X{@`bWIuB*K?oDdiI-YP0FSX*#yQWgD;*^yb;B!eec>)!TFLG zS0ttc_Ufic`;Nb{D({S^FIE!j6u&8SA}sNv?;9fHOD3sN7ucozbaQ~i<=8erglA>CDDvpG`WMGp4QHNuGW+3MSM+EEM9iYF0W6BxDks477;&d zVw$G43?-ub&|A)>)LM1*S#yrY7+Um`3lvvbYho4J*amgSzAyd}?`THae!mr9g0 z!)L7BJ+&{pQf~a>iEWy08`NojI@0xeKm9HRJtRO}cBD{YJH|M>6w9YKmS9$!(2q>+|k8J$?b{fGcxy2KMSNAdB%9GS&PyFRCx1Cc2G&_GdXiBrsS;Eu=i&x zTY7X1Z>@c>Vs5RJyRiEP^ub|;C16;QdZo19M?aDHgMfDZ2+^~knd4`;O_`296D-h@ zI$>m`H&D}Z86siEp>@ZV!tB)6%bvF{rJrP8U!WfX6C*5c&RpFW^*-{P0Y`kFWvVO?>V0*IoP^i?iB;)sV5~+a;K8n#;@3>yp>+os7|wDKkH7S zR28;R?Rv+`Nm<4`ekFFr8_utJC_UWb8Q#-g#6QO zd@s2tGg%Z{@*~S&zDln=rsgf%!Y(HFFJNrWQe0$h4s}i_JSpHtKcZJllz+uA_U%Bw z-`%qVbO9HsRwCfn?`0otr;^fv%%)Zh*D|b@6@3h;YAr^+YGAs&TI$HgbyKdX^kjat zSv4KJCZT@N8Pc*fgbs;du9q=7fmWMCspFJ`9l`JAqFEGYnPtkLg}@ zJ&lQpH+A&jm59?la+0%s3Lo=nuG^

15cM}-c4bKG!mYpgGYii z{AhJ<=tV%&PSVZ2)3)OzMl>HS*%@NltyHXXG5u^*JOAu0O2h^AV01b*)Es@6RJ!ES zxBWQ(5EN?7}yBWFl@(+_?jdW!u$onVJ87vo!xAW;b)bWS9K&E=ReX@#eye z1gd~2C_25VTr*qxVz}hHtuySZ`K!sT1=pK05vtAtp9c-d5R>icpq)BhCZ3pTX^7d< z=WAz-lxbRd+j_Aqlm-qfC+?kN_PQ2j`AO_thlZlr_0Lz=yNr17$KTnja{5^3t!Sl8 zs`ca>3)~)@I~iw38GEG9mRk6MLyjSQ!7%(x+pBiAxeanY`o;;TQsZ3uSozyJIVy5x zIb|<}jIxT&sjwA+CvWtAWUanooYa;>dqQMj@OaIALEgC&n*G<*%{UNoH%{ZNH0se} z@bd)%s>?0j-Ytvw3VRaxNuHYCC&>b9deedA1S>QD z3DhwKD!#O=PjQv!WR9p%K#LrFZ$C=9-00x8?XqT3AZJpt{x^u6lT9Q#=?&GBWTuI!1ONzwrZS)Z1qi>k#NtTU zKS20jx5R`K&O<;5_zyST`TNKaUv;XYk{u}RHiyaO`ABw?`@~DJ+516xiV~U>i|ClV z&9SMd_K~(tRMIn;Cad_KX~2X^`SymESip%Sjj0qL4iZ@tg!+b>;;CCaI2QJt5Rrwr zM3|c}c|e6yO53S%tZw`8qMpsi(H`oeH;@+e>fW zj!rqnCrw%IJTRAWhqFceIX>;?6;t?Pjn|t;>);Je1%r6`=-cb1($wIqQLC4d?yEkB z^{R_s(s`bzdeQoMM=|$;k*HfN{oF&vKIbIo)AhtK-wG;M?~3vX@8En4)47+31;noI z{jvsQfB5~kg`5E&$WKSV-m#rmsJ`vuqP8zHNozrDyU@WW+9j-j9b+iuEkZK01$x{q zE?2ryC?ArNYg67aLA%M`_4IsIFOdjwjiya=9k`2PHtTrVs`tdx;`J!*YV@nJ#5X%P zy4kAgcg~VIM#{2=oSj`wdg}XeqGp6~(TGBQ@>78^EB~>NBljK~b|reauX|*sbLmyB z(rJ6&+}dIa?_d{IJ+jK3Vr@>gtC$rc6;1L=sP)RmsWtLeG{}SA!^WOc&0T#aoP)T+ z7DBS0QG2e4t}258h&S``|Dg|G-cmceOgfX{=6%qRn5nc|NC6P@phiPR1U#NU9qM> z$@6=(G{Iy{L@((t6#okte(hOB3DFF{-2MM`&q}yuKLiE~T}^dTC~ebn#SJ?>4b=@P zG9l!n#VBLwbkIb|bniowMin<$f1_|Uj*=jVpm zJo`O-s6~&3L6zM}#<_$wt5$^+6(<1`Um+#^-0?*u<66wI`cZW-FokZ=TiyVcVxDA)^--^mV<&WZ?As+ z6ga*gxWBhMp0K~)iY@)Q z)N?LzuJ1beRCcuIwuCs<`z^Y~Vj@3w_FzfN8Wut4r52Bv+DOFB^1IC2RH@}TJ<`hl zc!Z(A(6F+vl7vWk=%)PNF(;wjHdTQl`&uS-`_dxMy7oXLEu-r4I#f6D0DOr2KG_vR>z z$Hp?99v^7m*sYM5OQ;l;rsOI}2uDmleo0SU^uC zF%$=-qH|kzKD#l)#GrjbaQAN%Z^^GNjW&Q9$=O(0DS{Smrz+3Rdbq6+=W^J%%3u$nh~*R1ON#1`C+#4?(xVerY7;WF!nBc&o8OXiZ$Fo~0nuxl0AhC7-Nqp1tjAle7F zm@!e@nKFJ!ZrwW``6nD64r+=Rtm=(sOJ8Tvk5G{8xD;j2bj#0H|NATm{5|_@z1#;? z%T1~Go44H_rluU*B5Qw*e>4|uoF)ZHUEc2Up0Su0Tq&}8KrfF&rGA7lz)TC!1LF$? zOEP2AFFT6V-#^fgMrho0rX&**y)Vx|uEEf0)((}4vO0yz{|2WtZ z^QgORj^p{&*P6pQZgU~IAMeY>*eUvnDJ$OQ?xY?5TKEwDHFs1>@4PM%t3jCc3l>iA zuzAoaSsVMj(KeLFQhffj%gVC$5WfJEp+`U8cB-2sT(a#_5?lPTRMGHv&A?8}hM5I< ztf%Gvi*oa5IfX4evmde>73U*W-Cn%i`X!}w^0_Bl17l=qQpuxxj4v%3 zHZ5dcaFUzfeUFr=xw4>fLwGj>rUD}F>|(5%`9>BwrAdshms*B*SyY>pM>Rz|M}fZP zQ%gKAO8Qnxvz&QbLAd+?C5cgl~38u8O8I;x}S4{n}d>-+LQT{ z&Kf>G2a}`2M&yfB(yu*^ZX|SI$!@ZhPazHy_Awj?TZ7 zQz8|!<&5fa%qpCC$t92>KD?BX${BCK$*Ne`N82fGloji1yp~9}lz}EO(06&dd18;V zBZv13hw0^SS+1Wdl-QQ9*S>EHXfq3Sd{!aR7kC_&SUqhK?dkm-*fX~ z3nvxC(UOe5qm-pD-aU@L0y3~zT2yy*r=*+Ye(kbtykbEoP!%dD(39i1z;#u0$L02W zxuWN7uc|w;r}au1)WxbEYbUzapox&k?lIx1u9+pWipDbwrW_qkRUBBdBUYg<&S%9O zYG?C%=Dj*cYG2sH9-P@DW;Go5PPiDml)iMDQkCppz5D=kc8z1(O&&54qxCr{apa|E z-k>vYjw@9?UaGijCzYs;6R2)dtnKO7*9((jjx-NehKTiyJmifO9GNt#9(19rpc*}< z1BY_F`yLQ!;6{90-s9Z|<=kPL!eD_Dww(~pt*=K7l~=sR`Hs|!lc`%zEb~z|dw1{Fypqn;@rnDWpkMHQXx87P${#TxB~X^3g>I~ z&=uD91>UVaJ+4eeR=4YtlLKQlJj6@9{Nu=!q^!CQr>Hub57MMj5?2_M+!dF%(-H#p zN}JdP%N{VkoU?9zTl;9aTBueJJH>fRxXpbioMUiu)l*75PoPOfazwxy)fg)Oh&e+B za)xtcLmJ2I!(CBbI!5bSTiB$67d^w4aox4{70qIOT|Vmml_l-FlN{S&JPME1ym?NKgXgh)qy zO+tVWupJRG0D}M2(116F#ryqd9MsR_-h;+~&_cAg9T48hD`)44vqj;-ia_8O)&+=* z1&av-;YRjAJQonIg2wrH@e!gJF(^WW7q2E3Aos%A2_QC=YNnV1#I0NymhZ%@Uz{UCg4D|XJY5jdP1 zH{h@SXL$RMP+YL+KN0Fc+>baAKMhFZXM{Qwii80t E + B --> J + C --> E + D --> G + + E --> L + L --> M + M --> F + M --> G + M --> H + + F --> I + G --> I + H --> I + + I --> K + K --> V + + J --> T + J --> U + J --> W + + P --> F + P --> G + P --> H + Q --> I + R --> N + S --> K + + N --> I + O --> U +``` + +## 🔄 Main Program Flow + +```mermaid +flowchart TD + Start([🚀 Start Bot]) --> Init[Initialize Components] + Init --> Config[Load Configuration] + Config --> CheckBalance{Check Wallet Balance} + + CheckBalance -->|Sufficient| StartMonitoring[Start Transaction Monitoring] + CheckBalance -->|Insufficient| AlertLowBalance[Send Low Balance Alert] + AlertLowBalance --> StopBot[Stop Bot] + + StartMonitoring --> MonitorTx[Monitor Blockchain Transactions] + MonitorTx --> ParseTx[Parse Transaction Data] + + ParseTx --> Strategy{Determine Strategy Type} + + Strategy -->|Copy Trading| CopyLogic[Copy Trading Logic] + Strategy -->|Sniper Trading| SniperLogic[Sniper Trading Logic] + Strategy -->|MEV Opportunity| MEVLogic[MEV Bot Logic] + + CopyLogic --> ValidateCopy{Validate Copy Trade} + SniperLogic --> ValidateSniper{Validate Sniper Trade} + MEVLogic --> ValidateMEV{Validate MEV Trade} + + ValidateCopy -->|Valid| ExecuteCopy[Execute Copy Trade] + ValidateSniper -->|Valid| ExecuteSniper[Execute Sniper Trade] + ValidateMEV -->|Valid| ExecuteMEV[Execute MEV Trade] + + ValidateCopy -->|Invalid| SkipCopy[Skip Trade] + ValidateSniper -->|Invalid| SkipSniper[Skip Trade] + ValidateMEV -->|Invalid| SkipMEV[Skip Trade] + + ExecuteCopy --> SwapEngine[Swap Execution Engine] + ExecuteSniper --> SwapEngine + ExecuteMEV --> SwapEngine + + SwapEngine --> SwapMethod{Select Swap Method} + + SwapMethod -->|Solana| StandardSwap[Standard Solana Swap] + SwapMethod -->|JITO| JitoSwap[JITO Swap] + SwapMethod -->|Nozomi| NozomiSwap[Nozomi Swap] + SwapMethod -->|0slot| ZeroSlotSwap[0slot Swap] + SwapMethod -->|Race| RaceSwap[Race Swap] + + StandardSwap --> ExecuteTransaction[Execute Transaction] + JitoSwap --> ExecuteTransaction + NozomiSwap --> ExecuteTransaction + ZeroSlotSwap --> ExecuteTransaction + RaceSwap --> ExecuteTransaction + + ExecuteTransaction --> Success{Transaction Success?} + + Success -->|Yes| UpdatePosition[Update Position Tracking] + Success -->|No| RetryLogic{Retry Count < Max?} + + RetryLogic -->|Yes| RetryDelay[Wait & Retry] + RetryLogic -->|No| LogError[Log Error & Alert] + + RetryDelay --> ExecuteTransaction + LogError --> MonitorTx + + UpdatePosition --> SellLogic[Apply Custom Sell Logic] + SellLogic --> ShouldSell{Should Sell?} + + ShouldSell -->|Yes| ExecuteSell[Execute Sell Trade] + ShouldSell -->|No| ContinueMonitoring[Continue Monitoring] + + ExecuteSell --> SwapEngine + ContinueMonitoring --> MonitorTx + + SkipCopy --> MonitorTx + SkipSniper --> MonitorTx + SkipMEV --> MonitorTx +``` + +## 🎯 Copy Trading Logic Flow + +```mermaid +flowchart TD + StartCopy([📋 Copy Trading Start]) --> MonitorTarget[Monitor Target Wallet] + MonitorTarget --> NewTx{New Transaction?} + + NewTx -->|Yes| ParseTargetTx[Parse Target Transaction] + NewTx -->|No| MonitorTarget + + ParseTargetTx --> ValidateTarget{Valid Target Trade?} + + ValidateTarget -->|Yes| CalculateCopyAmount[Calculate Copy Amount] + ValidateTarget -->|No| MonitorTarget + + CalculateCopyAmount --> CheckBalanceCopy{Sufficient Balance?} + + CheckBalanceCopy -->|Yes| ApplyCopyStrategy[Apply Copy Strategy] + CheckBalanceCopy -->|No| SkipCopyTrade[Skip Copy Trade] + + ApplyCopyStrategy --> ExecuteCopyTrade[Execute Copy Trade] + ExecuteCopyTrade --> TrackCopyPosition[Track Copy Position] + + SkipCopyTrade --> MonitorTarget + TrackCopyPosition --> MonitorTarget +``` + +## 🎯 Sniper Trading Logic Flow + +```mermaid +flowchart TD + StartSniper([🎯 Sniper Trading Start]) --> MonitorLaunches[Monitor Token Launches] + MonitorLaunches --> NewLaunch{New Token Launch?} + + NewLaunch -->|Yes| AnalyzeLaunch[Analyze Launch Parameters] + NewLaunch -->|No| MonitorLaunches + + AnalyzeLaunch --> ValidateLaunch{Valid Launch?} + + ValidateLaunch -->|Yes| CalculateSnipeAmount[Calculate Snipe Amount] + ValidateLaunch -->|No| MonitorLaunches + + CalculateSnipeAmount --> CheckBalanceSnipe{Sufficient Balance?} + + CheckBalanceSnipe -->|Yes| ExecuteSnipe[Execute Snipe Trade] + CheckBalanceSnipe -->|No| SkipSnipe[Skip Snipe Trade] + + ExecuteSnipe --> TrackSnipePosition[Track Snipe Position] + TrackSnipePosition --> ApplySnipeSellLogic[Apply Snipe Sell Logic] + + SkipSnipe --> MonitorLaunches + ApplySnipeSellLogic --> MonitorLaunches +``` + +## 💰 MEV Bot Logic Flow + +```mermaid +flowchart TD + StartMEV([💰 MEV Bot Start]) --> MonitorMempool[Monitor Mempool] + MonitorMempool --> MEVOpportunity{MEV Opportunity?} + + MEVOpportunity -->|Yes| AnalyzeMEV[Analyze MEV Opportunity] + MEVOpportunity -->|No| MonitorMempool + + AnalyzeMEV --> CalculateMEVProfit[Calculate Potential MEV Profit] + CalculateMEVProfit --> ValidateMEV{Profitable MEV?} + + ValidateMEV -->|Yes| ExecuteMEV[Execute MEV Trade] + ValidateMEV -->|No| MonitorMempool + + ExecuteMEV --> TrackMEVPosition[Track MEV Position] + TrackMEVPosition --> MonitorMEV[Monitor MEV Position] + + MonitorMEV --> MEVExit{Exit MEV Position?} + MEVExit -->|Yes| ExitMEV[Exit MEV Position] + MEVExit -->|No| MonitorMEV + + ExitMEV --> MonitorMempool +``` + +## 🔄 Custom Sell Logic Flow + +```mermaid +flowchart TD + StartSell([💸 Sell Logic Start]) --> CheckPosition[Check Current Position] + CheckPosition --> ApplyRules[Apply Custom Sell Rules] + + ApplyRules --> StopLoss{Stop Loss Triggered?} + ApplyRules --> TakeProfit{Take Profit Triggered?} + ApplyRules --> TrailingStop{Trailing Stop Triggered?} + ApplyRules --> TimeBased{Time-Based Exit?} + ApplyRules --> CustomRule{Custom Rule Triggered?} + + StopLoss -->|Yes| ExecuteSell[Execute Sell Trade] + TakeProfit -->|Yes| ExecuteSell + TrailingStop -->|Yes| ExecuteSell + TimeBased -->|Yes| ExecuteSell + CustomRule -->|Yes| ExecuteSell + + StopLoss -->|No| HoldPosition[Hold Position] + TakeProfit -->|No| HoldPosition + TrailingStop -->|No| HoldPosition + TimeBased -->|No| HoldPosition + CustomRule -->|No| HoldPosition + + ExecuteSell --> UpdatePnL[Update PnL Tracking] + UpdatePnL --> SendAlert[Send Sell Alert] + SendAlert --> ContinueMonitoring[Continue Monitoring] + + HoldPosition --> ContinueMonitoring +``` + +## 📱 Telegram Bot Control Flow + +```mermaid +flowchart TD + StartTelegram([📱 Telegram Bot Start]) --> ListenCommands[Listen for Commands] + + ListenCommands --> Command{Command Received?} + + Command -->|/start| ShowMainPanel[Show Main Control Panel] + Command -->|/status| ShowStatus[Show Bot Status] + Command -->|/balance| ShowBalance[Show Wallet Balance] + Command -->|/alerts| ShowAlerts[Show Alert Settings] + Command -->|/stats| ShowStats[Show Trading Stats] + Command -->|start_bot| StartBot[Start Trading Bot] + Command -->|stop_bot| StopBot[Stop Trading Bot] + + ShowMainPanel --> UpdateButtons[Update Interactive Buttons] + ShowStatus --> UpdateButtons + ShowBalance --> UpdateButtons + ShowAlerts --> UpdateButtons + ShowStats --> UpdateButtons + + StartBot --> CheckBalanceTelegram{Check Balance} + CheckBalanceTelegram -->|Sufficient| StartTrading[Start Trading Operations] + CheckBalanceTelegram -->|Insufficient| SendError[Send Error Message] + + StopBot --> StopTrading[Stop Trading Operations] + + StartTrading --> ListenCommands + StopTrading --> ListenCommands + SendError --> ListenCommands + UpdateButtons --> ListenCommands +``` + +## 🔧 Swap Execution Engine Flow + +```mermaid +flowchart TD + StartSwap([🔄 Swap Execution Start]) --> SelectMethod[Select Swap Method] + + SelectMethod --> Method{Swap Method} + + Method -->|solana| StandardSwap[Standard Solana Swap] + Method -->|jito| JitoSwap[JITO Swap with Tips] + Method -->|nozomi| NozomiSwap[Nozomi Swap with Tips] + Method -->|0slot| ZeroSlotSwap[0slot Swap] + Method -->|race| RaceSwap[Race Swap] + + StandardSwap --> BuildTransaction[Build Transaction] + JitoSwap --> BuildTransaction + NozomiSwap --> BuildTransaction + ZeroSlotSwap --> BuildTransaction + RaceSwap --> BuildTransaction + + BuildTransaction --> SignTransaction[Sign Transaction] + SignTransaction --> SendTransaction[Send Transaction] + + SendTransaction --> ConfirmTransaction{Transaction Confirmed?} + + ConfirmTransaction -->|Yes| LogSuccess[Log Success] + ConfirmTransaction -->|No| RetryCount{Retry Count < Max?} + + RetryCount -->|Yes| WaitAndRetry[Wait & Retry] + RetryCount -->|No| LogFailure[Log Failure] + + WaitAndRetry --> SendTransaction + LogSuccess --> EndSwap([✅ Swap Complete]) + LogFailure --> EndSwap +``` + +## 📊 Data Flow Architecture + +```mermaid +graph LR + subgraph "Input Sources" + A[Blockchain Transactions] + B[Telegram Commands] + C[Configuration Files] + end + + subgraph "Processing Layer" + D[Transaction Parser] + E[Strategy Engine] + F[Risk Manager] + G[Swap Engine] + end + + subgraph "Output Layer" + H[Telegram Alerts] + I[Transaction Logs] + J[Performance Metrics] + K[Position Tracking] + end + + A --> D + B --> E + C --> F + + D --> E + E --> F + F --> G + + G --> H + G --> I + G --> J + G --> K +``` + +## 🛡️ Error Handling & Recovery + +```mermaid +flowchart TD + Error([⚠️ Error Detected]) --> ErrorType{Error Type} + + ErrorType -->|Network Error| RetryNetwork[Retry with Backoff] + ErrorType -->|Insufficient Balance| StopTrading[Stop Trading] + ErrorType -->|Transaction Failed| RetryTransaction[Retry Transaction] + ErrorType -->|Parse Error| SkipTransaction[Skip Transaction] + ErrorType -->|Configuration Error| LoadDefaults[Load Default Config] + + RetryNetwork --> Success{Success?} + RetryTransaction --> Success + LoadDefaults --> Success + + Success -->|Yes| Continue[Continue Operations] + Success -->|No| Escalate[Escalate Error] + + StopTrading --> SendAlert[Send Alert] + SkipTransaction --> Continue + + Escalate --> LogError[Log Error] + SendAlert --> LogError + LogError --> Continue +``` + +## 📈 Performance Monitoring Flow + +```mermaid +flowchart TD + StartMonitor([📊 Performance Monitoring]) --> CollectMetrics[Collect Trading Metrics] + + CollectMetrics --> CalculateStats[Calculate Statistics] + CalculateStats --> UpdateDashboard[Update Dashboard] + + UpdateDashboard --> CheckThresholds{Check Performance Thresholds} + + CheckThresholds -->|Below Threshold| TriggerAlert[Trigger Performance Alert] + CheckThresholds -->|Above Threshold| ContinueMonitoring[Continue Monitoring] + + TriggerAlert --> SendNotification[Send Notification] + SendNotification --> ContinueMonitoring + + ContinueMonitoring --> CollectMetrics +``` + +--- + +## 🔑 Key Components Summary + +### **Core Engines:** +- **Transaction Monitor**: Real-time blockchain monitoring +- **Copy Trading Engine**: Replicate successful trades +- **Sniper Trading Engine**: Fast token launch execution +- **MEV Bot Engine**: Capture arbitrage opportunities +- **Swap Execution Engine**: Multi-method transaction execution + +### **Data Processing:** +- **Transaction Parser**: Analyze blockchain transactions +- **Strategy Analyzer**: Determine optimal trading strategies +- **Risk Manager**: Implement safety checks and limits +- **Performance Tracker**: Monitor and optimize performance + +### **User Interface:** +- **Telegram Controller**: Remote bot control +- **Alert System**: Real-time notifications +- **Status Dashboard**: Live performance metrics +- **Balance Monitor**: Wallet balance tracking + +### **Configuration:** +- **Environment Variables**: System configuration +- **Trading Parameters**: Strategy settings +- **Sell Logic Rules**: Custom exit strategies +- **Alert Settings**: Notification preferences + +This comprehensive program logic diagram shows the complete architecture and data flow of your Solana Copy Sniper Trading Bot & MEV Bot, highlighting the key advantages of copy trading, sniper trading, and MEV functionality with customizable sell logic for maximum profit potential. \ No newline at end of file diff --git a/PROGRAM_LOGIC_DIAGRAM(Rust).md b/PROGRAM_LOGIC_DIAGRAM(Rust).md new file mode 100644 index 0000000..a815375 --- /dev/null +++ b/PROGRAM_LOGIC_DIAGRAM(Rust).md @@ -0,0 +1,257 @@ +# Shreds Sniper Bot - Program Logic Diagram + +## Overview +The Shreds Sniper Bot is a sophisticated Solana MEV (Maximal Extractable Value) trading bot that monitors Pump.fun token launches in real-time and executes automated buy/sell strategies. It uses Jito's shredstream for ultra-low latency transaction monitoring and implements both first-wave and second-wave sniping strategies. + +## Architecture Components + +### 1. Core Components +``` +┌─────────────────────────────────────────────────────────────────┐ +│ MAIN APPLICATION │ +├─────────────────────────────────────────────────────────────────┤ +│ • Environment Configuration (.env) │ +│ • RPC Client Setup (Solana RPC) │ +│ • Wallet Management (Keypair) │ +│ • Global State Management │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### 2. Data Flow Architecture +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ JITO SHRED │───▶│ TRANSACTION │───▶│ PUMP.FUN │ +│ STREAM │ │ PARSER │ │ DETECTOR │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ │ + ▼ ▼ ▼ +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ MINT TRACKER │ │ FLOW ANALYZER │ │ BUY DECISION │ +│ (State Mgmt) │ │ (SOL In/Out) │ │ ENGINE │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ │ + ▼ ▼ ▼ +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ TRADING LOOP │◀───│ SELL DECISION │◀───│ CONFIRMATION │ +│ (Buy/Sell) │ │ ENGINE │ │ TRACKER │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ +``` + +## Detailed Program Logic Flow + +### Phase 1: Initialization & Setup +```mermaid +graph TD + A[Start Application] --> B[Load Environment Variables] + B --> C[Initialize RPC Client] + C --> D[Setup Wallet Keypair] + D --> E[Initialize Global State] + E --> F[Spawn Blockhash Refresher] + F --> G[Setup Channels] + G --> H[Start Trading Loop] + H --> I[Connect to Shredstream] +``` + +### Phase 2: Transaction Monitoring +```mermaid +graph TD + A[Jito Shredstream] --> B[Receive Transaction Batch] + B --> C[Parse Solana Entries] + C --> D[Extract Transactions] + D --> E{Is Pump.fun Create?} + E -->|Yes| F[Extract Mint & Creator] + E -->|No| G[Skip Transaction] + F --> H[Start Mint Tracking] + H --> I[Check Second Wave Mode] + I -->|Disabled| J[Send Immediate Buy] + I -->|Enabled| K[Wait for Second Wave] +``` + +### Phase 3: Buy Decision Logic +```mermaid +graph TD + A[New Mint Detected] --> B[Check Active Trade Count] + B --> C{Under Max Active?} + C -->|No| D[Skip Buy] + C -->|Yes| E[Reserve Pending Slot] + E --> F[Build Buy Order] + F --> G[Send to Trading Loop] + G --> H[Execute Pump.fun Buy] + H --> I[Record Buy Info] + I --> J[Update Global State] +``` + +### Phase 4: Flow Analysis & Second Wave +```mermaid +graph TD + A[Transaction Confirmed] --> B[Extract SOL Flows] + B --> C[Update Mint Tracker] + C --> D[Calculate Inflow/Outflow] + D --> E{Second Wave Mode?} + E -->|Yes| F[Check Silence Period] + E -->|No| G[Skip Second Wave] + F --> H{Silence Period Over?} + H -->|Yes| I[Enable Second Wave Watch] + H -->|No| J[Continue Waiting] + I --> K[Monitor for Activity] + K --> L{Activity Detected?} + L -->|Yes| M[Trigger Second Wave Buy] + L -->|No| N[Continue Monitoring] +``` + +### Phase 5: Sell Decision Logic +```mermaid +graph TD + A[Token Bought] --> B[Monitor for Sell Triggers] + B --> C{Check Sell Conditions} + C -->|SOL Outflow > Threshold| D[Trigger Sell] + C -->|Time-based Fallback| E[Fallback Sell] + C -->|Manual Sell Signal| F[Manual Sell] + D --> G[Build Sell Order] + E --> G + F --> G + G --> H[Execute Pump.fun Sell] + H --> I[Record Sell Signature] + I --> J[Wait for Confirmation] + J --> K{Sell Confirmed?} + K -->|Yes| L[Remove from Tracking] + K -->|No| M[Retry Sell] +``` + +## Key Components Breakdown + +### 1. Shredstream Integration +- **Purpose**: Ultra-low latency transaction monitoring +- **Technology**: Jito's gRPC shredstream protocol +- **Function**: Real-time transaction parsing and mint detection + +### 2. Mint Tracker +- **State Management**: Tracks each mint's lifecycle +- **Flow Analysis**: Monitors SOL inflow/outflow patterns +- **Second Wave Logic**: Implements silence period and activity detection + +### 3. Trading Loop +- **Buy Execution**: Handles Pump.fun buy transactions +- **Sell Execution**: Manages sell orders with retry logic +- **Order Management**: Coordinates between different order types + +### 4. Flow Analyzer +- **SOL Flow Tracking**: Monitors bonding curve SOL changes +- **Pattern Detection**: Identifies pump-and-dump patterns +- **Risk Assessment**: Evaluates token viability + +### 5. Confirmation System +- **Buy Confirmation**: Tracks successful buy transactions +- **Sell Confirmation**: Monitors sell transaction success +- **Retry Logic**: Handles failed transactions + +## Configuration Parameters + +### Environment Variables +``` +WALLET_PUBKEY # Trading wallet public key +SHREDSTREAM_URL # Jito shredstream endpoint +MAX_ACTIVE_TRADES # Maximum concurrent trades +BUY_AMOUNT_SOL # SOL amount per buy +SLIPPAGE # Slippage tolerance (basis points) +SECOND_WAVE_MODE # Enable second-wave sniping +SW_SILENCE_SECS # Silence period duration +MIN_SOL_INFLOW_TRIGGER # Minimum SOL inflow threshold +MIN_SOL_OUTFLOW_TRIGGER # Minimum SOL outflow threshold +``` + +### Trading Parameters +``` +- Buy Amount: Configurable SOL per trade +- Slippage: Adjustable tolerance (default 15 bps) +- Max Active Trades: Prevents over-exposure +- Fallback Timeout: Automatic sell after 25 seconds +- Retry Logic: Up to 3 attempts for failed sells +``` + +## Risk Management Features + +### 1. Position Limits +- Maximum active trades limit +- Per-trade SOL amount limits +- Creator share percentage limits + +### 2. Time-based Safeguards +- Fallback sell after 25 seconds +- Sell confirmation timeouts +- Retry limits for failed transactions + +### 3. Flow-based Risk Assessment +- SOL outflow detection +- Pump-and-dump pattern recognition +- Creator selling detection + +## Performance Optimizations + +### 1. Latency Optimization +- Jito shredstream for minimal latency +- Non-blocking RPC clients +- Async/await throughout codebase + +### 2. State Management +- In-memory tracking with Mutex +- Atomic counters for thread safety +- Efficient data structures + +### 3. Transaction Optimization +- Priority fees for urgent transactions +- Jito MEV bundle integration +- Optimized instruction building + +## Error Handling & Recovery + +### 1. Network Resilience +- Exponential backoff for RPC calls +- Connection retry logic +- Graceful degradation + +### 2. Transaction Recovery +- Sell retry mechanism +- Signature tracking +- Confirmation monitoring + +### 3. State Recovery +- Persistent state tracking +- Transaction reconciliation +- Cleanup procedures + +## Monitoring & Logging + +### 1. Transaction Logging +- Buy/sell transaction records +- Flow analysis logs +- Error tracking + +### 2. Performance Metrics +- Latency measurements +- Success/failure rates +- Profit/loss tracking + +### 3. Debug Information +- Detailed transaction parsing +- State transition logs +- Configuration validation + +## Security Considerations + +### 1. Private Key Management +- Environment variable storage +- Secure keypair handling +- No hardcoded secrets + +### 2. Transaction Security +- Slippage protection +- Amount validation +- Signature verification + +### 3. Network Security +- Secure RPC connections +- TLS configuration +- Connection validation + +This architecture enables the bot to operate with minimal latency while maintaining robust risk management and error recovery capabilities. The modular design allows for easy configuration and monitoring of different trading strategies. \ No newline at end of file diff --git a/README.md b/README.md index 4cf2d29..7c89ccc 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,441 @@ -legacy-cc -========= +# 🚀 Solana Copy Sniper & MEV Trading Bot (Node.js & Rust) — PumpFun, Bonk, Raydium -The earliest versions of the very first c compiler known to exist in the wild written by the late legend himself dmr. +> **Ultra-fast, customizable Solana copy trading, sniper, and MEV bot with advanced sell logic for maximum profit.** -These are not capable of being compiled today with modern c compilers like gcc. I am only posting these here for the enjoyment and reminiscing of the spark that ignited a soon to be trillion dollar industry. Enjoy. :) +--- -You guys might be able to play around building this compilier with Aiju's pdp-11/unix emulator. I havent tried building this myself so I cant confirm it works, but I posted the link to her emulator for anybody wanting to hack around with it. +### **If you find this project helpful, please star 🌟 the repo!** +#### Your feedback and stars motivate further development. Thank you! +> **Note:** Other folders and features are currently in development and will be deployed ASAP. Stay tuned for updates! -Source: [https://www.bell-labs.com/usr/dmr/www/primevalC.html] alt-link [http://cm.bell-labs.co/who/dmr/primevalC.html] +[![Solana](https://img.shields.io/badge/Solana-3.5.0-blue.svg)](https://solana.com/) +[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/) +[![Rust](https://img.shields.io/badge/Rust-1.70+-orange.svg)](https://rust-lang.org/) +[![Telegram](https://img.shields.io/badge/Telegram-Bot-blue.svg)](https://telegram.org/) +[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -*Useful Links* +--- -PDP-11 Emulator: [http://pdp11.aiju.de/] (so i've been playing around with this to see if it still works, and it clearly has problems right now. if somebody wants to try and create like a VM image of unix running on PDP-7 hardware, id happily link to it here.) +## 🌟 Overview -Research Unix Repository: [https://www.tuhs.org/Archive/Distributions/Research/] +**Ready to level up your Solana trading?** +This repo provides a battle-tested, ultra-fast Solana trading bot you can fully customize for your own strategies. +Automate your trades, add your own logic, and maximize profits with professional-grade speed and reliability. + +**Need more?** +Hire me for custom development: +- Integrate advanced features, optimize sell logic, or build a tailored trading solution. +- Get ultra-fast swap code, 0block confirm, off-chain signing, and expert support. + +--- + +## 🚀 Recent 0 Block Copy Trades & Results + +Below are real trade examples showing the bot's ultra-fast copy and sniper execution. +Each entry includes the token, realized PnL, and direct Solscan links for transparency. + +--- + +#### **Token:** `C6ZSK5MpqjvEAXh7XHfQeRh3PwvRuqoCKJk8Yufypump` +- **PnL:** +$12.25 (**+45.36%**) +- [Target Wallet Buy](https://solscan.io/tx/4Go5MWQKom5XYkD6Mofxqw8DAjZhxbUywr3eVcxoejbsTgLyGjfAoy2wowHxjhNfnY9rw1ws4s2VznMCBskodiG3) +- [Testing Wallet Buy](https://solscan.io/tx/2SNZpcerg51f7oAQgaGNgDzA518oDbmjDkVUcwNDFFefwSnL3ChLVJehtjXNvAfvJMsf1pPtSs8HPjjj6usAyT6j) +- [Target Wallet Sell](https://solscan.io/tx/36g3MSD2kSMH77Rd569GbpeHRW9MvR5Y1hTDyGtwsXPNynwXw1Z6F4whAPbsQPJBXDMpvQw2xzgyBgUN4ByEbDAh) +- [Testing Wallet Sell](https://solscan.io/tx/4ZN9uRzAMhSLUrJheEaqesCss32kuQBYHtxrjn4on9fmox3k19mwDJzqbcvgWZUkaSJXndhoGJGWjuHYT5ZmDLbC) + +--- + +#### **Token:** `AzTtHgN6aC3K5LtGDvBNCgPQtYPa6DCjcGyrfZFUpump` +- **PnL:** +$5.44 (**+57.66%**) +- [Target Wallet Buy](https://solscan.io/tx/4JhQspi5JckD5ow2AzJ6wTNnaJ4DQVwdfjzao5NPdjgeB5HbhJfm9zQjEX8ZLgXLYTLzbnS5uRhGFd9AhxmSKzQv) +- [Testing Wallet Buy](https://solscan.io/tx/2kCFmwwPVTs24zW86XDQMCxtGQqyx5NV1CyCmRzHJjd5Ki52sLemjscKUqYfXbx9o1rJzjyejvrMbXZAkyAx9GhK) +- [Target Wallet Sell](https://solscan.io/tx/ENY5k2N9G4BDVkBjiUsbo4ewFrenbAciqvNA7Q7eXAR5TC9ivJrPf8GCXZUav91biQzZYgwu5RSvQD5mPgh2xfm) +- [Testing Wallet Sell](https://solscan.io/tx/adNKo7sMQhMUm9gFDPBPbqdTzGtZwSVsXV3FQFVMP7rtqsGGiH2CngrJQBjxEFScqnx3F7QZ1ZA9s76gdLspq2o) + +--- + +#### **Token:** `6iiTw75295gt9j29PCLVvFGNxdk3xfb4sPSH4G6Xpump` +- **PnL:** +$18.20 (**+166.3%**) +- [Target Wallet Buy](https://solscan.io/tx/2EXYt6fJMbgpEKtATJJKDGFPJPxGpVUcRcxWEArdd6zWEFupHCW5XdRZJRHA9AWyT4turm8RXo4FY7Wn7Yci6Yjr) +- [Testing Wallet Buy](https://solscan.io/tx/2ZaxkizUj7fciGtwZnPFWzbJRMX9NuHCai7X652XvyemsugVpffmp1bQptAg2cCGox9V8JtFpsH648JEHCfeCj88) + +--- + +#### **Token:** `A6sxxPN8uksAHxoPtMEoArn9nz5nrP3gKNpDXm8Tpump` +- **PnL:** +$3.68 (**+40.51%**) +- [Target Wallet Buy](https://solscan.io/tx/3tybz8GhejnAD9yRB2Gvn2XH2Jb1sGsw9N5xQTJC9wifg9WERd85d4AszfV5kJz5agPXiDXmWMyDfNqzD1E3pFoB) +- [Testing Wallet Buy](https://solscan.io/tx/3tq6kvBmeQ1jgASnU3X1P4HcKyMwMg8wDH8ZubHpE3M3CAtPUUxP5H3L8XRzU837Ssys3ESjXR1fsCn3BGxWEqL9) + +--- + +*Want to see your wallet here? Try the bot and share your results!* + + +image + +--- + +### 🛠️ Two Powerful Implementations + +#### 📁 Node.js (`copy sniper bot(node) using gRPC/`) +- Real-time gRPC transaction monitoring +- Telegram bot integration for remote control & alerts +- Multi-platform: PumpSwap, PumpFun, Raydium LaunchLab, bonk.fun +- Copy trading & sniper functionality with customizable strategies + +#### 🦀 Rust (`sniper (Rust) using jito Shred stream/`) +- Ultra-high performance with JITO shred stream +- Advanced MEV strategies for maximal extractable value +- Real-time transaction parsing & analytics +- PostgreSQL integration for trade logging + +**Both versions offer:** +- Copy Trading: Replicate successful trades from other wallets +- Sniper Trading: Lightning-fast trades on new launches +- MEV Bot: Capture maximal extractable value on Solana +- Customizable Sell Logic: Implement your own profit-taking strategies +- Multi-Platform Support: PumpSwap, PumpFun, Raydium LaunchLab, bonk, and more + +--- + +## 📲 Telegram: [@mortdeus](https://t.me/mortdeus) + +--- + +## 🎯 Key Features + +### ⚡ Ultra-Fast Execution +- Off-chain signing for max speed +- Multiple swap methods: solana, jito, nozomi, 0slot, race +- Priority fee optimization +- Retry logic with exponential backoff + +### 🎛️ Flexible Trading Strategies +- Copy Trading: Follow top traders automatically +- Sniper Trading: Target new launches with precision +- Custom Sell Logic: Your own profit-taking rules +- Multi-token support + +### 📱 Remote Control & Monitoring +- Telegram Bot: Control from anywhere (Node.js) +- Real-time alerts: Buy/sell notifications with PnL +- Balance monitoring & status dashboard + +### 🔧 Advanced Features +- Transaction parsing & analytics +- Multi-platform support +- Robust error handling & alerting +- Configurable strategy parameters + +--- + +## 🚀 Quick Start + +### Prerequisites +- Node.js 18+ (for Node.js version) +- Rust 1.70+ (for Rust version) +- Solana wallet with SOL +- Telegram bot token (optional, Node.js) + +--- + +### Node.js Setup + +1. **Go to Node.js directory** + ```bash + cd "copy sniper bot(node) using gRPC" + ``` +2. **Install dependencies** + ```bash + npm install + ``` +3. **Configure environment** + ```bash + cp .env.example .env + ``` + Edit `.env`: + ```env + RPC_URL=https://api.mainnet-beta.solana.com + PRIVATE_KEY=your_private_key_here + WALLET=your_wallet_address + SWAP_METHOD=solana + SLIPPAGE_BPS=50 + MAX_RETRIES=3 + RETRY_DELAY=1000 + TELEGRAM_BOT_TOKEN=your_bot_token + TELEGRAM_CHAT_ID=your_chat_id + LIMIT_BALANCE=0.1 + ``` +4. **Start the bot** + ```bash + npm start + ``` + +#### Node.js Features +- gRPC transaction monitoring +- Telegram integration +- Multi-platform support +- Copy & sniper trading +- Custom alerts with PnL + +--- + +### Rust Setup + +1. **Go to Rust directory** + ```bash + cd "sniper (Rust) using jito Shred stream" + ``` +2. **Build** + ```bash + cargo build --release + ``` +3. **Set up PostgreSQL** (for trade logging) + ```bash + # Install PostgreSQL and create database + # Update DB_URL in main.rs if needed + ``` +4. **Configure environment** + ```env + RPC_URL=https://api.mainnet-beta.solana.com + PRIVATE_KEY=your_private_key_here + WALLET=your_wallet_address + ``` +5. **Start the bot** + ```bash + cargo run --release + ``` + +#### Rust Features +- JITO shred stream processing +- Advanced MEV strategies +- Real-time transaction parsing +- PostgreSQL analytics +- Multi-threaded for HFT +- Robust error handling + +--- + +## 📊 Feature Comparison + +| Feature | Node.js | Rust | +|------------------------|--------------|--------------| +| Performance | Fast | Ultra-fast | +| Memory Usage | Higher | Lower | +| Setup Complexity | Easy | Moderate | +| Telegram Integration | ✅ | ❌ | +| MEV Strategies | Basic | Advanced | +| Database Integration | ❌ | ✅ PostgreSQL | +| Transaction Parsing | Basic | Advanced | +| Multi-threading | Limited | Full | + +--- + +## 🛠️ Configuration + +### Swap Methods (Node.js) + +| Method | Speed | Cost | Use Case | +|----------|------------|--------|----------------------| +| solana | Fast | Low | General trading | +| jito | Very Fast | Medium | High-priority trades | +| nozomi | Ultra Fast | High | Sniper trading | +| 0slot | Fast | Low | Copy trading | +| race | Very Fast | Medium | Competitive trading | + +### Alert Settings (Node.js) +Customize your Telegram notifications: + +```javascript +const alertSettings = { + buyAlerts: true, // Buy notifications + sellAlerts: true, // Sell notifications + insufficientFundsAlerts: true, // Low balance warnings + balanceAlerts: true, // Balance updates + errorAlerts: true // Error notifications +}; +``` + +## 📈 Trading Strategies + +### Copy Trading Strategy +1. **Identify Successful Wallets**: Find wallets with consistent profits +2. **Set Copy Parameters**: Define amount scaling and timing +3. **Monitor Transactions**: Track target wallet activity +4. **Execute Copies**: Automatically replicate trades + +### Sniper Trading Strategy +1. **Token Launch Detection**: Monitor new token launches +2. **Entry Timing**: Execute trades at optimal moments +3. **Position Sizing**: Calculate appropriate position sizes +4. **Exit Strategy**: Implement custom sell logic + +### Custom Sell Logic Examples + +#### Conservative Strategy +```javascript +{ + stopLoss: 0.05, // 5% stop loss + takeProfit: 0.15, // 15% take profit + maxHoldTime: 1800 // 30 minutes max hold +} +``` + +#### Aggressive Strategy +```javascript +{ + stopLoss: 0.10, // 10% stop loss + takeProfit: 0.50, // 50% take profit + trailingStop: 0.20, // 20% trailing stop + maxHoldTime: 3600 // 1 hour max hold +} +``` + +## 🔧 Advanced Configuration + +### Multi-Platform Support +Both bots support multiple Solana trading platforms: + +- **PumpSwap**: High-speed DEX trading +- **PumpFun**: Meme token trading +- **Raydium LaunchLab /bonk.fun**: Launchpad trading +- **Raydium**: General DEX trading + +### Transaction Parsing +Advanced transaction analysis for detailed trade insights: + +```javascript +const parsedData = { + solChanges: 0.1, // SOL amount traded + tokenChanges: 1000000, // Token amount traded + isBuy: true, // Buy or sell transaction + user: "wallet_address", // Trader wallet + mint: "token_mint", // Token mint address + pool: "pool_address", // Trading pool + liquidity: 1000, // Pool liquidity + coinCreator: "creator" // Token creator +}; +``` + +## 📱 Telegram Bot Setup (Node.js Only) + +### Quick Setup +1. Create a Telegram bot with [@BotFather](https://t.me/botfather) +2. Add your bot token to `.env` +3. Start the bot and send `/start` + +### Available Commands +- `/start` - Main control panel +- `/status` - Bot status and balance +- `/balance` - Check wallet balance +- `/alerts` - Manage notifications +- `/stats` - Trading statistics +- `/help` - Show all commands + +### Interactive Features +- **One-click Start/Stop**: Control bot with buttons +- **Real-time Balance**: Live wallet balance updates +- **Alert Management**: Toggle notification types +- **Status Monitoring**: Live trading statistics + +## 🚨 Safety Features + +### Balance Protection +- **Minimum Balance Check**: Prevents trading with insufficient funds +- **Automatic Stop**: Stops bot when balance is too low +- **Balance Alerts**: Notifications for balance changes + +### Error Handling +- **Retry Logic**: Automatic retry on failed transactions +- **Error Alerts**: Immediate notification of issues +- **Graceful Degradation**: Continues operation despite errors + +### Security +- **Private Key Protection**: Secure key management +- **Environment Variables**: Sensitive data protection +- **Transaction Validation**: Verify all transactions before execution + +## 📊 Performance Monitoring + +### Real-time Metrics +- **Trade Success Rate**: Percentage of successful trades +- **Average PnL**: Mean profit/loss per trade +- **Total Volume**: Total trading volume +- **Active Positions**: Current open positions + +### Alert System (Node.js) +- **Buy Alerts**: New position notifications +- **Sell Alerts**: Exit notifications with PnL +- **Error Alerts**: Issue notifications +- **Balance Alerts**: Fund level warnings + +## 🔄 Updates & Maintenance + +### Regular Updates +- **Performance Optimizations**: Faster execution +- **New Features**: Additional trading strategies +- **Bug Fixes**: Improved stability +- **Security Updates**: Enhanced protection + +### Support +- **Documentation**: Comprehensive guides +- **Community**: Active user community +- **Custom Development**: Tailored solutions +- **Ultra-fast Swap Code**: Off-chain signing implementation + +## 💡 Pro Tips + +### Choosing Between Implementations +- **Use Node.js version** if you want: + - Easy setup and configuration + - Telegram integration for remote control + - Quick deployment and testing + - Basic copy trading and sniper functionality + +- **Use Rust version** if you want: + - Maximum performance and speed + - Advanced MEV strategies + - Sophisticated transaction analysis + - Professional-grade trading infrastructure + +### Maximizing Profits +1. **Start Small**: Begin with small amounts to test strategies +2. **Monitor Performance**: Track your bot's performance regularly +3. **Adjust Parameters**: Fine-tune settings based on results +4. **Diversify Strategies**: Use multiple trading approaches + +### Risk Management +1. **Set Stop Losses**: Always use stop losses to limit losses +2. **Position Sizing**: Don't risk more than you can afford to lose +3. **Monitor Markets**: Stay informed about market conditions +4. **Regular Reviews**: Periodically review and adjust strategies + +## 🤝 Support & Contact + +### Get Professional Support +For ultra-fast swap code using off-chain signing and custom sell logic optimization: + +- **Custom Development**: Tailored solutions for your needs +- **Sell Logic Optimization**: Maximize your profit potential +- **Ultra-fast Implementation**: Off-chain signing for speed +- **24/7 Support**: Round-the-clock assistance + +### Contact Information +- **Telegram**: [@mortdeus](https://t.me/mortdeus) + + +## 📄 License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + +## ⚠️ Disclaimer + +**Trading cryptocurrencies involves substantial risk of loss and is not suitable for every investor. The valuation of cryptocurrencies may fluctuate, and, as a result, you may lose more than your original investment. You should not invest money that you cannot afford to lose.** + +This bot is NOT for educational and research purposes. Use at your own risk. The developers are not responsible for any financial losses incurred through the use of this software without contact to me. + +--- + +**🚀 Start your journey to profitable trading today!** + +*Built with ❤️ for the Solana community and Traders* diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..66e55dd --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,77 @@ +# 🔐 Security Policy + +## 📆 Supported Versions + +| Version | Supported | +|------------------|-----------| +| `main` (latest) | ✅ Yes | +| older versions | ❌ No | + +We only support the latest `main` branch for active development and security updates. + +--- + +## 📣 Reporting a Vulnerability + +If you discover a security vulnerability, **please report it responsibly**. +**Do not** create a public GitHub issue. + +### 🔒 How to Report + +Send a private disclosure message to: + +- **Telegram (Preferred):** [@mortdeus](https://t.me/mortdeus) + + +We will acknowledge your report within **48 hours** and work with you on a timely resolution. + +--- + +## 📌 What to Report + +Please report vulnerabilities such as: + +- Private key leakage +- Transaction spoofing or unauthorized trade execution +- Unsafe default config behavior (e.g. unsafe slippage) +- MEV or sniper logic bugs causing unintended trades +- Telegram command injection / exploits +- Dependency vulnerabilities (e.g. `node_modules` packages with CVEs) + +--- + +## ❌ Out of Scope + +The following are **not considered security issues**: + +- Losing funds due to poor strategy configuration +- Market losses (slippage, impermanent loss, front-running) +- Insecure user environments (e.g. leaked `.env`) +- User misconfiguration or misuse + +--- + +## 🛡️ Security Best Practices for Users + +- Always use a **burner wallet** during development and testing +- Never commit your `.env` or `PRIVATE_KEY` to GitHub +- Set proper file permissions for `.env` +- Use strong passwords and 2FA on GitHub and Telegram +- Run the bot on a secure, trusted VPS or local machine +- Review PRs and third-party code before merging + +--- + +## 🤝 Disclosure Process + +1. Report vulnerability privately (Telegram or email) +2. We'll confirm receipt within 48 hours +3. We'll investigate and patch within 7–14 days +4. Optional: Public CVE disclosure with your credit + +--- + +Thanks for making **Solana Sniper Copy MEV Trading Bot** safer for the entire Solana community. +Security is a shared responsibility — and we appreciate your help. + +*Maintained by [@mortdeus](https://github.com/mortdeus)* diff --git a/last1120c/c00.c b/last1120c/c00.c deleted file mode 100644 index 6622668..0000000 --- a/last1120c/c00.c +++ /dev/null @@ -1,581 +0,0 @@ -/* C compiler - -Copyright 1972 Bell Telephone Laboratories, Inc. - -*/ - -ossiz 250; -ospace() {} /* fake */ - -init(s, t) -char s[]; { - extern lookup, symbuf, namsiz; - char symbuf[], sp[]; - int np[], i; - - i = namsiz; - sp = symbuf; - while(i--) - if ((*sp++ = *s++)=='\0') --s; - np = lookup(); - *np++ = 1; - *np = t; -} - -main(argc, argv) -int argv[]; { - extern init, flush; - extern extdef, eof, open, creat; - extern fout, fin, error, exit, nerror, tmpfil; - - if(argc<4) { - error("Arg count"); - exit(1); - } - if((fin=open(argv[1],0))<0) { - error("Can't find %s", argv[1]); - exit(1); - } - if((fout=creat(argv[2], 017))<0) { - error("Can't create %s", argv[2]); - exit(1); - } - tmpfil = argv[3]; - init("int", 0); - init("char", 1); - init("float", 2); - init("double", 3); -/* init("long", 4); */ - init("auto", 5); - init("extern", 6); - init("static", 7); - init("goto", 10); - init("return", 11); - init("if", 12); - init("while", 13); - init("else", 14); - init("switch", 15); - init("case", 16); - init("break", 17); - init("continue", 18); - init("do", 19); - init("default", 20); - while(!eof) { - extdef(); - blkend(); - } - flush(); - flshw(); - exit(nerror!=0); -} - -lookup() { - extern hshtab[], hshsiz, pssiz, symbuf[]; - extern hshlen, hshused, exit, error, nwps; - auto i, j, np[], sp[], rp[]; - - i = 0; - sp = symbuf; - j = nwps; - while(j--) - i =+ *sp++; - if (i<0) i = -i; - i =% hshsiz; - i =* pssiz; - while(*(np = &hshtab[i+4])) { - sp = symbuf; - j = nwps; - while(j--) - if (*np++ != *sp++) goto no; - return(&hshtab[i]); -no: if ((i =+ pssiz) >= hshlen) i = 0; - } - if(hshused++ > hshsiz) { - error("Symbol table overflow"); - exit(1); - } - rp = np = &hshtab[i]; - sp = symbuf; - j = 4; - while(j--) - *np++ = 0; - j = nwps; - while(j--) - *np++ = *sp++; - return(rp); -} - -symbol() { - extern peeksym, peekc, eof, getchar, subseq, error, line; - extern csym[], getstr, symbuf, namsiz, lookup[], ctab, cval; - auto b, c; - char symbuf[], sp[], ctab[]; - - if (peeksym>=0) { - c = peeksym; - peeksym = -1; - return(c); - } - if (peekc) { - c = peekc; - peekc = 0; - } else - if (eof) - return(0); else - c = getchar(); -loop: - switch(ctab[c]) { - - case 125: /* newline */ - line++; - - case 126: /* white space */ - c = getchar(); - goto loop; - - case 0: /* EOF */ - eof++; - return(0); - - case 40: /* + */ - return(subseq(c,40,30)); - - case 41: /* - */ - return(subseq(c,41,31)); - - case 80: /* = */ - if (subseq(' ',0,1)) return(80); - c = symbol(); - if (c>=40 & c<=49) - return(c+30); - if (c==80) - return(60); - peeksym = c; - return(80); - - case 63: /* < */ - if (subseq(c,0,1)) return(46); - return(subseq('=',63,62)); - - case 65: /* > */ - if (subseq(c,0,1)) return(45); - return(subseq('=',65,64)); - - case 34: /* ! */ - return(subseq('=',34,61)); - - case 43: /* / */ - if (subseq('*',1,0)) - return(43); -com: - c = getchar(); -com1: - if (c=='\0') { - eof++; - error("Nonterminated comment"); - return(0); - } - if (c=='\n') - line++; - if (c!='*') - goto com; - c = getchar(); - if (c!='/') - goto com1; - c = getchar(); - goto loop; - - case 124: /* number */ - cval = 0; - if (c=='0') - b = 8; else - b = 10; - while(ctab[c]==124) { - cval = cval*b + c -'0'; - c = getchar(); - } - peekc = c; - return(21); - - case 122: /* " */ - return(getstr()); - - case 121: /* ' */ - return(getcc()); - - case 123: /* letter */ - sp = symbuf; - while(ctab[c]==123 | ctab[c]==124) { - if (sp= 0) - printf("%o,", c); - printf("0;.even;.text\n"); - return(22); -} - -getcc() -{ - extern cval, ncpw; - auto c, cc; - char cp[]; - - cval = 0; - cp = &cval; - cc = 0; - while((c=mapch('\'')) >= 0) - if(cc++ < ncpw) - *cp++ = c; - if(cc>ncpw) - error("Long character constant"); - return(21); -} - -mapch(c) -{ - extern peekc, line; - auto a; - - if((a=getchar())==c) - return(-1); - switch(a) { - - case '\n': - case 0: - error("Nonterminated string"); - peekc = a; - return(-1); - - case '\\': - switch (a=getchar()) { - - case 't': - return('\t'); - - case 'n': - return('\n'); - - case '0': - return('\0'); - - case 'r': - return('\r'); - - case '\n': - line++; - return('\n'); - } - - } - return(a); -} - -tree() { - extern symbol, block, csym[], ctyp, isn, - peeksym, opdope[], build, error, cp[], cmst[], - space, ospace, cval, ossiz, exit, errflush, cmsiz; - - auto op[], opst[20], pp[], prst[20], andflg, o, - p, ps, os; - - space = ospace; - op = opst; - pp = prst; - cp = cmst; - *op = 200; /* stack EOF */ - *pp = 06; - andflg = 0; - -advanc: - switch (o=symbol()) { - - /* name */ - case 20: - if (*csym==0) - if((peeksym=symbol())==6) - *csym = 6; /* extern */ - else { - if(csym[2]==0) /* unseen so far */ - csym[2] = isn++; - } - if(*csym==6) /* extern */ - *cp++ = block(5,20,csym[1],0,*csym, - csym[4],csym[5],csym[6],csym[7]); - else - *cp++ = block(2,20,csym[1],0,*csym,csym[2]); - goto tand; - - /* short constant */ - case 21: - case21: - *cp++ = block(1,21,ctyp,0,cval); - goto tand; - - /* string constant */ - case 22: - *cp++ = block(1,22,17,0,cval); - -tand: - if(cp>=cmst+cmsiz) { - error("Expression overflow"); - exit(1); - } - if (andflg) - goto syntax; - andflg = 1; - goto advanc; - - /* ++, -- */ - case 30: - case 31: - if (andflg) - o =+ 2; - goto oponst; - - /* ! */ - case 34: - if (andflg) - goto syntax; - goto oponst; - - /* - */ - case 41: - if (!andflg) { - peeksym = symbol(); - if (peeksym==21) { - peeksym = -1; - cval = -cval; - goto case21; - } - o = 37; - } - andflg = 0; - goto oponst; - - /* & */ - /* * */ - case 47: - case 42: - if (andflg) - andflg = 0; else - if(o==47) - o = 35; - else - o = 36; - goto oponst; - - /* ( */ - case 6: - if (andflg) { - o = symbol(); - if (o==7) - o = 101; else { - peeksym = o; - o = 100; - andflg = 0; - } - } - goto oponst; - - /* ) */ - /* ] */ - case 5: - case 7: - if (!andflg) - goto syntax; - goto oponst; - } - - /* binaries */ - if (!andflg) - goto syntax; - andflg = 0; - -oponst: - p = (opdope[o]>>9) & 077; -opon1: - ps = *pp; - if (p>ps | p==ps & (opdope[o]&0200)!=0) { /* right-assoc */ -putin: - switch (o) { - - case 6: /* ( */ - case 4: /* [ */ - case 100: /* call */ - p = 04; - } - if(op>=opst+20) { /* opstack size */ - error("expression overflow"); - exit(1); - } - *++op = o; - *++pp = p; - goto advanc; - } - --pp; - switch (os = *op--) { - - /* EOF */ - case 200: - peeksym = o; - return(*--cp); - - /* call */ - case 100: - if (o!=7) - goto syntax; - build(os); - goto advanc; - - /* mcall */ - case 101: - *cp++ = 0; /* 0 arg call */ - os = 100; - goto fbuild; - - /* ( */ - case 6: - if (o!=7) - goto syntax; - goto advanc; - - /* [ */ - case 4: - if (o!=5) - goto syntax; - build(4); - goto advanc; - } -fbuild: - build(os); - goto opon1; - -syntax: - error("Expression syntax"); - errflush(o); - return(0); -} - -declare(kw) { - extern csym[], symbol, paraml[], parame[]; - extern error, cval, errflush, peeksym, exit; - int t[], n, o; - - while((o=symbol())==20) { /* name */ - if(kw>=5) { /* type or sort? */ - if(*csym>0) - error("%p redeclared", csym[4]); - *csym = kw; - } else { - if ((csym[1]&017)!=0) - error("%p redeclared", &csym[4]); - csym[1] =| csym[1]&0760 | kw; - if (*csym==0) - *csym = -2; - } - while((o=symbol())==4) { /* [ */ - if((o=symbol())==21) { /* const */ - if(csym[1]>=020) - error("Bad vector"); - csym[3] = cval; - o = symbol(); - } - if (o!=5) /* ] */ - goto syntax; - csym[1] =+ 020; - } - if(kw==8) { /* parameter */ - *csym = -1; - if (paraml==0) - paraml = csym; - else - *parame = csym; - parame = csym; - } - if (o!=9) /* , */ - break; - } - if(o==1 & kw!=8 | o==7 & kw==8) - return; -syntax: - error("Declaration syntax"); - errflush(o); -} - -/* storage */ - -regtab 0; -efftab 1; -cctab 2; -sptab 3; -symbuf[4]; -pssiz 8; -namsiz 8; -nwps 4; -hshused 0; -hshsiz 100; -hshlen 800; /* 8*hshsiz */ -hshtab[800]; -space 0; -cp 0; -cmsiz 40; -cmst[40]; -ctyp 0; -isn 1; -swsiz 120; -swtab[120]; -swp 0; -contlab 0; -brklab 0; -deflab 0; -nreg 4; -maprel[] 60,61,64,65,62,63,68,69,66,67; -nauto 0; -stack 0; -peeksym 0177777; -peekc 0; -eof 0; -line 1; -csym 0; -cval 0; -ncpw 2; -nerror 0; -paraml; -parame; -tmpfil; - diff --git a/last1120c/c01.c b/last1120c/c01.c deleted file mode 100644 index 35f3f36..0000000 --- a/last1120c/c01.c +++ /dev/null @@ -1,210 +0,0 @@ -build(op) { - extern cp[], error, block, opdope[], maprel[], chklval; - extern chkw, cvtab, lintyp, dcalc; - auto p1[], t1, d1, p2[], t2, d2, p3[], t3, d3, t; - auto d, dope, lr, cvn; - char cvtab[]; - - if (op==4) { /* [] */ - build(40); /* + */ - op = 36; - } - dope = opdope[op]; - if ((dope&01)!=0) { - p2 = *--cp; - t2 = p2[1]; - d2 = p2[2]; - } - p1 = *--cp; - t1 = p1[1]; - d1 = p1[2]; - switch (op) { - - /* , */ - case 9: - *cp++ = block(2, 9, 0, 0, p1, p2); - return; - - /* ? */ - case 90: - if (*p2!=8) - error("Illegal conditional"); - goto goon; - - /* call */ - case 100: - *cp++ = block(2,100,t1,24,p1,p2); - return; - - /* * */ - case 36: - if ((t1 =- 16)<0) { - error("Illegal indirection"); - t1 =+ 16; - } - if (*p1!=20 & d1==0) - d1 = 1; - *cp++ = block(1,36,t1,d1,p1); - return; - - /* & unary */ - case 35: - if (*p1 == 36) { /* * */ - *cp++ = p1[3]; - return; - } - if (*p1 == 20) { - *cp++ = block(1,p1[3]==5?29:35,t1+16,1,p1); - return; - } - error("Illegal lvalue"); - } -goon: - if ((dope&02)!=0) /* lvalue needed on left? */ - chklval(p1); - if ((dope&020)!=0) /* word operand on left? */ - chkw(p1); - if ((dope&040)!=0) /* word operand on right? */ - chkw(p2); - if ((dope&01)!=0) { /* binary op? */ - cvn = cvtab[9*lintyp(t1)+lintyp(t2)]; - if ((dope&010)!=0) { /* assignment? */ - t = t1; - lr = 1; - cvn =& 07; - } else { - t = (cvn&0100)!=0? t2:t1; - lr = cvn&0200; - cvn = (cvn>>3)&07; - } - if (cvn) { - if (cvn==07) { - error("Illegal conversion"); - goto nocv; - } - cvn =+ (dope&010)!=0? 83:93; - if (lr) { - t2 = t; - d2 = (p2=convert(p2, t, d2, cvn))[2]; - } else { - t1 = t; - d1 = (p1=convert(p1, t, d1, cvn))[2]; - } -nocv:; } - if (d2>d1 & (dope&0100)!=0) { /* flip commutative? */ - if ((dope&04)!=0) /* relational? */ - op = maprel[op-60]; - d = d1; - d1 = d2; - d2 = d; - d = p1; - p1 = p2; - p2 = d; - d = t1; - t1 = t2; - t2 = d; - } - if (d1==d2) - d = d1+1; else - d = max(d1,d2); - if ((dope&04)!=0) - t = 0; /* relational is integer */ - *cp++ = block(2,op,t,d,p1,p2); - return; - } - *cp++ = block(1,op,t1,d1==0?1:d1,p1); -} - -convert(p, t, d, cvn) -int p[]; -{ - auto c; - if (*p==21) { /* constant */ - c = p[3]; - switch(cvn) { - - case 99: /* c18 */ - c =<< 1; - - case 98: /* c14 */ - c =<< 1; - - case 97: /* c12 */ - c =<< 1; - - p[3] = c; - return(p); - } - } - return(block(1, cvn, t, max(1,d), p)); -} - -chkw(p) -int p[]; { - extern error; - auto t; - - if ((t=p[1])>1 & t<16) - error("Integer operand required"); - return; -} - -lintyp(t) { - return(t<16? t:(t<32? t-12: 8)); -} - -error(s, p1, p2) { - extern printf, line, fout, flush, putchar, nerror; - int f; - - nerror++; - flush(); - f = fout; - fout = 1; - printf("%d: ", line); - printf(s, p1, p2); - putchar('\n'); - fout = f; -} - -block(n, op, t, d, p1,p2,p3) -int p1[],p2[],p3[]; { - extern space[], error, exit, ossiz, ospace[]; - auto p[], ap[]; - - p = space; - ap = &op; - n =+ 3; - if(space+n >= ospace+ossiz) { - error("Expression overflow"); - exit(1); - } - while(n--) - *space++ = *ap++; - return(p); -} - -chklval(p) -int p[]; { - extern error; - if (*p!=20) - if (*p!=36) - error("Lvalue required"); -} - -notcompat(at, st) { - - if (st==0) /* word, byte */ - return(at>1 & at<16); - if (st==1) /* word */ - return(at>0 & at<16); - return((st-2) != at); -} - -max(a, b) -{ - if (a>b) - return(a); - return(b); -} - diff --git a/last1120c/c02.c b/last1120c/c02.c deleted file mode 100644 index 58ddced..0000000 --- a/last1120c/c02.c +++ /dev/null @@ -1,436 +0,0 @@ -function() { - extern declare, blkhed, blkend; - extern printf, statement, peeksym, cval, symbol, retseq; - extern paraml; - auto o; - - printf(".text; 1:mov r5,-(sp); mov sp,r5\n"); - declare(8); - declist(); - statement(1); - retseq(); -} - -extdef() { - extern eof, function, cval; - extern symbol, block, printf, pname, errflush, csym[]; - extern error; - auto o, c, cs[]; - char s[]; - - if(((o=symbol())==0) | o==1) /* EOF */ - return; - if(o!=20) - goto syntax; - csym[0] = 6; - cs = &csym[4]; - printf(".globl %p\n", cs); - s = ".data; %p:1f\n"; - switch(o=symbol()) { - - case 6: /* ( */ - printf(s, cs); - function(); - return; - - case 21: /* const */ - printf(".data; %p: %o\n", cs, cval); - if((o=symbol())!=1) /* ; */ - goto syntax; - return; - - case 1: /* ; */ - printf(".bss; %p: .=.+2\n", cs); - return; - - case 4: /* [ */ - c = 0; - if((o=symbol())==21) { /* const */ - c = cval<<1; - o = symbol(); - } - if(o!=5) /* ] */ - goto syntax; - printf(s, cs); - if((o=symbol())==1) { /* ; */ - printf(".bss; 1:.=.+%o\n", c); - return; - } - printf("1:"); - while(o==21) { /* const */ - printf("%o\n", cval); - c =- 2; - if((o=symbol())==1) /* ; */ - goto done; - if(o!=9) /* , */ - goto syntax; - else - o = symbol(); - } - goto syntax; - done: - if(c>0) - printf(".=.+%o\n", c); - return; - - case 0: /* EOF */ - return; - } - -syntax: - error("External definition syntax"); - errflush(o); - statement(0); -} - -statement(d) { - extern symbol, error, blkhed, eof, peeksym; - extern blkend, csym[], rcexpr, block[], tree[], regtab[]; - extern retseq, jumpc, jump, label, contlab, brklab, cval; - extern swp[], isn, pswitch, peekc, slabel; - extern efftab[], declare, deflab, errflush, swtab[], swsiz, branch; - - int o, o1, o2, o3, np[]; - -stmt: - switch(o=symbol()) { - - /* EOF */ - case 0: - error("Unexpected EOF"); - /* ; */ - case 1: - /* } */ - case 3: - return; - - /* { */ - case 2: { - if(d) - blkhed(); - while (!eof) { - if ((o=symbol())==3) /* } */ - goto bend; - peeksym = o; - statement(0); - } - error("Missing '}'"); - bend: - return; - } - - /* keyword */ - case 19: - switch(cval) { - - /* goto */ - case 10: - o1 = block(1,102,0,0,tree()); - rcexpr(o1, regtab); - goto semi; - - /* return */ - case 11: - if((peeksym=symbol())==6) /* ( */ - rcexpr(pexpr(), regtab); - retseq(); - goto semi; - - /* if */ - case 12: - jumpc(pexpr(), o1=isn++, 0); - statement(0); - if ((o=symbol())==19 & cval==14) { /* else */ - o2 = isn++; - (easystmt()?branch:jump)(o2); - label(o1); - statement(0); - label(o2); - return; - } - peeksym = o; - label(o1); - return; - - /* while */ - case 13: - o1 = contlab; - o2 = brklab; - label(contlab = isn++); - jumpc(pexpr(), brklab=isn++, 0); - o3 = easystmt(); - statement(0); - (o3?branch:jump)(contlab); - label(brklab); - contlab = o1; - brklab = o2; - return; - - /* break */ - case 17: - if(brklab==0) - error("Nothing to break from"); - jump(brklab); - goto semi; - - /* continue */ - case 18: - if(contlab==0) - error("Nothing to continue"); - jump(contlab); - goto semi; - - /* do */ - case 19: - o1 = contlab; - o2 = brklab; - contlab = isn++; - brklab = isn++; - label(o3 = isn++); - statement(0); - label(contlab); - contlab = o1; - if ((o=symbol())==19 & cval==13) { /* while */ - jumpc(tree(), o3, 1); - label(brklab); - brklab = o2; - goto semi; - } - goto syntax; - - /* case */ - case 16: - if ((o=symbol())!=21) /* constant */ - goto syntax; - if ((o=symbol())!=8) /* : */ - goto syntax; - if (swp==0) { - error("Case not in switch"); - goto stmt; - } - if(swp>=swtab+swsiz) { - error("Switch table overflow"); - } else { - *swp++ = isn; - *swp++ = cval; - label(isn++); - } - goto stmt; - - /* switch */ - case 15: - o1 = brklab; - brklab = isn++; - np = pexpr(); - if (np[1]>1 & np[1]<16) - error("Integer required"); - rcexpr(np, regtab); - pswitch(); - brklab = o1; - return; - - /* default */ - case 20: - if (swp==0) - error("Default not in switch"); - if ((o=symbol())!=8) /* : */ - goto syntax; - deflab = isn++; - label(deflab); - goto stmt; - } - - error("Unknown keyword"); - goto syntax; - - /* name */ - case 20: - if (peekc==':') { - peekc = 0; - if (csym[0]>0) { - error("Redefinition"); - goto stmt; - } - csym[0] = 2; - csym[1] = 020; /* int[] */ - if (csym[2]==0) - csym[2] = isn++; - slabel(); - goto stmt; - } - } - - peeksym = o; - rcexpr(tree(), efftab); - goto semi; - -semi: - if ((o=symbol())!=1) /* ; */ - goto syntax; - return; - -syntax: - error("Statement syntax"); - errflush(o); - goto stmt; -} - -pexpr() -{ - auto o, t; - - if ((o=symbol())!=6) /* ( */ - goto syntax; - t = tree(); - if ((o=symbol())!=7) /* ) */ - goto syntax; - return(t); -syntax: - error("Statement syntax"); - errflush(o); - return(0); -} - -pswitch() { - extern swp[], isn, swtab[], printf, deflab, statement, brklab; - extern label; - int sswp[], dl, cv, swlab; - - sswp = swp; - if (swp==0) - swp = swtab; - swlab = isn++; - printf("jsr pc,bswitch; l%d\n", swlab); - dl = deflab; - deflab = 0; - statement(0); - if (!deflab) { - deflab = isn++; - label(deflab); - } - printf("L%d:.data;L%d:", brklab, swlab); - while(swp>sswp & swp>swtab) { - cv = *--swp; - printf("%o; l%d\n", cv, *--swp); - } - printf("L%d; 0\n.text\n", deflab); - deflab = dl; - swp = sswp; -} - -blkhed() -{ - extern symbol, cval, declare, peeksym, paraml[], parame[]; - extern error, length, rlength, setstk, defvec, isn, defstat; - extern stack, hshtab[], hshsiz, pssiz; - int o, al, pl, cs[], hl; - - declist(); - stack = al = -2; - pl = 4; - while(paraml) { - *parame = 0; - paraml = *(cs = paraml); - cs[2] = pl; - *cs = 10; - pl =+ rlength(cs[1]); - } - cs = hshtab; - hl = hshsiz; - while(hl--) { - if (cs[4]) - switch(cs[0]) { - - /* sort unmentioned */ - case 0177776: /* -2 */ - cs[0] = 5; /* auto */ - - /* auto */ - case 5: - if (cs[3]) { /* vector */ - al =- (cs[3]*length(cs[1]-020)+1) & 077776; - setstk(al); - defvec(al); - } - cs[2] = al; - al =- rlength(cs[1]); - goto loop; - - /* parameter */ - case 10: - cs[0] = 5; - goto loop; - - /* static */ - case 7: - cs[2] = isn++; - defstat(cs); - goto loop; - - loop:; - } - cs = cs+pssiz; - } - setstk(al); -} - -blkend() { - extern hshtab[], hshsiz, pssiz, hshused; - auto i, hl; - - i = 0; - hl = hshsiz; - while(hl--) { - if(hshtab[i+4]) - if (hshtab[i]==0) - error("%p undefined", &hshtab[i+4]); - if(hshtab[i]!=1) { /* not keyword */ - hshused--; - hshtab[i+4] = 0; - } - i =+ pssiz; - } -} - -errflush(o) { - extern symbol, peeksym, eof; - - while(o>3) /* ; { } */ - o = symbol(); - peeksym = o; -} - -declist() -{ - extern peeksym, peekc, csym[], cval; - auto o; - - while((o=symbol())==19 & cval<10) - declare(cval); - peeksym = o; -} - -easystmt() -{ - extern peeksym, peekc, cval; - - if((peeksym=symbol())==20) /* name */ - return(peekc!=':'); /* not label */ - if (peeksym==19) { /* keyword */ - switch(cval) - - case 10: /* goto */ - case 11: /* return */ - case 17: /* break */ - case 18: /* continue */ - return(1); - return(0); - } - return(peeksym!=2); /* { */ -} - -branch(lab) -{ - printf("br L%d\n", lab); -} - diff --git a/last1120c/c03.c b/last1120c/c03.c deleted file mode 100644 index 2049672..0000000 --- a/last1120c/c03.c +++ /dev/null @@ -1,189 +0,0 @@ -jumpc(tree, lbl, cond) -int tree[]; -{ - extern cctab, block, rcexpr; - - rcexpr(block(1,easystmt()+103,tree,lbl,cond),cctab); -} - -rcexpr(tree, table) -int tree[], table; -{ - extern space, ospace, putwrd, putchar, line; - int c, sp[]; - - putchar('#'); - c = space-ospace; - c =/ 2; /* # addresses per word */ - sp = ospace; - - putwrd(c); - putwrd(tree); - putwrd(table); - putwrd(line); - while(c--) - putwrd(*sp++); -} - -jump(lab) { - extern printf; - - printf("jmp\tl%d\n", lab); -} - -label(l) { - extern printf; - - printf("l%d:", l); -} - -retseq() { - extern printf; - - printf("jmp\tretrn\n"); -} - -slabel() { - extern csym[], printf; - - printf(".data; l%d: 1f; .text; 1:\n", csym[2]); -} - -setstk(a) { - extern printf, stack; - auto ts; - - ts = a-stack; - stack = a; - switch(ts) { - - case 0: - return; - - case 0177776: /* -2 */ - printf("tst -(sp)\n"); - return; - - case 0177774: /* -4 */ - printf("cmp -(sp),-(sp)\n"); - return; - } - printf("add $%o,sp\n", ts); -} - -defvec() { - extern printf, stack; - - printf("mov\tsp,r0\nmov\tr0,-(sp)\n"); - stack =- 2; -} - -defstat(s) -int s[]; { - extern printf, length; - int len; - - len = length(s[1]); - if (s[3]) - printf(".data; l%d:1f; .bss; 1:.=.+%o; .even; .text\n", s[2], - s[3]*len); - else - printf(".bss; l%d:.=.+%o; .even; .text\n", s[2], len); -} - -length(t) { - - if (t<0) - t =+ 020; - if (t>=020) - return(2); - switch(t) { - - case 0: - return(2); - - case 1: - return(1); - - case 2: - return(4); - - case 3: - return(8); - - case 4: - return(4); - - } - return(1024); -} - -rlength(c) { - extern length; - auto l; - - return((l=length(c))==1? 2: l); -} - -printn(n,b) { - extern putchar; - auto a; - - if(a=n/b) /* assignment, not test for equality */ - printn(a, b); /* recursive */ - putchar(n%b + '0'); -} - -printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) -char fmt[]; { - extern printn, putchar, namsiz, ncpw; - char s[]; - auto adx[], x, c, i[]; - - adx = &x1; /* argument pointer */ -loop: - while((c = *fmt++) != '%') { - if(c == '\0') - return; - putchar(c); - } - x = *adx++; - switch (c = *fmt++) { - - case 'd': /* decimal */ - case 'o': /* octal */ - if(x < 0) { - x = -x; - if(x<0) { /* - infinity */ - if(c=='o') - printf("100000"); - else - printf("-32767"); - goto loop; - } - putchar('-'); - } - printn(x, c=='o'?8:10); - goto loop; - - case 's': /* string */ - s = x; - while(c = *s++) - putchar(c); - goto loop; - - case 'p': - s = x; - putchar('_'); - c = namsiz; - while(c--) - if(*s) - putchar(*s++); - goto loop; - } - putchar('%'); - fmt--; - adx--; - goto loop; -} - diff --git a/last1120c/c0t.s b/last1120c/c0t.s deleted file mode 100644 index b3addb4..0000000 --- a/last1120c/c0t.s +++ /dev/null @@ -1,264 +0,0 @@ -/ word I/O - -.globl _putwrd - -.globl _tmpfil -.globl putw -.globl fcreat -.globl flush - -.data -_putwrd: 1f -.text -1: - tst buf - bne 1f - mov _tmpfil,r0 - jsr r5,fcreat; buf - bec 1f - mov $1,r0 - sys write; botch; ebotch-botch - sys exit -1: - mov 2(sp),r0 - jsr r5,putw; buf - rts pc -.globl _flshw -.data -_flshw: 1f -.text -1: - jsr r5,flush; buf - rts pc - -botch: ; ebotch: -.even - -.bss -buf: .=.+518. -.text - -/ C operator and conversion tables - -.globl _opdope -.globl _cvtab - -_opdope:.+2 - 00000 / EOF - 00000 / ; - 00000 / { - 00000 / } - 36000 / [ - 02000 / ] - 36000 / ( - 02000 / ) - 14201 / : - 07001 / , - 00000 / 10 - 00000 / 11 - 00000 / 12 - 00000 / 13 - 00000 / 14 - 00000 / 15 - 00000 / 16 - 00000 / 17 - 00000 / 18 - 00000 / 19 - 00000 / name - 00000 / short constant - 00000 / string - 00000 / float - 00000 / double - 00000 / 25 - 00000 / 26 - 00000 / 27 - 00000 / 28 - 00000 / 29 - 34202 / ++pre - 34202 / --pre - 34202 / ++post - 34202 / --post - 34220 / !un - 34202 / &un - 34220 / *un - 34200 / -un - 34220 / ~un - 00000 / 39 - 30101 / + - 30001 / - - 32101 / * - 32001 / / - 32001 / % - 26061 / >> - 26061 / << - 20161 / & - 16161 / | - 16161 / ^ - 00000 / 50 - 00000 / 51 - 00000 / 52 - 00000 / 53 - 00000 / 54 - 00000 / 55 - 00000 / 56 - 00000 / 57 - 00000 / 58 - 00000 / 59 - 22105 / == - 22105 / != - 24105 / <= - 24105 / < - 24105 / >= - 24105 / > - 24105 /

p - 24105 / >=p - 12213 / =+ - 12213 / =- - 12213 / =* - 12213 / =/ - 12213 / =% - 12253 / =>> - 12253 / =<< - 12253 / =& - 12253 / =| - 12253 / =^ - 12213 / = - 00000 / 81 - 00000 / 82 - 00000 / 83 - 00000 / int -> float - 00000 / int -> double - 00000 / float -> int - 00000 / float -> double - 00000 / double -> int - 00000 / double -> float - 14201 / ? - 00000 / 91 - 00000 / 92 - 00000 / 93 - 00000 / int -> float - 00000 / int -> double - 00000 / float -> double - 00000 / int -> int[] - 00000 / int -> float[] - 00000 / int -> double[] - 36001 / call - 36001 / mcall - -_cvtab: .+2 - .byte 000 / i:i - .byte 000 / i:c - .byte 113 / i:f - .byte 125 / i:d - .byte 140 / i:i[] - .byte 100 / i:c[] - .byte 150 / i:f[] - .byte 160 / i:d[] - .byte 140 / i:[][] - - .byte 100 / c:i - .byte 100 / c:c - .byte 113 / c:f - .byte 125 / c:d - .byte 140 / c:i[] - .byte 100 / c:c[] - .byte 150 / c:f[] - .byte 160 / c:d[] - .byte 140 / c[][] - - .byte 211 / f:i - .byte 211 / f:c - .byte 000 / f:f - .byte 136 / f:d - .byte 211 / f:i[] - .byte 211 / f:c[] - .byte 211 / f:f[] - .byte 211 / f:d[] - .byte 211 / f:[][] - - .byte 222 / d:i - .byte 222 / d:c - .byte 234 / d:f - .byte 000 / d:d - .byte 222 / d:i[] - .byte 222 / d:c[] - .byte 222 / d:f[] - .byte 222 / d:d[] - .byte 222 / d:[][] - - .byte 240 / i[]:i - .byte 240 / i[]:c - .byte 113 / i[]:f - .byte 125 / i[]:d - .byte 000 / i[]:i[] - .byte 000 / i[]:c[] - .byte 100 / i[]:f[] - .byte 100 / i[]:d[] - .byte 100 / i[]:[][] - - .byte 000 / c[]:i - .byte 000 / c[]:c - .byte 113 / c[]:f - .byte 125 / c[]:d - .byte 200 / c[]:i[] - .byte 000 / c[]:c[] - .byte 200 / c[]:f[] - .byte 200 / c[]:d[] - .byte 200 / c[]:[][] - - .byte 250 / f[]:i - .byte 250 / f[]:c - .byte 113 / f[]:f - .byte 125 / f[]:d - .byte 000 / f[]:i[] - .byte 000 / f[]:c[] - .byte 000 / f[]:f[] - .byte 100 / f[]:d[] - .byte 000 / f[]:[][] - - .byte 260 / d[]:i - .byte 260 / d[]:c - .byte 113 / d[]:f - .byte 125 / d[]:d - .byte 000 / d[]:i[] - .byte 000 / d[]:c[] - .byte 000 / d[]:f[] - .byte 000 / d[]:d[] - .byte 000 / d[]:[][] - - .byte 240 / [][]:i - .byte 240 / [][]:c - .byte 113 / [][]:f - .byte 125 / [][]:d - .byte 000 / [][]:i[] - .byte 000 / [][]:c[] - .byte 100 / [][]:f[] - .byte 100 / [][]:d[] - .byte 000 / [][]:[][] - -.even - -/ character type table - -.globl _ctab - -_ctab: .+2 - .byte 000.,127.,127.,127.,127.,127.,127.,127. - .byte 127.,126.,125.,127.,127.,127.,127.,127. - .byte 127.,127.,127.,127.,127.,127.,127.,127. - .byte 127.,127.,127.,127.,127.,127.,127.,127. - .byte 126.,034.,122.,127.,127.,044.,047.,121. - .byte 006.,007.,042.,040.,009.,041.,127.,043. - .byte 124.,124.,124.,124.,124.,124.,124.,124. - .byte 124.,124.,008.,001.,063.,080.,065.,090. - .byte 127.,123.,123.,123.,123.,123.,123.,123. - .byte 123.,123.,123.,123.,123.,123.,123.,123. - .byte 123.,123.,123.,123.,123.,123.,123.,123. - .byte 123.,123.,123.,004.,127.,005.,049.,127. - .byte 127.,123.,123.,123.,123.,123.,123.,123. - .byte 123.,123.,123.,123.,123.,123.,123.,123. - .byte 123.,123.,123.,123.,123.,123.,123.,123. - .byte 123.,123.,123.,002.,048.,003.,127.,127. - diff --git a/last1120c/c10.c b/last1120c/c10.c deleted file mode 100644 index ad02520..0000000 --- a/last1120c/c10.c +++ /dev/null @@ -1,469 +0,0 @@ -/* - - C compiler, part 2 - - Copyright 1972 Bell Telephone Laboratories, Inc. - -*/ - -ospace() {} /* fake */ - -waste() /* waste space */ -{ - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); -} -main(argc, argv) -char argv[][]; -{ - extern fout, fin, nerror, line; - extern getwrd, rcexpr, ospace, tmpfil; - extern cctab[], regtab[], efftab[], sptab[]; - int sp[], c, table[], tabtab[3][], tree; - - if (argc<4) { - error("Arg count"); - exit(1); - } - if((fin=open(argv[1],0))<0) { - error("Cant't find %s", argv[1]); - exit(1); - } - if((fout=creat(argv[3],017))<0) { - error("Can't create %s", argv[3]); - exit(1); - } - tmpfil = argv[2]; - - tabtab[0] = regtab; - tabtab[1] = efftab; - tabtab[2] = cctab; - tabtab[3] = sptab; - while(c=getchar()) { - if(c=='#') { - sp = ospace; - c = getwrd(); - tree = getwrd(); - table = tabtab[getwrd()]; - line = getwrd(); - while(c--) - *sp++ = getwrd(); - rcexpr(tree, table, 0); - } else - putchar(c); - } - flush(); - exit(nerror!=0); -} - -match(tree, table, nreg) -int tree[], table[]; { - extern opdope[], dcalc, notcompat; - int op, d1, d2, t1, t2, p1[], p2[]; - char mp[]; - - if (tree==0) - return(0); - op = *tree; - if (op>=29) /* if not leaf */ - p1 = tree[3]; - else - p1 = tree; - t1 = p1[1]; - d1 = dcalc(p1, nreg); - if ((opdope[op]&01)!=0) { /* binary? */ - p2 = tree[4]; - t2 = p2[1]; - d2 = dcalc(p2, nreg); - } - while(*table) { - if (*table++ == op) goto foundop; - table++; - } - return(0); -foundop: - table = *table; -nxtry: - mp = table; - if (*mp == 0) - return(0); - if (d1 > (*mp&077) | (*mp>=0100)&(*p1!=36)) - goto notyet; - if (notcompat(t1, mp[1])) - goto notyet; - if ((opdope[op]&01)!=0 & p2!=0) { - if (d2 > (mp[2]&077) | (mp[2]>=0100)&(*p2!=36)) - goto notyet; - if (notcompat(t2,mp[3])) - goto notyet; - } -now: - return(table[2]); -notyet: - table = table+3; - goto nxtry; -} - -rcexpr(tree, table, reg) -int tree[]; { - extern cexpr, regtab, cctab, sptab, printf, error; - extern jumpc, cbranch; - - if(tree==0) - return; - if(*tree >= 103) { - (*tree==103?jumpc:cbranch)(tree[1],tree[2],tree[3],0); - return; - } - if (cexpr(tree, table, reg)) - return; - if (table!=regtab) - if(cexpr(tree, regtab, reg)) { - if (table==sptab) - printf("mov r%d,-(sp)\n", reg); - if (table==cctab) - printf("tst r%d\n", reg); - return; - } - error("No match for op %d", *tree); -} - -cexpr(tree, table, reg) -int tree[][], table[]; { - extern match, nreg, printf, pname, putchar, regtab; - extern sptab, cctab, rcexpr, prins, rlength, popstk; - extern collcon, isn, label, branch, cbranch, fltmod; - int p1[], p2[], c, r, p[], otable[], ctable[], regtab[], cctab[]; - char string[], match[]; - - if ((c = *tree)==100) { /* call */ - p1 = tree[3]; - p2 = tree[4]; - r = 0; - if(p2) { - while (*p2==9) { /* comma */ - rcexpr(p2[4], sptab, 0); - r =+ rlength((p=p2[4])[1]); - p2 = p2[3]; - } - rcexpr(p2, sptab, 0); - r =+ rlength(p2[1]); - } - *tree = 101; - tree[2] = r; /* save arg length */ - } - if(c==90) { /* ? */ - cbranch(tree[3], c=isn++, 0, reg); - rcexpr(tree[4][3], table, reg); - branch(r=isn++, 0); - label(c); - rcexpr(tree[4][4], table, reg); - label(r); - return(1); - } - if ((string=match(tree, table, nreg-reg))==0) - return(0); - p1 = tree[3]; - p2 = tree[4]; -loop: - switch(c = *string++) { - - case '\0': - p = tree; - if (*p==101 & p[2]>0) { - popstk(p[2]); - } - return(1); - - /* A1 */ - case 'A': - p = tree[3]; - goto adr; - - /* A2 */ - case 'B': - p = tree[4]; - goto adr; - - /* A */ - case 'O': - p = tree; - adr: - pname(p); - goto loop; - - /* I */ - case 'M': - if ((c = *string)=='\'') - string++; else - c = 0; - prins(*tree, c); - goto loop; - - /* B1 */ - case 'C': - p = tree[3]; - goto pbyte; - - /* BF */ - case 'P': - p = tree; - goto pb1; - - /* B2 */ - case 'D': - p = tree[4]; - pbyte: - if (p[1]==1) /* char type? */ - putchar('b'); -pb1: - if (isfloat(p)) - putchar('f'); - goto loop; - - /* BE */ - case 'L': - if (tree[3][1]==1 | tree[4][1]==1) - putchar('b'); - goto loop; - - /* C1 */ - case 'E': - p = p1[3]; - goto const; - - /* C2 */ - case 'F': - p = p2[3]; - const: - printf("%o", p); - goto loop; - - /* F */ - case 'G': - p = p1; - goto subtre; - - /* S */ - case 'K': - p = p2; - goto subtre; - - /* H */ - case 'H': - p = tree; - - subtre: - ctable = regtab; - r = reg; - c = *string++ - 'A'; - if ((c&02)!=0) - ctable = sptab; - if ((c&04)!=0) - ctable = cctab; - if((c&010)!=0) - r = reg+1; - if((c&01)!=0) - if(*p==36) { - p = p[3]; - if(collcon(p) & ctable!=sptab) - p = p[3]; - } - rcexpr(p, ctable, r); - goto loop; - - /* R */ - case 'I': - r = reg; - goto preg; - - /* R1 */ - case 'J': - r = reg+1; - preg: - printf("r%d", r); - goto loop; - - case '#': - p = p1[3]; - goto nmbr; - - case '"': - p = p2[3]; - goto nmbr; - case '~': - p = tree[3]; - - nmbr: - if(collcon(p)) { - c = *p; - if(r = (p=p[4])[3]) - printf("%o", c==40?r:-r); - } - goto loop; - - /* M */ - case 'N': - if ((c=isfloat(tree, &string))==fltmod) - goto loop; - printf((fltmod=c)==2?"setf\n":"setd\n"); - goto loop; - - /* Z */ - case 'Z': - printf("$%o", p1[4]); - goto loop; - } - putchar(c); - goto loop; -} - -pname(p) -int p[][][]; { - extern putchar, printf, error; - char np[]; - int i; - -loop: - switch(*p) { - - case 21: /* const */ - printf("$%o", p[3]); - return; - - case 22: /* string */ - printf("$l%d", p[3]); - return; - - case 20: /* name */ - switch(p[3]) { - - case 5: /* auto, param */ - printf("%o(r5)", p[4]); - return; - - /* extern */ - case 6: - printf("%p", &p[4]); - return; - - } - printf("L%d", p[4]); - return; - - case 35: /* & */ - putchar('$'); - p = p[3]; - goto loop; - - case 36: /* * */ - putchar('*'); - p = p[3]; - goto loop; - } - error("pname called illegally"); -} - -dcalc(p, nreg) -int p[]; { - int op, t; - - if (p==0) - return(0); - op = *p; - switch (op) { - - case 20: /* name */ - case 22: /* string */ - case 23: /* float */ - case 24: /* double */ - return(12); - - case 21: /* short constant */ - return(p[3]==0? 4:8); - - case 35: /* & */ - return(12); - - case 36: /* * */ - if ((op=dcalc(p[3], nreg))<16) - return(16); - } - -def: - return(p[2]<=nreg? 20: 24); -} - -notcompat(at, st) { - - if (st==0) /* word, byte */ - return(at>1 & at<16); - if (st==1) /* word */ - return(at>0 & at<16); - st =- 2; - if (st==2 & at==3) - at = 2; - return(st != at); -} - -prins(op, c) { - extern instab[], printf; - int insp[]; - - insp = instab; - while(*insp) { - if (*insp++ == op) { - if ((c = insp[c!=0])==0) - goto err; - printf("%s", c); - return; - } else - insp = insp + 2; - } -err: - error("No match' for op %d", op); -} - -collcon(p) -int p[]; { - int p1[]; - - if(*p==40 | *p==41) - if(*(p1=p[4])==21) - return(1); - return(0); -} - -isfloat(t, s) -int t[]; -char s[][]; -{ - extern opdope[]; - int rt; - - rt = **s - '0'; - if (rt==2 | rt==4) { - (*s)++; - return(rt>2?3:2); - } - if ((opdope[t[0]]&010)!=0) /* relational */ - t = t[3]; - if ((rt=t[1])>=2 & rt<=3) - return(rt); - return(0); -} - -nreg 4; -isn 10000; -namsiz 8; -line; -tmpfil; -nerror; -fltmod; - diff --git a/last1120c/c11.c b/last1120c/c11.c deleted file mode 100644 index 1733ad3..0000000 --- a/last1120c/c11.c +++ /dev/null @@ -1,251 +0,0 @@ -jumpc(tree, lbl, cond) -int tree[]; { - extern jump, cctab[], rcexpr, isn, label, branch, cbranch; - int l1, l2; - - if (tree==0) - return; - switch(*tree) { - - /* & */ - case 47: - if (cond) { - cbranch(tree[3], l1=isn++, 0, 0); - cbranch(tree[4], l1, 0, 0); - jump(lbl); - label(l1); - } else { - cbranch(tree[3], l1=isn++, 0, 0); - cbranch(tree[4], l2=isn++, 1, 0); - label(l1); - jump(lbl); - label(l2); - } - return; - - /* | */ - case 48: - if (cond) { - cbranch(tree[3], l1=isn++, 1, 0); - cbranch(tree[4], l2=isn++, 0, 0); - label(l1); - jump(lbl); - label(l2); - } else { - cbranch(tree[3], l1=isn++, 1, 0); - cbranch(tree[4], l1, 1, 0); - jump(lbl); - label(l1); - } - return; - - /* ! */ - case 34: - jumpc(tree[3], lbl, !cond); - return; - } - rcexpr(tree, cctab, 0); - branch(l1=isn++, *tree, cond); - jump(lbl); - label(l1); - return; -} - -cbranch(tree, lbl, cond, reg) -int tree[]; { - extern branch, cctab[], rcexpr, isn, label; - int l1; - - if (tree==0) - return; - switch(*tree) { - - /* & */ - case 47: - if (cond) { - cbranch(tree[3], l1=isn++, 0, reg); - cbranch(tree[4], lbl, 1, reg); - label(l1); - } else { - cbranch(tree[3], lbl, 0, reg); - cbranch(tree[4], lbl, 0, reg); - } - return; - - /* | */ - case 48: - if (cond) { - cbranch(tree[3], lbl, 1, reg); - cbranch(tree[4], lbl, 1, reg); - } else { - cbranch(tree[3], l1=isn++, 1, reg); - cbranch(tree[4], lbl, 0, reg); - label(l1); - } - return; - - /* ! */ - case 34: - cbranch(tree[3], lbl, !cond, reg); - return; - } - rcexpr(tree, cctab, reg); - branch(lbl, *tree, !cond); - return; -} - - -branch(lbl, op, c) { - extern printf, prins, opdope[]; - - if(op) { - if((opdope[op]&04)==0) - op = 61; - prins(op,c); - } else - printf("br"); - printf("\tl%d\n", lbl); -} - -jump(lab) { - extern printf; - - printf("jmp\tl%d\n", lab); -} - -label(l) { - extern printf; - - printf("l%d:", l); -} - - -popstk(a) { - extern printf; - - switch(a) { - - case 0: - return; - - case 2: - printf("tst (sp)+\n"); - return; - - case 4: - printf("cmp (sp)+,(sp)+\n"); - return; - } - printf("add $%o,sp\n", a); -} - -length(t) { - - if (t<0) - t =+ 020; - if (t>=020) - return(2); - switch(t) { - - case 0: - return(2); - - case 1: - return(1); - - case 2: - return(4); - - case 3: - return(8); - - case 4: - return(4); - - } - return(1024); -} - -rlength(c) { - extern length; - auto l; - - return((l=length(c))==1? 2: l); -} - -printn(n,b) { - extern putchar; - auto a; - - if(a=n/b) /* assignment, not test for equality */ - printn(a, b); /* recursive */ - putchar(n%b + '0'); -} - -printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) -char fmt[]; { - extern printn, putchar, namsiz, ncpw; - char s[]; - auto adx[], x, c, i[]; - - adx = &x1; /* argument pointer */ -loop: - while((c = *fmt++) != '%') { - if(c == '\0') - return; - putchar(c); - } - x = *adx++; - switch (c = *fmt++) { - - case 'd': /* decimal */ - case 'o': /* octal */ - if(x < 0) { - x = -x; - if(x<0) { /* - infinity */ - if(c=='o') - printf("100000"); - else - printf("-32767"); - goto loop; - } - putchar('-'); - } - printn(x, c=='o'?8:10); - goto loop; - - case 's': /* string */ - s = x; - while(c = *s++) - putchar(c); - goto loop; - - case 'p': - s = x; - putchar('_'); - c = namsiz; - while(c--) - if(*s) - putchar(*s++); - goto loop; - } - putchar('%'); - fmt--; - adx--; - goto loop; -} - -error(s, p1, p2) { - extern printf, line, fout, flush, putchar, nerror; - int f; - - nerror++; - flush(); - f = fout; - fout = 1; - printf("%d: ", line); - printf(s, p1, p2); - putchar('\n'); - fout = f; -} - diff --git a/last1120c/c1t.s b/last1120c/c1t.s deleted file mode 100644 index f0fa30d..0000000 --- a/last1120c/c1t.s +++ /dev/null @@ -1,171 +0,0 @@ -/ C operator tables - -.globl _getwrd - -.globl getw -.globl fopen -.globl _tmpfil - -.data -_getwrd: 1f -.text -1: - tst buf - bne 1f - mov _tmpfil,r0 - jsr r5,fopen; buf - bes botchp -1: - jsr r5,getw; buf - bes botchp - rts pc -botchp: - mov $1,r0 - sys write; botch; ebotch-botch - sys exit -botch: - ; ebotch: -.even -.bss -buf: .=.+518. -.text -.globl _opdope -.globl _instab - -_instab:.+2 - 40.; 1f; 1f; .data; 1:; .text - 70.; 1b; 1b - 41.; 2f; 2f; .data; 2:; .text - 71.; 2b; 2b - 30.; 3f; 1b; .data; 3:; .text - 31.; 4f; 2b; .data; 4:; .text - 32.; 3b; 1b - 33.; 4b; 2b - - 45.; 2b; 5f; .data; 5:; .text - 46.; 6f; 7f; .data; 6:; 7:<(r4)\0>; .text - 75.; 2b; 5b - 76.; 6b; 7b - 43.; 7b; 1f; .data; 1:; .text - 44.; 5b; 0 - 73.; 7b; 1b - 74.; 5b; 0 - - 60.; 0f; 1f; .data; 0:; 1:; .text - 61.; 1b; 0b - 62.; 2f; 5f; .data; 2:; 5:; .text - 63.; 3f; 4f; .data; 3:; 4:; .text - 64.; 4b; 3b - 65.; 5b; 2b - 66.; 6f; 9f; .data; 6:; 9:; .text - 67.; 7f; 8f; .data; 7:; 8:; .text - 68.; 8b; 7b - 69.; 9b; 6b - 0 - .data - .even - .text - -_opdope:.+2 - 00000 / EOF - 00000 / ; - 00000 / { - 00000 / } - 36000 / [ - 02000 / ] - 36000 / ( - 02000 / ) - 02000 / : - 07001 / , - 00000 / 10 - 00000 / 11 - 00000 / 12 - 00000 / 13 - 00000 / 14 - 00000 / 15 - 00000 / 16 - 00000 / 17 - 00000 / 18 - 00000 / 19 - 00000 / name - 00000 / short constant - 00000 / string - 00000 / float - 00000 / double - 00000 / 25 - 00000 / 26 - 00000 / 27 - 00000 / 28 - 00000 / 29 - 34002 / ++pre - 34002 / --pre - 34002 / ++post - 34002 / --post - 34020 / !un - 34002 / &un - 34020 / *un - 34000 / -un - 34020 / ~un - 00000 / 39 - 30101 / + - 30001 / - - 32101 / * - 32001 / / - 32001 / % - 26061 / >> - 26061 / << - 20161 / & - 16161 / | - 16161 / ^ - 00000 / 50 - 00000 / 51 - 00000 / 52 - 00000 / 53 - 00000 / 54 - 00000 / 55 - 00000 / 56 - 00000 / 57 - 00000 / 58 - 00000 / 59 - 22105 / == - 22105 / != - 24105 / <= - 24105 / < - 24105 / >= - 24105 / > - 24105 /

p - 24105 / >=p - 12013 / =+ - 12013 / =- - 12013 / =* - 12013 / =/ - 12013 / =% - 12053 / =>> - 12053 / =<< - 12053 / =& - 12053 / =| - 12053 / =^ - 12013 / = - 00000 / 81 - 00000 / 82 - 00000 / 83 - 00000 / int -> float - 00000 / int -> double - 00000 / float -> int - 00000 / float -> double - 00000 / double -> int - 00000 / double -> float - 14001 / ? - 00000 / 91 - 00000 / 92 - 00000 / 93 - 00000 / int -> float - 00000 / int -> double - 00000 / float -> double - 00000 / int -> int[] - 00000 / int -> float[] - 00000 / int -> double[] - 36001 / call - 36001 / mcall diff --git a/last1120c/cctab.s b/last1120c/cctab.s deleted file mode 100644 index 9788639..0000000 --- a/last1120c/cctab.s +++ /dev/null @@ -1,118 +0,0 @@ -/ c code tables-- set condition codes - -.globl _cctab - -_cctab=.;.+2 - 20.; rest - 21.; rest - 22.; rest - 30.; rest - 31.; rest - 34.; rest - 35.; rest - 36.; rest - 37.; rest - 40.; rest - 41.; rest - 42.; rest - 43.; rest - 44.; rest - 45.; rest - 46.; rest - 47.; rest - 48.; rest - 60.; cc60 - 61.; cc60 - 62.; cc60 - 63.; cc60 - 64.; cc60 - 65.; cc60 - 66.; cc60 - 67.; cc60 - 68.; cc60 - 69.; cc60 - 70.; rest - 71.; rest - 72.; rest - 73.; rest - 74.; rest - 75.; rest - 76.; rest - 77.; rest - 78.; rest - 79.; rest - 80.; rest - -/ relationals -cc60: -%a,z - tstB1 A1 - -%n*,z - F* - tstB1 #1(R) - -%n,z - F - tst R - -%a,a - cmpBE A1,A2 - -%n*,a - F* - cmpBE #1(R),A2 - -%n,a - F - cmpB2 R,A2 - -%n*,e* - F* - S1* - cmpBE #1(R),#2(R1) - -%n*,e - F* - S1 - cmpB1 #1(R),R1 - -%n,e* - F - S1* - cmpB2 R,#2(R1) - -%n,e - F - S1 - cmp R,R1 - -%n*,n* - FS* - S* - cmpBE (sp)+,#2(R) - -%n*,n - FS* - S - cmpB1 *(sp)+,R - -%n,n* - FS - S* - cmpB2 (sp)+,#2(R) - -%n,n - FS - S - cmp (sp)+,R - -/ set codes right -rest: -%n,n - H - -.data -.even -.text - diff --git a/last1120c/cvopt.c b/last1120c/cvopt.c deleted file mode 100644 index 63224ce..0000000 --- a/last1120c/cvopt.c +++ /dev/null @@ -1,357 +0,0 @@ -main() { -/* - A1 -> A - A2 B - A O - B1 C - B2 D - BE L - BF P - C1 E - C2 F - F G - H H - R I - R1 J - S K - I M - M N - - * +1 - S +2 - C +4 - 1 +8 - - z -> 4 - c 10 - a 14 - e 20 - n 63 - * +0100 -*/ - - extern putchar,getc,peekc,printf,flag,flush; - - auto c,snlflg,nlflg,t,smode,m,ssmode; - - smode = nlflg = snlflg = ssmode = 0; -loop: - c = getc(); - if (c!='\n' & c!='\t') nlflg = 0; - if (ssmode!=0 & c!='%') { - ssmode = 0; - printf(".data\n1:<"); - } - switch(c) { - - case '\0': - printf(".text; 0\n"); - flush(); - return; - - case ':': - if (!smode) - printf("=.+2; 0"); else - putchar(':'); - goto loop; - - case 'A': - if ((c=getc())=='1' | c=='2') { - putchar(c+'A'-'1'); - goto loop; - } - putchar('O'); - peekc = c; - goto loop; - - case 'B': - switch (getc()) { - - case '1': - putchar('C'); - goto loop; - - case '2': - putchar('D'); - goto loop; - - case 'E': - putchar('L'); - goto loop; - - case 'F': - putchar('P'); - goto loop; - } - putchar('?'); - goto loop; - - case 'C': - putchar(getc()+'E'-'1'); - goto loop; - - case 'F': - putchar('G'); - goto subtre; - - case 'R': - if ((c=getc()) == '1') - putchar('J'); else { - putchar('I'); - peekc = c; - } - goto loop; - - case 'H': - putchar('H'); - goto subtre; - - case 'I': - putchar('M'); - goto loop; - - case 'M': - putchar('N'); - snlflg++; - goto loop; - - case 'S': - putchar('K'); -subtre: - snlflg = 1; - t = 'A'; -l1: - switch (c=getc()) { - - case '*': - t++; - goto l1; - - case 'S': - t =+ 2; - goto l1; - - case 'C': - t =+ 4; - goto l1; - - case '1': - t =+ 8; - goto l1; - } - peekc = c; - putchar(t); - goto loop; - - case '#': - if(getc()=='1') - putchar('#'); else - putchar('"'); - goto loop; - - case '%': - if (smode) - printf(".text;"); -loop1: - switch (c=getc()) { - - case 'a': - m = 16; - t = flag(); - goto pf; - - case ',': - putchar(';'); - goto loop1; - - case 'i': - m = 12; - t = flag(); - goto pf; - case 'z': - m = 4; - t = 0; - goto pf; - - case 'c': - t = 0; - m = 8; - goto pf; - - case 'e': - t = flag(); - m = 20; - goto pf; - - case 'n': - t = flag(); - m = 63; -pf: - if ((c=getc())=='*') - m =+ 0100; else - peekc = c; - printf(".byte %o,%o", m, t); - goto loop1; - - case '\n': - printf(";1f\n"); - ssmode = 1; - nlflg = 1; - smode = 1; - goto loop; - } - putchar(c); - goto loop1; - - case '\t': - if (nlflg) { - nlflg = 0; - goto loop; - } - putchar('\t'); - goto loop; - - case '\n': - if (!smode) { - putchar('\n'); - goto loop; - } - if (nlflg) { - nlflg = 0; - printf("\\0>\n.text\n"); - smode = 0; - goto loop; - } - if (!snlflg) - printf("\\n"); - snlflg = 0; - printf(">\n<"); - nlflg = 1; - goto loop; - } - putchar(c); - goto loop; -} - -getc() { - extern getchar, peekc, nofloat; - auto t, ifcnt; - - ifcnt = 0; -gc: - if (peekc) { - t = peekc; - peekc = 0; - } else - t = getchar(); - if (t==0) - return(0); - if (t=='{') { - ifcnt++; - t = getchar(); - } - if (t=='}') { - t = getc(); - if (--ifcnt==0) - if (t=='\n') - t = getc(); - } - if (ifcnt & nofloat) - goto gc; - return(t); -} - -flag() { - extern getc, peekc; - auto c, f; - - f = 0; -l1: - switch(c=getc()) { - - case 'w': - f = 1; - goto l1; - - case 'i': - f = 2; - goto l1; - - case 'b': - f = 3; - goto l1; - - case 'f': - f = 4; - goto l1; - - case 'd': - f = 5; - goto l1; - - case 'p': - f =+ 16; - goto l1; - } - peekc = c; - return(f); -} - -peekc 0; - -putchar(c) { - extern flush, oubuf, ouptr; - char ouptr[], oubuf[]; - auto c1; - - goto init; -init: - ouptr = oubuf; - init = init1; -init1: - if(c1 = c>>8) { - *ouptr++ = c1; - if(ouptr >= oubuf+512) - flush(); - } - if(c =& 0377) { - *ouptr++ = c; - if(ouptr >= oubuf+512) - flush(); - } -} - -flush() { - extern ouptr, oubuf, fout, write; - char ouptr[], oubuf[]; - - write(fout, oubuf, ouptr-oubuf); - ouptr = oubuf; -} - -getcha() { - extern read, incnt, fin, inbuf, inptr; - char inbuf[], inptr[]; - - goto init; -init: - inptr = inbuf; - init = init1; -init1: - if(inptr >= inbuf+incnt) { - inptr = inbuf; - incnt = read(fin, inbuf, 512); - if(!incnt) - return('\0'); - } - return(*inptr++); -} - -inbuf[256]; -oubuf[256]; -inptr 0; -incnt 0; -ouptr 0; -fin 0; -fout 1; -nofloat 0; diff --git a/last1120c/efftab.s b/last1120c/efftab.s deleted file mode 100644 index ada71c3..0000000 --- a/last1120c/efftab.s +++ /dev/null @@ -1,215 +0,0 @@ -/ c code tables - -.globl _efftab - -_efftab=.;.+2 - 30.; ci30 - 31.; ci30 - 32.; ci30 / same as 30 - 33.; ci30 / same as 31 - 80.; ci80 - 70.; ci70 - 71.; ci70 / - like + - 77.; ci77 - 78.; ci78 - 0 - -/ ++ prefix -ci30: -%ai,n -%abp,n -%ab,n - IB1 A1 - -%aip,n - I' $2,A1 - -%nbp*,n -%ni*,n -%nb*,n - F* - IB1 #1(R) - -%nip*,n - F* - I' $2,#1(R) - -/ = -ci80: -%a,z - clrB1 A1 - -%n*,z - F* - clrB1 #1(R) - -%a,aw - movB1 A2,A1 - -%a,nw* - S* - movB1 #2(R),A1 - -%a,n - S - movB1 R,A1 - -%n*,aw - F* - movB1 A2,#1(R) - -%n*,ew* - F* - S1* - movB1 #2(R1),#1(R) - -%n*,e - F* - S1 - movB1 R1,#1(R) - -%e*,nw* - S* - F1* - movB1 #2(R),#1(R1) - -%e*,n - S - F1* - movB1 R,#1(R1) - -%n*,nw* - FS* - S* - movB1 #2(R),*(sp)+ - -%n*,n - FS* - S - movB1 R,*(sp)+ - -/ =| i -ci78: -%a,a - bisBE A2,A1 - -%a,n - S - bisB1 R,A1 - -%n*,a - F* - bisBE A2,#1(R) - -%e*,n* - S* - F1* - bisBE #2(R),#1(R1) - -%e*,n - S - F1* - bisBE R,#1(R1) - -%n*,e* - F* - S1* - bisBE #2(R1),#1(R) - -%n*,e - F* - S1 - bisBE R1,#1(R) - -%n*,n* - FS* - S* - bisBE #2(R),*(sp)+ - -%n*,n - FS* - S - bisBE R,*(sp)+ - -/ =& i -ci77: -%a,c - bicB1 $!C2,A1 - -%a,n - S - com R - bicB1 R,A1 - -%e*,n - S - F1* - com R - bicB1 R,#1(R1) - -%n*,c - F* - bicB1 $!C2,#1(R) - -%n*,e - F* - S1 - com R1 - bicB1 R1,#1(R) - -%n*,n - FS* - S - com R - bicB1 R,*(sp)+ - -/ =+ -ci70: -%aw,aw - I A2,A1 - -%aw,nw* - S* - I #2(R),A1 - -%aw,n - S - I R,A1 - -%ew*,nw* - S* - F1* - I #2(R),#1(R1) - -%a,nw* - S* - movB1 A1,R1 - I #2(R),R1 - movB1 R1,#2(R) - -%a,n - S - movB1 A1,R1 - I R1,R - movB1 R,A1 - -%ew*,n - S - F1* - I R,#1(R1) - -%nw*,n - SS - F* - I (sp)+,#1(R) - -%n*,n - SS - F* - movB1 #1(R),R1 - I (sp)+,R1 - movB1 R1,#1(R) - -.data -.even - diff --git a/last1120c/regtab.s b/last1120c/regtab.s deleted file mode 100644 index 9402684..0000000 --- a/last1120c/regtab.s +++ /dev/null @@ -1,696 +0,0 @@ -/ c code tables-- compile to register - -fp = 1 / enable floating-point - -.globl _regtab - -_regtab=.; .+2 - 20.; cr20 - 21.; cr20 - 22.; cr20 - 30.; cr30 - 31.; cr30 - 32.; cr32 - 33.; cr32 - 34.; cr34 - 35.; cr35 - 29.; cr29 - 36.; cr36 - 37.; cr37 - 38.; cr38 - 101.; cr100 - 80.; cr80 - 40.; cr40 - 41.; cr40 / - like + - 42.; cr42 - 43.; cr43 - 44.; cr43 - 45.; cr45 - 46.; cr45 - 47.; cr47 - 48.; cr48 - 60.; cr60 - 61.; cr60 - 62.; cr60 - 63.; cr60 - 64.; cr60 - 65.; cr60 - 66.; cr60 - 67.; cr60 - 68.; cr60 - 69.; cr60 - 70.; cr70 - 71.; cr70 - 72.; cr72 - 73.; cr73 - 74.; cr73 - 75.; cr75 - 76.; cr75 - 77.; cr77 - 78.; cr78 - 102.; cr102 - 97.; cr97 - 0 - -/ goto -cr102: -%i,n - jmp *A1 - -%n*,n - F* - jmp *#1(R) - -%n,n - F - jmp (R) - -/ call -cr100: -%n*,n - F* - jsr pc,*#1(R) - -%a,n - jsr pc,*A1 - -%n,n - F - jsr pc,(R) - -/ name, constant -cr20: -%z,n - clr R - -%aw,n - mov A,R - -%ab,n - movb A,R - -.if fp -%af,n - M - movf A,R - -.endif - -/++,-- prefix -cr30: -%ai,n -%abp,n -%ab,n - IB1 A1 - movB1 A1,R - -%a,n - I' $2,A1 - mov A1,R - -%nbp*,n -%ni*,n -%nb*,n - F* - IB1 #1(R) - movB1 #1(R),R - -%n*,n - F* - I' $2,#1(R) - mov #1(R),R - -/ ++,-- postfix -cr32: -%ai,n -%abp,n -%ab,n - movB1 A1,R - IB1 A1 - -%a,n - mov A1,R - I' $2,A1 - -%nbp*,n -%nb*,n -%ni*,n - F* - movB1 #1(R),-(sp) - IB1 #1(R) - movB1 (sp)+,R - -%n*,n - F* - mov #1(R),-(sp) - I' $2,#1(R) - mov (sp)+,R - -/ ! -cr34: -%n,n - FC - beq 1f - clr R - br 2f -1: mov $1,R -2: - -/ &unary -cr35: -%a,n - mov $A1,R - -/ & unary of auto -cr29: -%e,n - mov r5,R - add Z,R - -/ *unary -cr36: -%abp*,n - F - movb (R),R - -%a*,n - F - mov (R),R - -%abp,n - movb *A1,R - -%a,n - mov *A1,R - -%nbp*,n - F* - movb *#1(R),R - -%n*,n - F* - mov *#1(R),R - -%nbp,n - H* - movb ~(R),R - -%n,n - H* - mov ~(R),R - -/ - unary -cr37: -%n,n - F - neg R - -/ ~ -cr38: -%n,n - F - com R - -/ = -cr80: -%a,n - S - movB1 R,A1 - -%n*,a - F* - movB1 A2,#1(R) - movB1 #1(R),R - -%n*,e - F* - S1 - movB1 R1,#1(R) - mov R1,R - -%n*,n - FS* - S - movB1 R,*(sp)+ - -/ | -cr48: -%n,a - F - bisB2 A2,R - -%n,e* - F - S1* - bisB2 #2(R1),R - -%n,e - F - S1 - bis R1,R - -%n,n - FS - S - bis (sp)+,R - -/ & -cr47: -%n,c - F - bic $!C2,R - -%n,e - F - S1 - com R1 - bic R1,R - -%n,n - FS - S - com (sp) - bic (sp)+,R - -/ relationals -cr60: -%n,n - HC - I 2f - clr R - br 1f -2: mov $1,R -1: - -/ >>, << -cr45: -%a,aw - movB1 A1,I' - I A2,lsh - movB1 I',R - -%n*,aw - F* - movB1 #1(R),I' - I A2,lsh - movB1 I',R - -%n,aw - F - mov R,I' - I A2,lsh - mov I',R - -%a,nw* - S* - movB1 A1,(r4) - I #2(R),lsh - mov (r4),R - -%a,n - S - movB1 A1,I' - I R,lsh - mov I',R - -%n,n - FS - S - mov (sp)+,I' - I R,lsh - mov I',R - -/ +, - -cr40: -%n,aw - F - I A2,R - -%n,ew* - F - S1* - I #2(R1),R - -%n,e - F - S1 - I R1,R - -%n,nw* - SS* - F - I *(sp)+,R - -%n,n - SS - F - I (sp)+,R - -/ * -cr42: -%aw,a - mov A1,(r4)+ - movB2 A2,(r4) - mov -(r4),R - -%n,a - F - mov R,(r4)+ - movB2 A2,(r4) - mov -(r4),R - -%n,e - F - S1 - mov R,(r4)+ - mov R1,(r4) - mov -(r4),R - -%n,n - FS - S - mov (sp)+,(r4)+ - mov R,(r4) - mov -(r4),R - -/ /; mod -cr43: -%a,a - movB1 A1,(r4) - movB2 A2,div - mov I,R - -%a,n - S - movB1 A1,(r4) - mov R,div - mov I,R - -%n,a - F - mov R,(r4) - movB2 A2,div - mov I,R - -%n,e - F - S1 - mov R,(r4) - mov R1,div - mov I,R - -%e,n - S - F1 - mov R1,(r4) - mov R,div - mov I,R - -%n,n - FS - S - mov (sp)+,(r4) - mov R,div - mov I,R - -/ =* -cr72: -%a,a - movB1 A1,(r4) - movB2 A2,mul - movB1 (r4),A1 - mov (r4),R - -%a,n - S - mov R,(r4)+ - movB1 A1,(r4) - mov -(r4),R - movB1 R,A1 - -%n*,a - F* - movB1 #1(R),(r4) - movB2 A2,mul - movB1 (r4),#1(R) - mov (r4),R - -%n*,e - F* - S1 - movB1 #1(R),(r4) - mov R1,mul - movB1 (r4),#1(R) - mov (r4),R - -%e*,n - S - F1* - movB1 #1(R1),(r4) - mov R,mul - movB1 (r4),#1(R1) - mov (r4),R - -%n*,n - FS* - S - movB1 *(sp),(r4) - mov R,mul - movB1 (r4),*(sp)+ - mov (r4),R - -/ =mod, =/ -cr73: -%a,a - movB1 A1,(r4) - movB2 A2,div - movB1 I,A1 - mov I,R - -%a,n - S - movB1 A1,(r4) - mov R,div - mov I,R - movB1 R,A1 - -%n*,a - F* - movB1 #1(R),(r4) - movB2 A2,div - movB1 I,#1(R) - mov I,R - -%n*,e - F* - S1 - movB1 #1(R),(r4) - mov R1,div - movB1 I,#1(R) - mov I,R - -%e*,n - S - F1* - movB1 #1(R1),(r4) - mov R,div - movB1 I,#1(R1) - mov I,R - -%n*,n - FS* - S - movB1 *(sp),(r4) - mov R,div - movB1 I,*(sp)+ - mov I,R - -/ =| -cr78: -%a,a - bisBE A2,A1 - movB1 A1,R - -%a,n - S - bisB1 R,A1 - movB1 A1,R - -%n*,a - F* - bisBE A2,#1(R) - movB1 #1(R),R - -%e*,n* - S* - F1* - bisBE #1(R1),#2(R) - movB1 #2(R),R - -%e*,n - S - F1* - bisBE R,#1(R1) - movB1 #1(R1),R - -%n*,e* - F* - S1* - bisBE #2(R1),#1(R) - movB1 #1(R),R - -%n*,e - F* - S1 - bisBE R1,#1(R) - movB2 #1(R),R - -%n*,n* - FS* - S* - bisBE #2(R),*(sp) - movB2 *(sp)+,R - -%n*,n - FS* - S - bisBE R,*(sp) - mov *(sp)+,R - -/ =& -cr77: -%a,c - bicB1 $!C2,A1 - movB2 A1,R - -%a,n - S - com R - bicB1 R,A1 - movB1 A1,R - -%e*,n - S - F1* - com R - bicB1 R,#1(R1) - movB1 #1(R1),R - -%n*,e - F* - S1 - com R1 - bicB1 R1,#1(R) - movB1 #1(R),R - -%n*,n - FS* - S - com R - bicB1 R,*(sp) - movB1 *(sp)+,R - -/ =>>, =<< -cr75: -%a,aw - movB1 A1,I' - I A2,lsh - movB1 I',A1 - movB1 I',R - -%a,n - S - movB1 A1,I' - I R,lsh - movB1 I',A1 - movB1 I',R - -%n*,e - F* - S1 - movB1 #1(R),I' - I R1,lsh - movB1 I',#1(R) - movB1 I',R - -%e*,n - S - F1* - movB1 #1(R1),I' - I R,lsh - movB I',#1(R1) - movB1 I',R - -%n*,n - FS* - S - movB1 *(sp),I' - I R,lsh - movB1 I',*(sp)+ - movB1 I',R - -/ =+ -cr70: -%aw,aw - I A2,A1 - mov A1,R - -%aw,nw* - S* - I #2(R),A1 - mov A1,R - -%aw,n - S - I R,A1 - mov A1,R - -%ew*,nw* - S* - F1* - I #2(R),#1(R1) - mov #1(R1),R - -%a,nw* - S* - movB1 A1,R1 - I #2(R),R1 - movB1 R1,#2(R) - mov R1,R - -%a,n - S - movB1 A1,R1 - I R1,R - movB1 R,A1 - -%ew*,n - S - F1* - I R,#1(R1) - mov #1(R1),R - -%nw*,n - SS - F* - I (sp)+,#1(R) - mov #1(R),R - -%n*,n - SS - F* - movB1 #1(R),R1 - I (sp)+,R1 - movB1 R1,#1(R) - mov R1,R - -/ int -> int[] -cr97: -%n,n - F - asl R - -.data -.even -.text - diff --git a/last1120c/sptab.s b/last1120c/sptab.s deleted file mode 100644 index f359f70..0000000 --- a/last1120c/sptab.s +++ /dev/null @@ -1,167 +0,0 @@ -/ c code tables-- expression to -(sp) - -.globl _sptab - -_sptab=.;.+2 - 20.; cs20 - 21.; cs21 - 22.; cs21 - 30.; cs30 - 31.; cs30 - 32.; cs32 - 33.; cs32 - 35.; cs35 - 36.; cs36 - 40.; cs40 - 41.; cs40 - 42.; cs42 - 47.; cs47 - 48.; cs48 - 0 - - -/ name -cs20: -%aw,n - mov A,-(sp) - -/ constant -cs21: -%z,n - clr -(sp) - -%a,n - mov A,-(sp) - -/ ++,-- prefix -cs30: -%ai,n -%abp,n - I A1 - mov A1,-(sp) - -%aw,n - I' $2,A1 - mov A1,-(sp) - -%nbp*,n -%ni*,n - F* - I #1(R) - mov #1(R),-(sp) - -%nip*,n - F* - mov #1(R),-(sp) - I' $2,#1(R) - -/ ++,-- postfix -cs32: -%ai,n -%abp,n - mov A1,-(sp) - I A1 - -%aip,n - mov A1,-(sp) - I' $2,A1 - -%nbp*,n -%ni*,n - F* - mov #1(R),-(sp) - I #1(R) - -%nip*,n - F* - mov #1(R),-(sp) - I' $2,#1(R) - -/ & unary -cs35: -%i,n - mov $A1,-(sp) - -/ * unary -cs36: -%aw,n - mov *A1,-(sp) - -%nw*,n - F* - mov #1(R),-(sp) - -/ + -cs40: -%n,aw - FS - I A2,(sp) - -%n,nw* - FS - S* - I #2(R),(sp) - -%n,n - FS - S - I R,(sp) - -/ * -cs42: -%aw,a - mov A1,(r4)+ - movB2 A2,(r4) - mov -(r4),-(sp) - -%n,a - F - mov R,(r4)+ - movB2 A2,(r4) - mov -(r4),-(sp) - -%n,nw* - FS - S* - mov (sp)+,(r4)+ - mov #2(R),(r4) - mov -(r4),-(sp) - -%n,n - FS - S - mov (sp)+,(r4)+ - mov R,(r4) - mov -(r4),-(sp) - -/ & -cs47: -%n,c - FS - bic $!C2,(sp) - -%n,n - FS - S - com R - bic R,(sp) - -/ | -cs48: -%n,a - FS - bisB2 A2,(sp) - -%n,n* - FS - S* - bisB2 #2(R),(sp) - -%n,n - FS - S - bis R,(sp) - -.data -.even -.text diff --git a/prestruct/c00.c b/prestruct/c00.c deleted file mode 100644 index 9e65c19..0000000 --- a/prestruct/c00.c +++ /dev/null @@ -1,776 +0,0 @@ -/* C compiler - -Copyright 1972 Bell Telephone Laboratories, Inc. - -*/ - -init(s, t) -char s[]; { - extern symbuf, namsiz; - char symbuf[], sp[]; - int np[], i; - - i = namsiz; - sp = symbuf; - while(i--) - if ((*sp++ = *s++)=='\0') --s; - np = lookup(); - *np++ = 1; - *np = t; -} - -main(argc, argv) -int argv[]; { - extern extdef, eof; - extern fout, fin, nerror, tmpfil, xdflg; - - if(argc<4) { - error("Arg count"); - exit(1); - } - if((fin=open(argv[1],0))<0) { - error("Can't find %s", argv[1]); - exit(1); - } - if((fout=creat(argv[2], 017))<0) { - error("Can't create %s", argv[2]); - exit(1); - } - tmpfil = argv[3]; - xdflg++; - init("int", 0); - init("char", 1); - init("float", 2); - init("double", 3); - init("struct", 4); - init("auto", 5); - init("extern", 6); - init("static", 7); - init("goto", 10); - init("return", 11); - init("if", 12); - init("while", 13); - init("else", 14); - init("switch", 15); - init("case", 16); - init("break", 17); - init("continue", 18); - init("do", 19); - init("default", 20); - xdflg = 0; - while(!eof) { - extdef(); - blkend(); - } - flush(); - flshw(); - exit(nerror!=0); -} - -lookup() { - extern hshtab, hshsiz, pssiz, symbuf, xdflg; - int hshtab[], symbuf[]; - extern hshlen, hshused, nwps; - auto i, j, np[], sp[], rp[]; - - i = 0; - sp = symbuf; - j = nwps; - while(j--) - i =+ *sp++ & 077577; - if (i<0) i = -i; - i =% hshsiz; - i =* pssiz; - while(*(np = &hshtab[i+4])) { - sp = symbuf; - j = nwps; - while(j--) - if ((*np++&077577) != *sp++) goto no; - return(&hshtab[i]); -no: if ((i =+ pssiz) >= hshlen) i = 0; - } - if(++hshused > hshsiz) { - error("Symbol table overflow"); - exit(1); - } - rp = np = &hshtab[i]; - sp = symbuf; - j = 4; - while(j--) - *np++ = 0; - j = nwps; - while(j--) - *np++ = *sp++; - *np = 0; - if (xdflg) - rp[4] =| 0200; /* mark non-deletable */ - return(rp); -} - -symbol() { - extern peeksym, peekc, eof, line; - extern csym, symbuf, namsiz, lookup, ctab, cval; - int csym[]; - extern isn, mosflg, xdflg; - auto b, c; - char symbuf[], sp[], ctab[]; - - if (peeksym>=0) { - c = peeksym; - peeksym = -1; - if (c==20) - mosflg = 0; - return(c); - } - if (peekc) { - c = peekc; - peekc = 0; - } else - if (eof) - return(0); else - c = getchar(); -loop: - switch(ctab[c]) { - - case 125: /* newline */ - line++; - - case 126: /* white space */ - c = getchar(); - goto loop; - - case 0: /* EOF */ - eof++; - return(0); - - case 40: /* + */ - return(subseq(c,40,30)); - - case 41: /* - */ - return(subseq(c,subseq('>',41,50),31)); - - case 80: /* = */ - if (subseq(' ',0,1)) return(80); - c = symbol(); - if (c>=40 & c<=49) - return(c+30); - if (c==80) - return(60); - peeksym = c; - return(80); - - case 63: /* < */ - if (subseq(c,0,1)) return(46); - return(subseq('=',63,62)); - - case 65: /* > */ - if (subseq(c,0,1)) return(45); - return(subseq('=',65,64)); - - case 34: /* ! */ - return(subseq('=',34,61)); - - case 43: /* / */ - if (subseq('*',1,0)) - return(43); -com: - c = getchar(); -com1: - if (c=='\0') { - eof++; - error("Nonterminated comment"); - return(0); - } - if (c=='\n') - line++; - if (c!='*') - goto com; - c = getchar(); - if (c!='/') - goto com1; - c = getchar(); - goto loop; - - case 120: /* . */ - case 124: /* number */ - peekc = c; - switch(c=getnum(c=='0'? 8:10)) { - case 25: /* float 0 */ - c = 23; - break; - - case 23: /* float non 0 */ - cval = isn++; - } - return(c); - - case 122: /* " */ - return(getstr()); - - case 121: /* ' */ - return(getcc()); - - case 123: /* letter */ - sp = symbuf; - if (mosflg) { - *sp++ = '.'; - mosflg = 0; - } - while(ctab[c]==123 | ctab[c]==124) { - if (sp= 0) - printf("%o,", c); - printf("0;.even;%s\n", (strflg?d:t)); - return(22); -} - -getcc() -{ - extern cval, ncpw; - auto c, cc; - char cp[]; - - cval = 0; - cp = &cval; - cc = 0; - while((c=mapch('\'')) >= 0) - if(cc++ < ncpw) - *cp++ = c; - if(cc>ncpw) - error("Long character constant"); - return(21); -} - -mapch(c) -{ - extern peekc, line; - auto a; - - if((a=getchar())==c) - return(-1); - switch(a) { - - case '\n': - case 0: - error("Nonterminated string"); - peekc = a; - return(-1); - - case '\\': - switch (a=getchar()) { - - case 't': - return('\t'); - - case 'n': - return('\n'); - - case '0': - return('\0'); - - case 'r': - return('\r'); - - case '\n': - line++; - return('\n'); - } - - } - return(a); -} - -tree() { - extern csym, ctyp, isn, fcval, peeksym, opdope, cp, cmst; - int csym[], opdope[], cp[], cmst[]; - extern space, cval, ossiz, cmsiz, mosflg, osleft; - double fcval; - int space[]; - - int op[], opst[20], pp[], prst[20], andflg, o, - p, ps, os; - - osleft = ossiz; - space = 0; - *space++ = 0; - op = opst; - pp = prst; - cp = cmst; - *op = 200; /* stack EOF */ - *pp = 06; - andflg = 0; - -advanc: - switch (o=symbol()) { - - /* name */ - case 20: - if (*csym==0) - if((peeksym=symbol())==6) { /* ( */ - *csym = 6; /* extern */ - csym[1] = 020; /* int() */ - } else { - csym[1] = 030; /* array */ - if (csym[2]==0) - csym[2] = isn++; - } - *cp++ = block(2,20,csym[1],csym[3],*csym,0); - if (*csym==6) { /* external */ - o = 3; - while(++o<8) { - pblock(csym[o]); - if ((csym[o]&077400) == 0) - break; - } - } else - pblock(csym[2]); - goto tand; - - /* short constant */ - case 21: - case21: - *cp++ = block(1,21,ctyp,0,cval); - goto tand; - - /* floating constant */ - case 23: - *cp++ = block(1,23,3,0,cval); - if (cval) /* non-0 */ - printf(".data;L%d:%o;%o;%o;%o;.text\n",cval,fcval); - goto tand; - - /* string constant: fake a static char array */ - case 22: - *cp++ = block(3, 20, 031, 1, 7, 0, cval); - -tand: - if(cp>=cmst+cmsiz) { - error("Expression overflow"); - exit(1); - } - if (andflg) - goto syntax; - andflg = 1; - goto advanc; - - /* ++, -- */ - case 30: - case 31: - if (andflg) - o =+ 2; - goto oponst; - - /* ! */ - case 34: - /* ~ */ - case 38: - if (andflg) - goto syntax; - goto oponst; - - /* - */ - case 41: - if (!andflg) { - peeksym = symbol(); - if (peeksym==21) { - peeksym = -1; - cval = -cval; - goto case21; - } - o = 37; - } - andflg = 0; - goto oponst; - - /* & */ - /* * */ - case 47: - case 42: - if (andflg) - andflg = 0; else - if(o==47) - o = 35; - else - o = 36; - goto oponst; - - /* ( */ - case 6: - if (andflg) { - o = symbol(); - if (o==7) - o = 101; else { - peeksym = o; - o = 100; - andflg = 0; - } - } - goto oponst; - - /* ) */ - /* ] */ - case 5: - case 7: - if (!andflg) - goto syntax; - goto oponst; - - case 39: /* . */ - mosflg++; - break; - - } - /* binaries */ - if (!andflg) - goto syntax; - andflg = 0; - -oponst: - p = (opdope[o]>>9) & 077; -opon1: - ps = *pp; - if (p>ps | p==ps & (opdope[o]&0200)!=0) { /* right-assoc */ -putin: - switch (o) { - - case 6: /* ( */ - case 4: /* [ */ - case 100: /* call */ - p = 04; - } - if(op>=opst+20) { /* opstack size */ - error("expression overflow"); - exit(1); - } - *++op = o; - *++pp = p; - goto advanc; - } - --pp; - switch (os = *op--) { - - /* EOF */ - case 200: - peeksym = o; - return(*--cp); - - /* call */ - case 100: - if (o!=7) - goto syntax; - build(os); - goto advanc; - - /* mcall */ - case 101: - *cp++ = block(0,0,0,0); /* 0 arg call */ - os = 100; - goto fbuild; - - /* ( */ - case 6: - if (o!=7) - goto syntax; - goto advanc; - - /* [ */ - case 4: - if (o!=5) - goto syntax; - build(4); - goto advanc; - } -fbuild: - build(os); - goto opon1; - -syntax: - error("Expression syntax"); - errflush(o); - return(0); -} - -scdeclare(kw) -{ - extern csym, paraml, parame, peeksym; - int csym[], paraml[], parame[]; - int o; - - while((o=symbol())==20) { /* name */ - if(*csym>0 & *csym!=kw) - redec(); - *csym = kw; - if(kw==8) { /* parameter */ - *csym = -1; - if (paraml==0) - paraml = csym; - else - *parame = csym; - parame = csym; - } - if ((o=symbol())!=9) /* , */ - break; - } - if(o==1 & kw!=8 | o==7 & kw==8) - return; -syntax: - decsyn(o); -} - -tdeclare(kw, offset, mos) -{ - int o, elsize, ds[]; - extern xdflg, peeksym, mosflg, defsym, csym; - int csym[], ssym[]; - - if (kw == 4) { /* struct */ - ssym = 0; - ds = defsym; - mosflg = mos; - if ((o=symbol())==20) { /* name */ - ssym = csym; - o = symbol(); - } - mosflg = mos; - if (o != 6) { /* ( */ - if (ssym==0) - goto syntax; - if (*ssym!=8) /* class structname */ - error("Bad structure name"); - if (ssym[3]==0) { /* no size yet */ - kw = 5; /* deferred MOS */ - elsize = ssym; - } else - elsize = ssym[3]; - peeksym = o; - } else { - if (ssym) { - if (*ssym) - redec(); - *ssym = 8; - ssym[3] = 0; - } - elsize = declist(4); - if ((elsize&01) != 0) - elsize++; - defsym = ds; - if ((o = symbol()) != 7) /* ) */ - goto syntax; - if (ssym) - ssym[3] = elsize; - } - } - mosflg = mos; - if ((peeksym=symbol()) == 1) { /* ; */ - peeksym = -1; - mosflg = 0; - return(offset); - } - do { - offset =+ t1dec(kw, offset, mos, elsize); - if (xdflg & !mos) - return; - } while ((o=symbol()) == 9); /* , */ - if (o==1) - return(offset); -syntax: - decsyn(o); -} - -t1dec(kw, offset, mos, elsize) -{ - int type, nel, defsym[], t1; - extern defsym, mosflg; - - nel = 0; - mosflg = mos; - if ((t1=getype(&nel)) < 0) - goto syntax; - type = 0; - do - type = type<<2 | (t1 & 03); - while(t1 =>> 2); - t1 = type<<3 | kw; - if (defsym[1] & defsym[1]!=t1) - redec(); - defsym[1] = t1; - defsym[3] = elsize; - elsize = length(defsym); - if (mos) { - if (*defsym) - redec(); - else - *defsym = 4; - if ((offset&1)!=0 & elsize!=1) - offset++; - defsym[2] = offset; - } else - if (*defsym == 0) - *defsym = -2; /* default auto */ - if (nel==0) - nel = 1; - defsym[8] = nel; -syntax: - return(nel*elsize); -} - -getype(pnel) -int pnel[]; -{ - int o, type; - extern cval, peeksym, xdflg, defsym, csym, pssiz; - int defsym[], csym[]; - - switch(o=symbol()) { - - case 42: /* * */ - return(getype(pnel)<<2 | 01); - - case 6: /* ( */ - type = getype(pnel); - if ((o=symbol()) != 7) /* ) */ - goto syntax; - goto getf; - - case 20: /* name */ - defsym = csym; - type = 0; - getf: - switch(o=symbol()) { - - case 6: /* ( */ - if (xdflg) { - xdflg = 0; - o = defsym; - scdeclare(8); - defsym = o; - xdflg++; - } else - if ((o=symbol()) != 7) /* ) */ - goto syntax; - type = type<<2 | 02; - goto getf; - - case 4: /* [ */ - if ((o=symbol()) != 5) { /* ] */ - if (o!=21) /* const */ - goto syntax; - *pnel = cval; - if ((o=symbol())!=5) - goto syntax; - } - type = type<<2 | 03; - goto getf; - } - peeksym = o; - return(type); - } -syntax: - decsyn(o); - return(-1); -} - -decsyn(o) -{ - error("Declaration syntax"); - errflush(o); -} - -redec() -{ - extern csym; - int csym[]; - - error("%p redeclared", &csym[4]); -} - -/* storage */ - -regtab 0; -efftab 1; -cctab 2; -sptab 3; -symbuf[4]; -pssiz 9; -namsiz 8; -nwps 4; -hshused; -hshsiz 100; -hshlen 900; /* 9*hshsiz */ -hshtab[900]; -space; -cp; -cmsiz 40; -cmst[40]; -ctyp; -isn 1; -swsiz 120; -swtab[120]; -swp; -contlab; -brklab; -deflab; -nreg 4; -nauto; -stack; -peeksym 0177777; -peekc; -eof; -line 1; -defsym; -xdflg; -csym; -cval; -fcval 0; /* a double number */ -fc1 0; -fc2 0; -fc3 0; -ncpw 2; -nerror; -paraml; -parame; -tmpfil; -strflg; -ossiz 250; -osleft; -mosflg; -debug 0; diff --git a/prestruct/c01.c b/prestruct/c01.c deleted file mode 100644 index 3e7b6d6..0000000 --- a/prestruct/c01.c +++ /dev/null @@ -1,369 +0,0 @@ -build(op) { - extern cp[], cvtab, opdope[], maprel[]; - auto p1[], t1, d1, p2[], t2, d2, p3[], t3, d3, t; - auto d, dope, leftc, cvn, pcvn; - char cvtab[]; - - if (op==4) { /* [] */ - build(40); /* + */ - op = 36; /* * */ - } - dope = opdope[op]; - if ((dope&01)!=0) { /* binary */ - p2 = disarray(*--cp); - t2 = p2[1]; - chkfun(p2); - d2 = p2[2]; - if (*p2==20) - d2 = 0; - } - p1 = disarray(*--cp); - if (op!=100 & op!=35) /* call, * */ - chkfun(p1); - t1 = p1[1]; - d1 = p1[2]; - if (*p1==20) - d1 = 0; - pcvn = 0; - switch (op) { - - /* : */ - case 8: - if (t1!=t2) - error("Type clash in conditional"); - t = t1; - goto nocv; - - /* , */ - case 9: - *cp++ = block(2, 9, 0, 0, p1, p2); - return; - - /* ? */ - case 90: - if (*p2!=8) - error("Illegal conditional"); - t = t2; - goto nocv; - - /* call */ - case 100: - if ((t1&030) != 020) - error("Call of non-function"); - *cp++ = block(2,100,decref(t1),24,p1,p2); - return; - - /* * */ - case 36: - if (*p1==35 | *p1==29) { /* & unary */ - *cp++ = p1[3]; - return; - } - if (*p1!=20 & d1==0) - d1 = 1; - if ((t1&030) == 020) /* function */ - error("Illegal indirection"); - *cp++ = block(1,36,decref(t1),d1,p1); - return; - - /* & unary */ - case 35: - if (*p1==36) { /* * */ - *cp++ = p1[3]; - return; - } - if (*p1==20) { - *cp++ = block(1,p1[3]==5?29:35,incref(t1),1,p1); - return; - } - error("Illegal lvalue"); - break; - - case 43: /* / */ - case 44: /* % */ - case 73: /* =/ */ - case 74: /* =% */ - d1++; - d2++; - - case 42: /* * */ - case 72: /* =* */ - d1++; - d2++; - break; - - case 30: /* ++ -- pre and post */ - case 31: - case 32: - case 33: - chklval(p1); - *cp++ = block(2,op,t1,max(d1,1),p1,plength(p1)); - return; - - case 39: /* . (structure ref) */ - case 50: /* -> (indirect structure ref) */ - if (p2[0]!=20 | p2[3]!=4) /* not mos */ - error("Illegal structure ref"); - *cp++ = p1; - t = t2; - if ((t&030) == 030) /* array */ - t = decref(t); - setype(p1, t); - if (op==39) /* is "." */ - build(35); /* unary & */ - *cp++ = block(1,21,7,0,p2[5]); - build(40); /* + */ - if ((t2&030) != 030) /* not array */ - build(36); /* unary * */ - return; - } - if ((dope&02)!=0) /* lvalue needed on left? */ - chklval(p1); - if ((dope&020)!=0) /* word operand on left? */ - chkw(p1); - if ((dope&040)!=0) /* word operand on right? */ - chkw(p2); - if ((dope&01)==0) { /* unary op? */ - *cp++ = block(1,op,t1,max(d1,1),p1); - return; - } - if (t2==7) { - t = t1; - p2[1] = 0; /* no int cv for struct */ - t2 = 0; - goto nocv; - } - cvn = cvtab[11*lintyp(t1)+lintyp(t2)]; - leftc = cvn&0100; - t = leftc? t2:t1; - if (op==80 & t1!=4 & t2!=4) { /* = */ - t = t1; - if (leftc | cvn!=1) - goto nocv; - } - if (cvn =& 077) { - if (cvn==077) { - illcv: - error("Illegal conversion"); - goto nocv; - } - if (cvn>4 & cvn<10) { /* ptr conv */ - t = 0; /* integer result */ - cvn = 0; - if ((dope&04)!=0) /* relational? */ - goto nocv; - if (op!=41) /* - */ - goto illcv; - pcvn = cvn; - goto nocv; - } - if (leftc) { - if ((dope&010) != 0) { /* =op */ - if (cvn == 1) { - leftc = 0; - cvn = 8; - t = t1; - goto rcvt; - } else - goto illcv; - } - d1 = (p1=convert(p1, t, d1, cvn, plength(p2)))[2]; - } else { - rcvt: - d2 = (p2=convert(p2, t, d2, cvn, plength(p1)))[2]; - } -nocv:; } - if (d1==d2) - d = d1+1; else - d = max(d1,d2); - if ((dope&04)!=0) { /* relational? */ - if (op>61 & t>=010) - op =+ 4; /* ptr relation */ - t = 0; /* relational is integer */ - } - *cp++ = optim(block(2,op,t,d,p1,p2)); - if (pcvn) { - p1 = *--cp; - *cp++ = block(1,50+pcvn,0,d,p1); - } - return; - *cp++ = block(1,op,t1,d1==0?1:d1,p1); -} - -setype(p, t) -int p[]; -{ - int p1[]; - - if ((p[1]&07) != 4) /* not structure */ - return; - p[1] = t; - switch(*p) { - - case 29: /* & */ - case 35: - setype(p[3], decref(t)); - return; - - case 36: /* * */ - setype(p[3], incref(t)); - return; - - case 40: /* + */ - setype(p[4], t); - } -} - -chkfun(p) -int p[]; -{ - if ((p[1]&030)==020) /* func */ - error("Illegal use of function"); -} - -optim(p) -int p[]; -{ - int p1[], p2[], t; - - if (*p != 40) /* + */ - return(p); - p1 = p[3]; - p2 = p[4]; - if (*p1==21) { /* const */ - t = p1; - p1 = p2; - p2 = t; - } - if (*p2 != 21) /* const */ - return(p); - if ((t=p2[3]) == 0) /* const 0 */ - return(p1); - if (*p1!=35 & *p1!=29) /* not & */ - return(p); - p2 = p1[3]; - if (*p2!=20) { /* name? */ - error("C error (optim)"); - return(p); - } - p2[4] =+ t; - return(p1); -} - -disarray(p) -int p[]; -{ - extern cp; - int t, cp[]; - - if (((t = p[1]) & 030)!=030 | p[0]==20&p[3]==4) /* array & not MOS */ - return(p); - p[1] = decref(t); - *cp++ = p; - build(35); /* add & */ - return(*--cp); -} - -convert(p, t, d, cvn, len) -int p[]; -{ - int c, p1[]; - - if (*p==21) { /* constant */ - c = p[3]; - switch(cvn) { - - case 4: /* int -> double[] */ - c =<< 1; - - case 3: /* int -> float[] */ - c =<< 1; - - case 2: /* int -> int[] */ - c =<< 1; - p[3] = c; - return(p); - - case 10: /* i -> s[] */ - p[3] = c*len; - return(p); - } - } - if (cvn==10) /* i -> s[]; retrun i*len */ - return(block(2,42,t,d+2,p,block(1,21,0,0,len))); - return(block(1, 50+cvn, t, max(1,d), p)); -} - -chkw(p) -int p[]; { - extern error; - auto t; - - if ((t=p[1])>1 & t<=07) - error("Integer operand required"); - return; -} - -lintyp(t) -{ - if (t<=07) - return(t); - if ((t&037)==t) - return((t&07)+5); - return(10); -} - -error(s, p1, p2, p3, p4, p5, p6) { - extern line, fout, nerror; - int f; - - nerror++; - flush(); - f = fout; - fout = 1; - printf("%d: ", line); - printf(s, p1, p2, p3, p4, p5, p6); - putchar('\n'); - fout = f; -} - -block(n, op, t, d, p1,p2,p3) -int p1[],p2[],p3[]; { - int p[], ap[], space[]; - extern space; - - ap = &op; - n =+ 3; - p = space; - while(n--) - pblock(*ap++); - return(p); -} - -pblock(p) -{ - extern space, osleft; - int space[]; - - *space++ = p; - if (--osleft<=0) { - error("Expression overflow"); - exit(1); - } -} - -chklval(p) -int p[]; { - extern error; - - if (*p!=20 & *p !=36) - error("Lvalue required"); -} - -max(a, b) -{ - if (a>b) - return(a); - return(b); -} - diff --git a/prestruct/c02.c b/prestruct/c02.c deleted file mode 100644 index 93bd354..0000000 --- a/prestruct/c02.c +++ /dev/null @@ -1,505 +0,0 @@ -extdef() { - extern eof, cval, defsym; - extern csym, strflg, xdflg, peeksym, fcval; - int o, c, cs[], type, csym[], width, nel, ninit, defsym[]; - char s[]; - float sf; - double fcval; - - if(((o=symbol())==0) | o==1) /* EOF */ - return; - type = 0; - if (o==19) { /* keyword */ - if ((type=cval)>4) - goto syntax; /* not type */ - } else { - if (o==20) - csym[4] =| 0200; /* remember name */ - peeksym = o; - } - defsym = 0; - xdflg++; - tdeclare(type, 0, 0); - if (defsym==0) - return; - *defsym = 6; - cs = &defsym[4]; - printf(".globl %p\n", cs); - strflg = 1; - xdflg = 0; - type = defsym[1]; - if ((type&030)==020) { /* a function */ - printf(".text\n%p:\nmov r5,-(sp); mov sp,r5\n", cs); - declist(0); - strflg = 0; - c = 0; - if ((peeksym=symbol())!=2) { /* { */ - blkhed(); - c++; - } - statement(1); - retseq(); - if (c) - blkend(); - return; - } - width = length(defsym); - if ((type&030)==030) /* array */ - width = plength(defsym); - nel = defsym[8]; - ninit = 0; - if ((peeksym=symbol()) == 1) { /* ; */ - printf(".comm %p,%o\n", &defsym[4], nel*width); - peeksym = -1; - return; - } - printf(".data\n%p:", &defsym[4]); -loop: { - ninit++; - switch(o=symbol()) { - - case 22: /* string */ - if (width!=2) - bxdec(); - printf("L%d\n", cval); - break; - - case 41: /* - const */ - if ((o=symbol())==23) { /* float */ - fcval = -fcval; - goto case23; - } - if (o!=21) - goto syntax; - cval = -cval; - - case 21: /* const */ - if (width==1) - printf(".byte "); - if (width>2) { - fcval = cval; - goto case23; - } - printf("%o\n", cval); - break; - - case 20: /* name */ - if (width!=2) - bxdec(); - printf("%p\n", &csym[4]); - break; - - case 23: - case23: - if (width==4) { - sf = fcval; - printf("%o;%o\n", sf); - break; - } - if (width==8) { - printf("%o;%o;%o;%o\n", fcval); - break; - } - bxdec(); - break; - - default: - goto syntax; - - } - } if ((o=symbol())==9) goto loop; /* , */ - if (o==1) { /* ; */ - done: - if (ninit=swtab+swsiz) { - error("Switch table overflow"); - } else { - *swp++ = isn; - *swp++ = cval; - label(isn++); - } - goto stmt; - - /* switch */ - case 15: - o1 = brklab; - brklab = isn++; - np = pexpr(); - if (np[1]>1 & np[1]<07) - error("Integer required"); - rcexpr(block(1,110,0,0,np), regtab); - pswitch(); - brklab = o1; - return; - - /* default */ - case 20: - if (swp==0) - error("Default not in switch"); - if ((o=symbol())!=8) /* : */ - goto syntax; - deflab = isn++; - label(deflab); - goto stmt; - } - - error("Unknown keyword"); - goto syntax; - - /* name */ - case 20: - if (peekc==':') { - peekc = 0; - if (csym[0]>0) { - error("Redefinition"); - goto stmt; - } - csym[0] = 7; - csym[1] = 030; /* int[] */ - if (csym[2]==0) - csym[2] = isn++; - label(csym[2]); - goto stmt; - } - } - - peeksym = o; - rcexpr(tree(), efftab); - goto semi; - -semi: - if ((o=symbol())!=1) /* ; */ - goto syntax; - return; - -syntax: - error("Statement syntax"); - errflush(o); - goto stmt; -} - -pexpr() -{ - auto o, t; - - if ((o=symbol())!=6) /* ( */ - goto syntax; - t = tree(); - if ((o=symbol())!=7) /* ) */ - goto syntax; - return(t); -syntax: - error("Statement syntax"); - errflush(o); - return(0); -} - -pswitch() { - extern swp[], isn, swtab[], printf, deflab, statement, brklab; - extern label; - int sswp[], dl, cv, swlab; - - sswp = swp; - if (swp==0) - swp = swtab; - swlab = isn++; - printf("jsr pc,bswitch; l%d\n", swlab); - dl = deflab; - deflab = 0; - statement(0); - if (!deflab) { - deflab = isn++; - label(deflab); - } - printf("L%d:.data;L%d:", brklab, swlab); - while(swp>sswp & swp>swtab) { - cv = *--swp; - printf("%o; l%d\n", cv, *--swp); - } - printf("L%d; 0\n.text\n", deflab); - deflab = dl; - swp = sswp; -} - -blkhed() -{ - extern symbol, cval, peeksym, paraml[], parame[]; - extern error, rlength, setstk, defvec, isn, defstat; - extern stack, hshtab[], hshsiz, pssiz; - int al, pl, cs[], hl, t[]; - - declist(0); - stack = al = 0; - pl = 4; - while(paraml) { - *parame = 0; - paraml = *(cs = paraml); - if (cs[1]==2) /* float args -> double */ - cs[1] = 3; - cs[2] = pl; - *cs = 10; - if ((cs[1]&030) == 030) /* array */ - cs[1] =- 020; /* set ref */ - pl =+ rlength(cs); - } - cs = hshtab; - hl = hshsiz; - while(hl--) { - if (cs[4]) { - if (cs[0]>1 & (cs[1]&07)==05) { /* referred structure */ - t = cs[3]; - cs[3] = t[3]; - cs[1] = cs[1]&077770 | 04; - } - switch(cs[0]) { - - /* sort unmentioned */ - case -2: - cs[0] = 5; /* auto */ - - /* auto */ - case 5: - al =- trlength(cs); - cs[2] = al; - break; - - /* parameter */ - case 10: - cs[0] = 5; - break; - - /* static */ - case 7: - cs[2] = isn; - printf(".bss; L%d: .=.+%o; .text\n", - isn++, trlength(cs)); - break; - - } - } - cs = cs+pssiz; - } - setstk(al); -} - -blkend() { - extern hshtab[], hshsiz, pssiz, hshused, debug; - auto i, hl; - - i = 0; - hl = hshsiz; - while(hl--) { - if(hshtab[i+4]) { -if (debug) -if (hshtab[i]!=1) -error("%p %o %o %o %o %o", - &hshtab[i+4], - hshtab[i], - hshtab[i+1], - hshtab[i+2], - hshtab[i+3], - hshtab[i+8]); - if (hshtab[i]==0) - error("%p undefined", &hshtab[i+4]); - if((hshtab[i+4]&0200)==0) { /* not top-level */ - hshtab[i+4] = 0; - hshused--; - } - } - i =+ pssiz; - } -} - -errflush(o) { - extern symbol, peeksym, eof; - - while(o>3) /* ; { } */ - o = symbol(); - peeksym = o; -} - -declist(mosflg) -{ - extern peeksym, csym[], cval; - auto o, offset; - - offset = 0; - while((o=symbol())==19 & cval<10) - if (cval<=4) - offset = tdeclare(cval, offset, mosflg); - else - scdeclare(cval); - peeksym = o; - return(offset); -} - -easystmt() -{ - extern peeksym, peekc, cval; - - if((peeksym=symbol())==20) /* name */ - return(peekc!=':'); /* not label */ - if (peeksym==19) { /* keyword */ - switch(cval) - - case 10: /* goto */ - case 11: /* return */ - case 17: /* break */ - case 18: /* continue */ - return(1); - return(0); - } - return(peeksym!=2); /* { */ -} - -branch(lab) -{ - printf("br L%d\n", lab); -} - diff --git a/prestruct/c03.c b/prestruct/c03.c deleted file mode 100644 index 4ca078c..0000000 --- a/prestruct/c03.c +++ /dev/null @@ -1,251 +0,0 @@ -retseq() -{ - printf("jmp retrn\n"); -} - -decref(t) -{ - - if ((t & 077770) == 0) { - error("Illegal indirection"); - return(t); - } - return((t>>2) & 077770 | t&07); -} - -incref(t) -{ - return((t<<2)&077740 | (t&07) | 010); -} - -jumpc(tree, lbl, cond) -int tree[]; -{ - extern cctab, block, rcexpr; - - rcexpr(block(1,easystmt()+103,tree,lbl,cond),cctab); -} - -rcexpr(tree, table) -int tree[], table; -{ - extern space, putwrd, putchar, line; - int c, sp[]; - - if (tree == 0) - return; - putchar('#'); - c = space; - c =/ 2; /* # addresses per word */ - sp = 0; - putwrd(c); - putwrd(tree); - putwrd(table); - putwrd(line); - while(c--) - putwrd(*sp++); -} - -jump(lab) { - extern printf; - - printf("jmp\tl%d\n", lab); -} - -label(l) { - extern printf; - - printf("L%d:", l); -} - -setstk(a) { - extern printf, stack; - auto ts; - - ts = a-stack; - stack = a; - switch(ts) { - - case 0: - return; - - case 0177776: /* -2 */ - printf("tst -(sp)\n"); - return; - - case 0177774: /* -4 */ - printf("cmp -(sp),-(sp)\n"); - return; - } - printf("add $%o,sp\n", ts); -} - -plength(p) -int p[]; -{ - int t, l; - - if (((t=p[1])&077770) == 0) /* not a reference */ - return(1); - p[1] = decref(t); - l = length(p); - p[1] = t; - return(l); -} - -length(cs) -int cs[]; -{ - extern hshtab[]; - int t; - - t = cs[1]; - if ((t&030) == 030) /* array */ - t = decref(t); - if (t>=010) - return(2); - switch(t&07) { - - case 0: /* int */ - return(2); - - case 1: /* char */ - return(1); - - case 2: /* float */ - return(4); - - case 3: /* double */ - return(8); - - case 4: /* structure */ - if (cs>=hshtab) /* in namelist */ - return(cs[3]); - return(getlen(cs)); - - case 5: - error("Bad structure"); - return(0); - } - error("Compiler error (length)"); -} - -getlen(p) -int p[]; -{ - int p1[]; - - switch(*p) { - - case 20: /* name */ - return(p[2]); - - case 35: - case 29: /* & */ - case 36: /* * */ - case 100: /* call */ - case 41: /* - */ - return(getlen(p[3])); - - case 40: /* + */ - p1 = p[4]; - if ((p1[1]&07) == 04) - return(getlen(p1)); - return(getlen(p[3])); - } - error("Unimplemented pointer conversion"); - return(0); -} - -rlength(cs) -int cs[]; -{ - auto l; - - if (((l=length(cs))&01) != 0) - l++; - return(l); -} - -tlength(cs) -int cs[]; -{ - int nel; - - if ((nel = cs[8]) == 0) - nel = 1; - return(length(cs)*nel); -} - -trlength(cs) -int cs[]; -{ - int l; - - if (((l=tlength(cs))&01) != 0) - l++; - return(l); -} - -printn(n,b) { - extern putchar; - auto a; - - if(a=n/b) /* assignment, not test for equality */ - printn(a, b); /* recursive */ - putchar(n%b + '0'); -} - -printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) -char fmt[]; { - extern printn, putchar, namsiz, ncpw; - char s[]; - auto adx[], x, c, i[]; - - adx = &x1; /* argument pointer */ -loop: - while((c = *fmt++) != '%') { - if(c == '\0') - return; - putchar(c); - } - x = *adx++; - switch (c = *fmt++) { - - case 'd': /* decimal */ - case 'o': /* octal */ - if(x < 0) { - x = -x; - if(x<0) { /* - infinity */ - if(c=='o') - printf("100000"); - else - printf("-32767"); - goto loop; - } - putchar('-'); - } - printn(x, c=='o'?8:10); - goto loop; - - case 's': /* string */ - s = x; - while(c = *s++) - putchar(c); - goto loop; - - case 'p': - s = x; - putchar('_'); - c = namsiz; - while(c--) - if (*s) - putchar((*s++)&0177); - goto loop; - } - putchar('%'); - fmt--; - adx--; - goto loop; -} - diff --git a/prestruct/c10.c b/prestruct/c10.c deleted file mode 100644 index e8a451d..0000000 --- a/prestruct/c10.c +++ /dev/null @@ -1,588 +0,0 @@ -/* - - C compiler, part 2 - - Copyright 1972 Bell Telephone Laboratories, Inc. - -*/ - -waste() /* waste space */ -{ - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); - waste(waste(waste),waste(waste),waste(waste)); -} -main(argc, argv) -char argv[][]; -{ - extern fout, fin, nerror, line; - extern getwrd, rcexpr, tmpfil; - extern cctab[], regtab[], efftab[], sptab[]; - int sp[], c, table[], tabtab[3][], tree; - - if (argc<4) { - error("Arg count"); - exit(1); - } - if((fin=open(argv[1],0))<0) { - error("Cant't find %s", argv[1]); - exit(1); - } - if((fout=creat(argv[3],017))<0) { - error("Can't create %s", argv[3]); - exit(1); - } - tmpfil = argv[2]; - - tabtab[0] = regtab; - tabtab[1] = efftab; - tabtab[2] = cctab; - tabtab[3] = sptab; - while(c=getchar()) { - if(c=='#') { - sp = 0; - c = getwrd(); - tree = getwrd(); - table = tabtab[getwrd()]; - line = getwrd(); - while(c--) - *sp++ = getwrd(); - rcexpr(tree, table, 0); - } else - putchar(c); - } - flush(); - exit(nerror!=0); -} - -match(tree, table, nreg) -int tree[], table[]; { - extern opdope[], cctab, maprel; - int op, d1, d2, t1, t2, p1[], p2[], dope, cctab[]; - int maprel[]; - char mp[]; - - if (tree==0) - return(0); - op = *tree; - if (op>=29) /* if not leaf */ - p1 = tree[3]; - else - p1 = tree; - t1 = p1[1]; - d1 = dcalc(p1, nreg); - if (((dope=opdope[op])&01)!=0) { /* binary? */ - p2 = tree[4]; - t2 = p2[1]; - d2 = dcalc(p2, nreg); - if (d2>d1 & (dope&0100)!=0) /* commute? */ - if (table!=cctab | (op!=47&op!=48)) { /* commute? */ - if ((dope&04)!=0) /* relation? */ - *tree = op = maprel[op-60]; - dope = t1; - t1 = t2; - t2 = dope; - dope = p1; - tree[3] = p1 = p2; - tree[4] = p2 = dope; - dope = d1; - d1 = d2; - d2 = dope; - dope = t1; - t1 = t2; - t2 = dope; - } - } - while(*table) { - if (*table++ == op) goto foundop; - table++; - } - return(0); -foundop: - table = *table; -nxtry: - mp = table; - if (*mp == 0) - return(0); - if (d1 > (*mp&077) | (*mp>=0100)&(*p1!=36)) - goto notyet; - if (notcompat(t1, mp[1])) - goto notyet; - if ((opdope[op]&01)!=0 & p2!=0) { - if (d2 > (mp[2]&077) | (mp[2]>=0100)&(*p2!=36)) - goto notyet; - if (notcompat(t2,mp[3])) - goto notyet; - } -now: - return(table[2]); -notyet: - table = table+3; - goto nxtry; -} - -rcexpr(tree, table, reg) -int tree[]; { - extern cexpr, regtab, cctab, sptab, printf, error; - extern jumpc, cbranch; - int r, modf; - - if(tree==0) - return(0); - if(*tree == 103 | *tree==104) { - (*tree==103?jumpc:cbranch)(tree[1],tree[2],tree[3],0); - return(0); - } - modf = isfloat(tree)? 'f':0; - if (*tree == 110) { /* force r0 */ - if((r=rcexpr(tree[3], table, reg)) != 0) - printf("mov%c r%d,r0\n", modf, r); - return(0); - } - if ((r=cexpr(tree, table, reg))>=0) - return(r); - if (table!=regtab) - if((r=cexpr(tree, regtab, reg))>=0) { - if (table==sptab) - printf("mov%c r%d,-(sp)\n", modf, r); - if (table==cctab) { - if (modf=='f') - printf("cfcc\n"); - printf("tst%c r%d\n", modf, r); - } - return(0); - } - error("No match for op %d", *tree); -} - -cexpr(tree, table, reg) -int tree[][], table[]; { - extern match, nreg, printf, pname, putchar, regtab; - extern sptab, cctab, rcexpr, prins, rlength, popstk; - extern collcon, isn, label, branch, cbranch; - extern maprel[]; - int p1[], p2[], c, r, p[], otable[], ctable[], regtab[], cctab[]; - int sptab[]; - char string[], match[]; - int reg1, rreg; - - if ((c = *tree)==100) { /* call */ - p1 = tree[3]; - p2 = tree[4]; - r = 0; - if(*p2) { - while (*p2==9) { /* comma */ - rcexpr(p2[4], sptab, 0); - r =+ arlength((p=p2[4])[1]); - p2 = p2[3]; - } - rcexpr(p2, sptab, 0); - r =+ arlength(p2[1]); - } - *tree = 101; - tree[2] = r; /* save arg length */ - } - if(c==90) { /* ? */ - cbranch(tree[3], c=isn++, 0, reg); - rcexpr(tree[4][3], table, reg); - branch(r=isn++, 0); - label(c); - reg = rcexpr(tree[4][4], table, reg); - label(r); - goto retrn; - } - reg = oddreg(tree, reg); - reg1 = reg+1; - if ((string=match(tree, table, nreg-reg))==0) - return(-1); - p1 = tree[3]; - p2 = tree[4]; -loop: - switch(c = *string++) { - - case '\0': - p = tree; - if (*p==101) { - if (p[2]>0) - popstk(p[2]); - reg = 0; - } -retrn: - c = isfloat(tree); - if (table==cctab & c) - printf("cfcc\n"); - if (!c) - if ((c = *tree)==43 | c==73) - reg--; - return(reg); - - /* A1 */ - case 'A': - p = tree[3]; - goto adr; - - /* A2 */ - case 'B': - p = tree[4]; - goto adr; - - /* A */ - case 'O': - p = tree; - adr: - pname(p); - goto loop; - - /* I */ - case 'M': - if ((c = *string)=='\'') - string++; else - c = 0; - prins(*tree, c); - goto loop; - - /* B1 */ - case 'C': - if ((c = *tree)<28) - p = tree; - else - p = tree[3]; - goto pbyte; - - /* BF */ - case 'P': - p = tree; - goto pb1; - - /* B2 */ - case 'D': - p = tree[4]; - pbyte: - if (p[1]==1) /* char type? */ - putchar('b'); - pb1: - if (isfloat(p)) - putchar('f'); - goto loop; - - /* BE */ - case 'L': - if (tree[3][1]==1 | tree[4][1]==1) - putchar('b'); - p = tree; - goto pb1; - - /* C1 */ - case 'E': - p = p1[3]; - goto const; - - /* C2 */ - case 'F': - p = p2[3]; - const: - printf("%o", p); - goto loop; - - /* F */ - case 'G': - p = p1; - goto subtre; - - /* S */ - case 'K': - p = p2; - goto subtre; - - /* H */ - case 'H': - p = tree; - - subtre: - ctable = regtab; - r = reg; - c = *string++ - 'A'; - if ((c&02)!=0) - ctable = sptab; - if ((c&04)!=0) - ctable = cctab; - if((c&010)!=0) - r = reg1; - if((c&01)!=0) - if(*p==36) { - p = p[3]; - if(collcon(p) & ctable!=sptab) - p = p[3]; - } - rreg = rcexpr(p, ctable, r); - if (rreg==r | ctable!=regtab) - goto loop; - if (string[-2]=='G') /* left operand */ - if (oddreg(tree, 0)==1) { - printf("mov r%d,r%d\n", rreg, r); - goto loop; - } - if (r==reg) { - reg = rreg; - reg1 = rreg+1; - } else - reg1 = rreg; - goto loop; - - /* R */ - case 'I': - r = reg; - if (*string=='-') { - string++; - r--; - } - goto preg; - - /* R1 */ - case 'J': - r = reg1; - preg: - if (r>=5) - error("Register overflow: simplify expression"); - printf("r%d", r); - goto loop; - - case '#': - p = p1[3]; - goto nmbr; - - case '"': - p = p2[3]; - goto nmbr; - - case '~': - p = tree[3]; - - nmbr: - if(collcon(p)) { - if (*p==41) /* - */ - putchar('-'); - switch (*(p = p[4])) { - - case 21: /* number */ - if (p[3]) - printf("%d.", p[3]); - break; - - case 35: /* & name */ - pname(p[3]); - break; - - } - } - goto loop; - - /* V */ - case 'V': - tree[0] = maprel[(c=tree[0])-60]; - goto loop; - - /* Z */ - case 'Z': - printf("$%o", p1[5]+p1[4]); - goto loop; - - case '^': /* for ++ -- */ - printf("%o", tree[4]); - goto loop; - } - putchar(c); - goto loop; -} - -pname(p) -int p[][]; { - char np[]; - int i; - -loop: - switch(*p) { - - case 21: /* const */ - printf("$%o", p[3]); - return; - - case 23: /* float const */ - printf("L%d", p[3]); - return; - - casename: - case 20: /* name */ - if (i=p[4]) - printf("%d.+", i); - switch(p[3]) { - - case 5: /* auto, param */ - printf("%d.(r5)", p[5]); - return; - - /* extern */ - case 6: - printf("%p", &p[5]); - return; - - case 4: - error("Illegal structure reference"); - printf("$0"); - return; - - } - printf("L%d", p[5]); - return; - - case 35: /* & */ - putchar('$'); - p = p[3]; - goto loop; - - case 36: /* * */ - putchar('*'); - p = p[3]; - goto loop; - - } - error("pname called illegally"); -} - -dcalc(p, nreg) -int p[]; { - int op, t, p1[], p2[]; - - if (p==0) - return(0); - op = *p; - switch (op) { - - case 20: /* name */ - case 35: /* & (non-automatic) */ - return(12); - - case 21: /* short constant */ - return(p[3]==0? 4:8); - - case 23: /* float const */ - return(p[3]==0? 4:12); - - case 36: /* * */ - p1 = p[3]; - if (*p1==20) /* name or offset name */ - return(12); - } - -def: - return(p[2]<=nreg? 20: 24); -} - -notcompat(at, st) { - - if (st==0) /* word, byte */ - return(at>1 & at<=07); - if (st==1) /* word */ - return(at>0 & at<=07); - st =- 2; - if ((at&077740) != 0) - at = 020; /* *int for **stuff */ - if ((at&077770) != 0) - at = at&07 | 020; - if (st==2 & at==3) - at = 2; - return(st != at); -} - -prins(op, c) { - extern instab[], printf; - int insp[]; - - insp = instab; - while(*insp) { - if (*insp++ == op) { - if ((c = insp[c!=0])==0) - goto err; - printf("%s", c); - return; - } else - insp = insp + 2; - } -err: - error("No match' for op %d", op); -} - -collcon(p) -int p[]; { - int p1[], t[]; - - if(*p==40 | *p==41) { - if(*(p1=p[4])==21) { /* number */ - return(1); - } - if (*p1==35) - return(1); - if (*(p1=p[3])==35) { - p1 = p[3]; - p[3] = p[4]; - p[4] = p1; - return(1); - } - } - return(0); -} - -isfloat(t) -int t[]; -{ - extern opdope[]; - int rt; - - if ((opdope[t[0]]&04)!=0) /* relational */ - t = t[3]; - if ((rt=t[1])>=2 & rt<=3) - return(rt); - return(0); -} - -nreg 3; -isn 10000; -namsiz 8; -line; -tmpfil; -nerror; - -oddreg(t, reg) -int t[]; -{ - if (!isfloat(t)) - switch(*t) { - case 43: /* / */ - case 44: /* % */ - case 73: /* =/ */ - case 74: /* =% */ - reg++; - - case 42: /* * */ - case 72: /* =* */ - return(reg|1); - } - return(reg); -} - -arlength(t) -{ - int arl; - - if ((arl=rlength(t)) == 4) - return(8); - return(arl); -} - -maprel[] 60, 61, 64, 65, 62, 63, 68, 69, 66, 67; - diff --git a/prestruct/c11.c b/prestruct/c11.c deleted file mode 100644 index 948b3c7..0000000 --- a/prestruct/c11.c +++ /dev/null @@ -1,261 +0,0 @@ -jumpc(tree, lbl, cond) -int tree[]; { - extern jump, cctab[], rcexpr, isn, label, branch, cbranch; - int l1, l2; - - if (tree==0) - return; - switch(*tree) { - - /* & */ - case 47: - if (cond) { - cbranch(tree[3], l1=isn++, 0, 0); - cbranch(tree[4], l1, 0, 0); - jump(lbl); - label(l1); - } else { - cbranch(tree[3], l1=isn++, 0, 0); - cbranch(tree[4], l2=isn++, 1, 0); - label(l1); - jump(lbl); - label(l2); - } - return; - - /* | */ - case 48: - if (cond) { - cbranch(tree[3], l1=isn++, 1, 0); - cbranch(tree[4], l2=isn++, 0, 0); - label(l1); - jump(lbl); - label(l2); - } else { - cbranch(tree[3], l1=isn++, 1, 0); - cbranch(tree[4], l1, 1, 0); - jump(lbl); - label(l1); - } - return; - - /* ! */ - case 34: - jumpc(tree[3], lbl, !cond); - return; - } - rcexpr(tree, cctab, 0); - branch(l1=isn++, *tree, cond); - jump(lbl); - label(l1); - return; -} - -cbranch(tree, lbl, cond, reg) -int tree[]; { - extern branch, cctab[], rcexpr, isn, label; - int l1; - - if (tree==0) - return; - switch(*tree) { - - /* & */ - case 47: - if (cond) { - cbranch(tree[3], l1=isn++, 0, reg); - cbranch(tree[4], lbl, 1, reg); - label(l1); - } else { - cbranch(tree[3], lbl, 0, reg); - cbranch(tree[4], lbl, 0, reg); - } - return; - - /* | */ - case 48: - if (cond) { - cbranch(tree[3], lbl, 1, reg); - cbranch(tree[4], lbl, 1, reg); - } else { - cbranch(tree[3], l1=isn++, 1, reg); - cbranch(tree[4], lbl, 0, reg); - label(l1); - } - return; - - /* ! */ - case 34: - cbranch(tree[3], lbl, !cond, reg); - return; - } - rcexpr(tree, cctab, reg); - branch(lbl, *tree, !cond); - return; -} - - -branch(lbl, op, c) { - extern printf, prins, opdope[]; - - if(op) { - if((opdope[op]&04)==0) - op = 61; - prins(op,c); - } else - printf("br"); - printf("\tl%d\n", lbl); -} - -jump(lab) { - extern printf; - - printf("jmp\tl%d\n", lab); -} - -label(l) { - extern printf; - - printf("l%d:", l); -} - - -popstk(a) { - extern printf; - - switch(a) { - - case 0: - return; - - case 2: - printf("tst (sp)+\n"); - return; - - case 4: - printf("cmp (sp)+,(sp)+\n"); - return; - } - printf("add $%o,sp\n", a); -} - -length(t) { - - if (t>=010) - return(2); - switch(t) { - - case 0: - return(2); - - case 1: - return(1); - - case 2: - return(4); - - case 3: - return(8); - - case 4: - return(4); - - } - return(1024); -} - -rlength(c) { - extern length; - auto l; - - return((l=length(c))==1? 2: l); -} - -printd(n) { - int a; - - if(a=n/10) - printd(a); - putchar(n%10 + '0'); -} - -printo(n) -{ - int a; - if (a = (n>>3) & 017777) - printo(a); - putchar((n&07) + '0'); -} - -printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) -char fmt[]; { - extern namsiz, ncpw; - char s[]; - auto adx[], x, c, i[]; - - adx = &x1; /* argument pointer */ -loop: - while((c = *fmt++) != '%') { - if(c == '\0') - return; - putchar(c); - } - x = *adx++; - switch (c = *fmt++) { - - case 'o': - printo(x); - goto loop; - - case 'd': /* decimal */ - if(x < 0) { - x = -x; - if(x<0) { /* - infinity */ - printf("-32768"); - goto loop; - } - putchar('-'); - } - printd(x); - goto loop; - - case 'c': - if (x) - putchar(x); - goto loop; - - case 's': /* string */ - s = x; - while(c = *s++) - putchar(c); - goto loop; - - case 'p': - s = x; - putchar('_'); - c = namsiz; - while(c--) - if(*s) - putchar((*s++)&0177); - goto loop; - } - putchar('%'); - fmt--; - adx--; - goto loop; -} - -error(s, p1, p2) { - extern printf, line, fout, flush, putchar, nerror; - int f; - - nerror++; - flush(); - f = fout; - fout = 1; - printf("%d: ", line); - printf(s, p1, p2); - putchar('\n'); - fout = f; -} -