From 143992fe86a833431c4a2d1edf9dd46bc44d5ee2 Mon Sep 17 00:00:00 2001
From: princevijay27
Date: Wed, 8 Jan 2025 12:22:59 +0530
Subject: [PATCH 1/8] Add test cases for payloads, rounds, models
- Added test cases to verify the payload values based on different scenarios.
- Implemented tests to check round transitions based on event triggers, ensuring correct state transitions from initial to final states.
- Verified the correctness of the model functionality under varying conditions.
Tests include validation of round state transitions, payload correctness, and model accuracy.
---
packages/packages.json | 36 +-
.../valory/agents/optimus/aea-config.yaml | 26 +-
.../contracts/balancer_vault/contract.yaml | 4 +-
.../balancer_weighted_pool/contract.yaml | 6 +-
packages/valory/contracts/erc20/contract.yaml | 8 +-
.../contracts/merkl_distributor/contract.yaml | 6 +-
.../staking_activity_checker/contract.yaml | 4 +-
.../contracts/staking_token/contract.yaml | 6 +-
.../sturdy_yearn_v3_vault/contract.yaml | 6 +-
.../contract.yaml | 6 +-
.../contracts/uniswap_v3_pool/contract.yaml | 6 +-
.../customs/asset_lending/component.yaml | 4 +-
.../balancer_pools_search/component.yaml | 4 +-
.../customs/max_apr_selection/component.yaml | 4 +-
.../customs/merkl_pools_search/component.yaml | 4 +-
.../uniswap_pools_search/component.yaml | 4 +-
packages/valory/services/optimus/service.yaml | 2 +-
.../skills/liquidity_trader_abci/skill.yaml | 42 +--
.../tests/test_diaglogues.py | 28 ++
.../tests/test_handlers.py | 29 ++
.../tests/test_models.py | 35 ++
.../tests/test_payloads.py | 89 +++++
.../tests/test_rounds.py | 178 +++++++++
.../valory/skills/optimus_abci/skill.yaml | 16 +-
poetry.lock | 355 +++++++++++++++++-
25 files changed, 805 insertions(+), 103 deletions(-)
create mode 100644 packages/valory/skills/liquidity_trader_abci/tests/test_diaglogues.py
create mode 100644 packages/valory/skills/liquidity_trader_abci/tests/test_handlers.py
create mode 100644 packages/valory/skills/liquidity_trader_abci/tests/test_models.py
create mode 100644 packages/valory/skills/liquidity_trader_abci/tests/test_payloads.py
create mode 100644 packages/valory/skills/liquidity_trader_abci/tests/test_rounds.py
diff --git a/packages/packages.json b/packages/packages.json
index 4e8229a3..fa792c82 100644
--- a/packages/packages.json
+++ b/packages/packages.json
@@ -1,23 +1,23 @@
{
"dev": {
- "custom/valory/merkl_pools_search/0.1.0": "bafybeibywngxfy5e2crtkvgfvad2ciepg3qk3h54eg3vbjoxwvf2j55wzq",
- "custom/valory/asset_lending/0.1.0": "bafybeihsq7hhdgcc5wqxbqrioxaqsrza4424wqlv3hqkemomsb337pocki",
- "custom/valory/max_apr_selection/0.1.0": "bafybeih255rl4tnom2gvg2b3t2glpgcgck3orrerbhmayd7cbnggglbh7e",
- "custom/valory/balancer_pools_search/0.1.0": "bafybeievabkqmmpq252giacmdlxl5kk5r3qdl6rdnh4iwkx3fzsqvkejwm",
- "custom/valory/uniswap_pools_search/0.1.0": "bafybeiaqkkpgzx7krvgu7xhbe65mgtq7vyhkx4rztny7qcczrjonxc3uwm",
- "contract/valory/balancer_weighted_pool/0.1.0": "bafybeib755ksie5yv4wn6jl7i3bpshlhscf4bzsabqrbahm6b3m5ixzmbi",
- "contract/valory/balancer_vault/0.1.0": "bafybeidgdivmrm77yotgpnn567ayzhoqa6hufrijy2cj2b7w5wa63otzq4",
- "contract/valory/erc20/0.1.0": "bafybeifl3yoh66uwdyfzz65ed4dnc7gyhvvgcmzxjm4exhkupvurhjcb6m",
- "contract/valory/uniswap_v3_non_fungible_position_manager/0.1.0": "bafybeiht7qjxkamjmq22o74f5faz3wqpb3cx2grl2t4zc2zxqjkzitc22a",
- "contract/valory/uniswap_v3_pool/0.1.0": "bafybeia2pkvje5lcqdwmvltu4v5qyxamj6icswxftufu3wamxdm4w7nz3q",
- "contract/valory/merkl_distributor/0.1.0": "bafybeiegvzycswa7kdimhnjvhrtbrzu3zycnianhrdizq5i53ql7jf5poa",
- "contract/valory/staking_token/0.1.0": "bafybeic4ug4p22q4hsh5z4hhjrishvnswino2fsleqsgdxlusd5h2x5hwy",
- "contract/valory/staking_activity_checker/0.1.0": "bafybeidziyf4o763sw3fqlqjbpz3thrupuwx44barj72zj7tjnxbvkhoxa",
- "contract/valory/sturdy_yearn_v3_vault/0.1.0": "bafybeieruhikfob2lporaysckr63y2ynvtqeqadoi2e3olddzv4rhtrwkm",
- "skill/valory/liquidity_trader_abci/0.1.0": "bafybeiehsxe2cx37pxsdkj4jfwf2csv4lqlvkzkvh4cefqtdileoglybry",
- "skill/valory/optimus_abci/0.1.0": "bafybeie45glxsqdosjvsxqky6sghda36aj2dw4wmnpf5jimjfmwbq54vji",
- "agent/valory/optimus/0.1.0": "bafybeigyhmkkpf6adlkwuj7zz66pynopzugxehaatvchkjelyik4juzydi",
- "service/valory/optimus/0.1.0": "bafybeidcn6h5q7cu56bs7k6zdxi4oatsoio7gmnronpprerzqmqj66xf2e"
+ "custom/valory/merkl_pools_search/0.1.0": "bafybeig5rowqmfv6ydn7iufc2jf33pef3uxaudcxgb7whsrliwmtkgat7e",
+ "custom/valory/asset_lending/0.1.0": "bafybeifeomtmaeeqoz6tfltilw3cdgnwj7octuvjewjebtt27lpfcaixie",
+ "custom/valory/max_apr_selection/0.1.0": "bafybeiegz65orpcrbwivhshtpcr63fhv57mmb6zga4b4gy2kse7xpdtpje",
+ "custom/valory/balancer_pools_search/0.1.0": "bafybeibqaxhdb3vqa2ru5gbafbu53rjnnvscbgnsxhola7iuuxx6mfhreu",
+ "custom/valory/uniswap_pools_search/0.1.0": "bafybeiat35grpjpcngmsirjj2zzg3awcjgzkj4ag5mnittbnkcihpo7sgu",
+ "contract/valory/balancer_weighted_pool/0.1.0": "bafybeiedi74xjsrxyf7fc6pov23ol5ycd6fi7v6c6nfgwo6yij6k353cbq",
+ "contract/valory/balancer_vault/0.1.0": "bafybeichirxrzvxughksr3ycjlwsbdeb5rk5hvttqi46bw7djmcmtbecfm",
+ "contract/valory/erc20/0.1.0": "bafybeihbrun3rcmrz4mltx2fizmfwn7mnqvayoehspcx2kocgxxobqifvq",
+ "contract/valory/uniswap_v3_non_fungible_position_manager/0.1.0": "bafybeihdnltmbhy7lcvqby324z4ttp4imnn3k7hctu4mwpkbpjodniudum",
+ "contract/valory/uniswap_v3_pool/0.1.0": "bafybeiga5ftedxgxdzgkspgkyy43f4dpnvnneg5ijsysv2kpf27rboqlyu",
+ "contract/valory/merkl_distributor/0.1.0": "bafybeigrnymn2g4m7yv5bah7r3mphni7cim2pg25uffbtatyvnjip7rp3e",
+ "contract/valory/staking_token/0.1.0": "bafybeic3odqiitp7grubfuukubml73pofxnfwh2dx5zqj4c6zrsc2uel4y",
+ "contract/valory/staking_activity_checker/0.1.0": "bafybeidwyuiv7ef7unrdpkzhpkkbssovfoqqti6ojlcibj4cvqkiyzypbi",
+ "contract/valory/sturdy_yearn_v3_vault/0.1.0": "bafybeih6g2vej5nlcknpaytn7psqi3xaqiu2rjwh5xaorr7gbwutsla76m",
+ "skill/valory/liquidity_trader_abci/0.1.0": "bafybeienjtf6jyj4skxbvcopy4pm7kjgewe5kslcklxn4uwvmdati6zcsy",
+ "skill/valory/optimus_abci/0.1.0": "bafybeibhfqxpfjs4dqmkisptxlzk2fkgbh4sblsqgu6xxqidsfb2uaixje",
+ "agent/valory/optimus/0.1.0": "bafybeic7f7ij5ycd7qldoy7s7xrhy6kb2u4ygic5erxudtyqfjjvvqvubq",
+ "service/valory/optimus/0.1.0": "bafybeigxd5vfmatrfundr7jninnw6kpxgoxnhkzxorysq6pfkxems7hjrq"
},
"third_party": {
"protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi",
diff --git a/packages/valory/agents/optimus/aea-config.yaml b/packages/valory/agents/optimus/aea-config.yaml
index 6454eb61..f1b93f92 100644
--- a/packages/valory/agents/optimus/aea-config.yaml
+++ b/packages/valory/agents/optimus/aea-config.yaml
@@ -5,7 +5,7 @@ license: Apache-2.0
description: An optimism liquidity trader agent.
aea_version: '>=1.19.0, <2.0.0'
fingerprint:
- __init__.py: bafybeigx5mdvnamsqfum5ut7htok2y5vsnu7lrvms5gfvqi7hmv7sfbo3a
+ __init__.py: bafybeia5756suph5q6bri6vf3t6pzturldvb3ngd4tg2csgqd2h44claxi
fingerprint_ignore_patterns: []
connections:
- valory/abci:0.1.0:bafybeie2bc44r2ddspeg4v7minuievvjykomcukuf5ryevom6fajno25gy
@@ -19,11 +19,11 @@ contracts:
- valory/gnosis_safe_proxy_factory:0.1.0:bafybeifr4xpmzeb5hvpgd6h4nxlsu3ef2c3f6l5bgs34vym5ok6vllwhmy
- valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y
- valory/service_registry:0.1.0:bafybeidipx4cmchxdu5i2v67rno7muie7ckjhmasaj64tv2vtj4fveklxi
-- valory/balancer_weighted_pool:0.1.0:bafybeib755ksie5yv4wn6jl7i3bpshlhscf4bzsabqrbahm6b3m5ixzmbi
-- valory/balancer_vault:0.1.0:bafybeidgdivmrm77yotgpnn567ayzhoqa6hufrijy2cj2b7w5wa63otzq4
-- valory/uniswap_v3_non_fungible_position_manager:0.1.0:bafybeiht7qjxkamjmq22o74f5faz3wqpb3cx2grl2t4zc2zxqjkzitc22a
-- valory/uniswap_v3_pool:0.1.0:bafybeia2pkvje5lcqdwmvltu4v5qyxamj6icswxftufu3wamxdm4w7nz3q
-- valory/sturdy_yearn_v3_vault:0.1.0:bafybeieruhikfob2lporaysckr63y2ynvtqeqadoi2e3olddzv4rhtrwkm
+- valory/balancer_weighted_pool:0.1.0:bafybeiedi74xjsrxyf7fc6pov23ol5ycd6fi7v6c6nfgwo6yij6k353cbq
+- valory/balancer_vault:0.1.0:bafybeichirxrzvxughksr3ycjlwsbdeb5rk5hvttqi46bw7djmcmtbecfm
+- valory/uniswap_v3_non_fungible_position_manager:0.1.0:bafybeihdnltmbhy7lcvqby324z4ttp4imnn3k7hctu4mwpkbpjodniudum
+- valory/uniswap_v3_pool:0.1.0:bafybeiga5ftedxgxdzgkspgkyy43f4dpnvnneg5ijsysv2kpf27rboqlyu
+- valory/sturdy_yearn_v3_vault:0.1.0:bafybeih6g2vej5nlcknpaytn7psqi3xaqiu2rjwh5xaorr7gbwutsla76m
protocols:
- open_aea/signing:1.0.0:bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi
- valory/abci:0.1.0:bafybeiaqmp7kocbfdboksayeqhkbrynvlfzsx4uy4x6nohywnmaig4an7u
@@ -36,18 +36,18 @@ protocols:
skills:
- valory/abstract_abci:0.1.0:bafybeif2naoydlrqkdpnig34uejedwgurjwyvmbpcz53tif7pyukfdophq
- valory/abstract_round_abci:0.1.0:bafybeigjddhk7epta7xpnfvv426xedff5abh4xlkwi6cqgp4vkutgkvydm
-- valory/liquidity_trader_abci:0.1.0:bafybeiehsxe2cx37pxsdkj4jfwf2csv4lqlvkzkvh4cefqtdileoglybry
-- valory/optimus_abci:0.1.0:bafybeie45glxsqdosjvsxqky6sghda36aj2dw4wmnpf5jimjfmwbq54vji
+- valory/liquidity_trader_abci:0.1.0:bafybeienjtf6jyj4skxbvcopy4pm7kjgewe5kslcklxn4uwvmdati6zcsy
+- valory/optimus_abci:0.1.0:bafybeibhfqxpfjs4dqmkisptxlzk2fkgbh4sblsqgu6xxqidsfb2uaixje
- valory/registration_abci:0.1.0:bafybeiagi6e2h7kochmlemy5c5yk6hwn37tfxiqvk2en74jhowsdwlmrny
- valory/reset_pause_abci:0.1.0:bafybeiezfedmmseox3ce5aucxsiszdmvskrwwbtpb2a3vw3sbmc5jt7nri
- valory/termination_abci:0.1.0:bafybeiea67epwwgngp7b3wavs6hpkaxv6etyaps6g6325bchfnf354mibq
- valory/transaction_settlement_abci:0.1.0:bafybeifmgmwdkx4esemxjacjwzqkqymkuklb5nehkwqkx7v335fllgswcq
customs:
-- valory/merkl_pools_search:0.1.0:bafybeibywngxfy5e2crtkvgfvad2ciepg3qk3h54eg3vbjoxwvf2j55wzq
-- valory/max_apr_selection:0.1.0:bafybeih255rl4tnom2gvg2b3t2glpgcgck3orrerbhmayd7cbnggglbh7e
-- valory/balancer_pools_search:0.1.0:bafybeievabkqmmpq252giacmdlxl5kk5r3qdl6rdnh4iwkx3fzsqvkejwm
-- valory/uniswap_pools_search:0.1.0:bafybeiaqkkpgzx7krvgu7xhbe65mgtq7vyhkx4rztny7qcczrjonxc3uwm
-- valory/asset_lending:0.1.0:bafybeihsq7hhdgcc5wqxbqrioxaqsrza4424wqlv3hqkemomsb337pocki
+- valory/merkl_pools_search:0.1.0:bafybeig5rowqmfv6ydn7iufc2jf33pef3uxaudcxgb7whsrliwmtkgat7e
+- valory/max_apr_selection:0.1.0:bafybeiegz65orpcrbwivhshtpcr63fhv57mmb6zga4b4gy2kse7xpdtpje
+- valory/balancer_pools_search:0.1.0:bafybeibqaxhdb3vqa2ru5gbafbu53rjnnvscbgnsxhola7iuuxx6mfhreu
+- valory/uniswap_pools_search:0.1.0:bafybeiat35grpjpcngmsirjj2zzg3awcjgzkj4ag5mnittbnkcihpo7sgu
+- valory/asset_lending:0.1.0:bafybeifeomtmaeeqoz6tfltilw3cdgnwj7octuvjewjebtt27lpfcaixie
default_ledger: ethereum
required_ledgers:
- ethereum
diff --git a/packages/valory/contracts/balancer_vault/contract.yaml b/packages/valory/contracts/balancer_vault/contract.yaml
index e12f600d..d14234b7 100644
--- a/packages/valory/contracts/balancer_vault/contract.yaml
+++ b/packages/valory/contracts/balancer_vault/contract.yaml
@@ -6,8 +6,8 @@ description: The contract package for the balancer Vault interface.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeibily2cg2o4zkvol6amu2ewzdq5kmtzlml3qor45na3s7l5fmay2a
- build/Vault.json: bafybeifbvxyx43jmtchbzerapzqeblmmsppfbvfkwrag4nsfydad6bqwje
+ __init__.py: bafybeie2yg7zz3lcxzvq4qsjydvp43epkpqwh72rsab5pthqdadmxewv6q
+ build/Vault.json: bafybeibsy2cxda42brenfs2qvhog7hbs5kokz2tr6daj5d4jcdadonlupy
contract.py: bafybeicu7xsjywccqscshsfwe23kiimvhee74s3u7vpkunglfarszdttke
fingerprint_ignore_patterns: []
contracts: []
diff --git a/packages/valory/contracts/balancer_weighted_pool/contract.yaml b/packages/valory/contracts/balancer_weighted_pool/contract.yaml
index 1988df2e..846f0322 100644
--- a/packages/valory/contracts/balancer_weighted_pool/contract.yaml
+++ b/packages/valory/contracts/balancer_weighted_pool/contract.yaml
@@ -6,9 +6,9 @@ description: The contract package for the balancer WeightedPool interface.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeigdfk3th36mcaoew2of5zo2rrgyc2oqntzznjkii6a3zuafyvriou
- build/WeightedPool.json: bafybeiclbkl3snzwo36nnbvjpge2jfcyo3a7lzzhfsfr4piv3n6djrs3le
- contract.py: bafybeibojzlorprdqnbj4yp64ziheusdbvszijuk7xgeyjrcfzsw6z7koy
+ __init__.py: bafybeieabdck6osm6aeqonyflzx3oc2ytv6rdykjlltxkawcd5jwwm23uq
+ build/WeightedPool.json: bafybeicqma7gs5obx7oesmgqeqldos3oaz624d2llf6sft6tslvacn2tny
+ contract.py: bafybeiaqczbcnpojad4274mrtczi2ziljsmop3b5vtb6m6wz45s3443qyy
fingerprint_ignore_patterns: []
contracts: []
class_name: WeightedPoolContract
diff --git a/packages/valory/contracts/erc20/contract.yaml b/packages/valory/contracts/erc20/contract.yaml
index ac3743dc..1dc88f67 100644
--- a/packages/valory/contracts/erc20/contract.yaml
+++ b/packages/valory/contracts/erc20/contract.yaml
@@ -6,10 +6,10 @@ description: ERC20 token contract
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- README.md: bafybeifmfma6rglvpa22odtozyosnp5mwljum64utxip2wgmezuhnjjjyi
- __init__.py: bafybeif5vpc3dfrlxlch7brbhmdwksabyzddpfqgm56vdbbkek3t3br6ke
- build/ERC20.json: bafybeiemn5b5nszuss7xj6lmvmjuendltp6wz7ubihdvd7c6wqw4bohbpa
- contract.py: bafybeicberios6nbxo5dsaa7aq2w4zho6xrpydnnfczdhxfhteygqnaagm
+ README.md: bafybeif7hmm6izsjzpricvczn6dgyky22g3fryjmni7qdf6gybaalgmv5a
+ __init__.py: bafybeiakinrsb2vekfckyvjewz2c3quhf5gq2556royhuxiu4uhhscgo6m
+ build/ERC20.json: bafybeidc2ciuhnallxjzy4pmq3xhlcm5sotszmwk4ekrhebzncowozxrpa
+ contract.py: bafybeicmhfqe3u2skqx7bkow4avzfuqgrvvzslx7hymp2vqdpwudkjlz74
fingerprint_ignore_patterns: []
contracts: []
class_name: ERC20
diff --git a/packages/valory/contracts/merkl_distributor/contract.yaml b/packages/valory/contracts/merkl_distributor/contract.yaml
index db779ec8..2709596c 100644
--- a/packages/valory/contracts/merkl_distributor/contract.yaml
+++ b/packages/valory/contracts/merkl_distributor/contract.yaml
@@ -6,9 +6,9 @@ description: The contract package for the Merkl Distributor interface.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeigndinzenvr4gauojly3cieqscwf677i72di7nhfu3p3zxx6bmfyy
- build/Distributor.json: bafybeihtbkqhzavgficpiikharncvtysmoyacmqbkntsilrvwph44fkm3a
- contract.py: bafybeieq6hddnw6ib2ufwnrrfr6yo5g4hyidtpn3n2dl6si3yrloymjj3y
+ __init__.py: bafybeictnkdkelaghpkgodnjlfdqqextynue7ra3g5bz2ioxmk27yesaxu
+ build/Distributor.json: bafybeihzpteywhvuujzr2gjmmjfve6aqn6xfwd4k5iqlnwuulqeoyyyc44
+ contract.py: bafybeibftqb6uj44nwq7cz4wa3jpy4allyb3llegypuwrw6l7brpjn24ce
fingerprint_ignore_patterns: []
contracts: []
class_name: DistributorContract
diff --git a/packages/valory/contracts/staking_activity_checker/contract.yaml b/packages/valory/contracts/staking_activity_checker/contract.yaml
index 85381161..4f64a097 100644
--- a/packages/valory/contracts/staking_activity_checker/contract.yaml
+++ b/packages/valory/contracts/staking_activity_checker/contract.yaml
@@ -6,8 +6,8 @@ description: Staking activity checker contract
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeigqm6q7kgfzgpcse7zer5uea3s7myolry2r3teovuzqgkn43j7bei
- build/StakingActivityChecker.json: bafybeiety3kkkmdz2gdzktg54wvmhavftaw4wjnrddztt64jpknagrc6xa
+ __init__.py: bafybeigxhiwzlu2otgglu7wc7wcyprgbx3d56yswl6rnlohpzlhtob2o2y
+ build/StakingActivityChecker.json: bafybeieo4hgyetulkuolv7hxpjwgcvceqrzmg76f3gwhj5jkzt62aryzcy
contract.py: bafybeiagtrdo6icjnzgap23xqaij2ptsdkqka4n25qg5srutoy6bfleqae
fingerprint_ignore_patterns: []
contracts: []
diff --git a/packages/valory/contracts/staking_token/contract.yaml b/packages/valory/contracts/staking_token/contract.yaml
index 83f188d6..0baeef49 100644
--- a/packages/valory/contracts/staking_token/contract.yaml
+++ b/packages/valory/contracts/staking_token/contract.yaml
@@ -6,9 +6,9 @@ description: Service staking token contract
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeianiorzcfwfcty7xli6fytss2tsaj3qbzjhvwyi6whrlv2uoj5tfy
- build/StakingToken.json: bafybeibhcwyawq377innrpq4ytpw5kotufjqo7cyd2rjhyit34mnbks5b4
- contract.py: bafybeigjt7a2biiorp4vmj4d3qkm3xbbohnawoetywojye5akhavlvkrxm
+ __init__.py: bafybeicocn2d7qhmemfevclum46bftxwve73gvhvtbybqsr6nwo7xi4cwa
+ build/StakingToken.json: bafybeig5fpbywcijoiu4wccefjqptgsg2tjc3fjud72js62sr54eihhoeu
+ contract.py: bafybeihu7kos735kxacc2yevjdorv3xlsol2jqexvcce6glt3vbqrfsjau
fingerprint_ignore_patterns: []
contracts: []
class_name: StakingTokenContract
diff --git a/packages/valory/contracts/sturdy_yearn_v3_vault/contract.yaml b/packages/valory/contracts/sturdy_yearn_v3_vault/contract.yaml
index e025901e..7a6c7e2f 100644
--- a/packages/valory/contracts/sturdy_yearn_v3_vault/contract.yaml
+++ b/packages/valory/contracts/sturdy_yearn_v3_vault/contract.yaml
@@ -6,9 +6,9 @@ description: The contract package for the Sturdy's YearnV3Vault interface.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeieykv2czxfvgvhor3bpehhc3bpej3tv3lvmg7zwon64cmt4kbqa4y
- build/YearnV3Vault.json: bafybeifk34657pbpihpoxkelea2pf6ho2z56lum7bxegunclmakvypuc3m
- contract.py: bafybeigyigay3q4j2uwdlrtlbahw2s43odgi6rs6vd4iosyodiow7aitvi
+ __init__.py: bafybeibtui53lghqrf4mwlvfu4x4wuzp6clydnx2a3abwdb22iupfdls5i
+ build/YearnV3Vault.json: bafybeifpvindn4lsmi65rpkq3rgnaf3l5jikju2tpgg3vxrrwhjdae6s3e
+ contract.py: bafybeido2cxsxjmoldq572rwqctyg3wfh6enjja6itsuxdhqv5gtzfmisi
fingerprint_ignore_patterns: []
contracts: []
class_name: YearnV3VaultContract
diff --git a/packages/valory/contracts/uniswap_v3_non_fungible_position_manager/contract.yaml b/packages/valory/contracts/uniswap_v3_non_fungible_position_manager/contract.yaml
index d16baf19..1bdfdab2 100644
--- a/packages/valory/contracts/uniswap_v3_non_fungible_position_manager/contract.yaml
+++ b/packages/valory/contracts/uniswap_v3_non_fungible_position_manager/contract.yaml
@@ -6,9 +6,9 @@ description: The contract package for the Uniswap V3 NonfungiblePositionManager
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeiefxsx4zo3eefe6iyxflho4l3gx2ge7hjm7c62eiyw7zaag4ifbty
- build/NonfungiblePositionManager.json: bafybeihspdbkcgw2mo245bpblhgu3srl3ywynp7eeipzoczqlzcslu7t6y
- contract.py: bafybeidiyhhxbpff27wmenq3tmhz6ytwkstw7zgi5jv4y6wndhlovoxvvq
+ __init__.py: bafybeiedo7rlzia74zpxmzr3f6clsmflrnmnutvbhv53enj7ubiixoq4wi
+ build/NonfungiblePositionManager.json: bafybeigbyk26vvml6p257jxlj2aarut7nywtcpsqfaes6uv3o4se6xcnvu
+ contract.py: bafybeihwpypxzoewm3cyndzvnc4bemhzr7bwfgmpseuh7kpc5p377aqmym
fingerprint_ignore_patterns: []
contracts: []
class_name: UniswapV3NonfungiblePositionManagerContract
diff --git a/packages/valory/contracts/uniswap_v3_pool/contract.yaml b/packages/valory/contracts/uniswap_v3_pool/contract.yaml
index 8723b83f..9249b30d 100644
--- a/packages/valory/contracts/uniswap_v3_pool/contract.yaml
+++ b/packages/valory/contracts/uniswap_v3_pool/contract.yaml
@@ -6,9 +6,9 @@ description: The contract package for the Uniswap V3 Pool interface.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeihdocjce5kvnpad5xhrc2ad7i3gftajix5z6f4zhpvmnk6blsmlza
- build/UniswapV3Pool.json: bafybeids5lo3axsd6aplyywwi43xwdxj3njnrke5m7gsp3mg74svcodr4i
- contract.py: bafybeif7usloqdqdxe7cxh5qscfhprebc7iarcd64labglkujbcsprddyi
+ __init__.py: bafybeicea4t7ghcifni7ofn4x2en5etymgynzgfefu4yhawsfivr2q53ri
+ build/UniswapV3Pool.json: bafybeifr6yextwnnmyk7h4j3nlfu5ujj243enppkvv4irouy2snc2qqpri
+ contract.py: bafybeibqeww63ojw7akryzbhqzkutcjfivfll4q2mykfi5eg7luaab3o2u
fingerprint_ignore_patterns: []
contracts: []
class_name: UniswapV3PoolContract
diff --git a/packages/valory/customs/asset_lending/component.yaml b/packages/valory/customs/asset_lending/component.yaml
index 0cbde895..fa7ee6d3 100644
--- a/packages/valory/customs/asset_lending/component.yaml
+++ b/packages/valory/customs/asset_lending/component.yaml
@@ -7,8 +7,8 @@ description: A strategy that returns the highest APR yielding aggregator over St
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeiguqxojq5hkgi55jqdl5p3rvz62jwxxw6ygorkym7ol3ps5qhh7rq
- asset_lending.py: bafybeihakrq7znwuf2abxo27kv7ywsj3lsf5ru6jlbd7m52jbm66getnmi
+ __init__.py: bafybeiftte3mcrpf5a5vtkr6mpcnrau2krjjnrlsczyst3cijrkwjnn6ea
+ asset_lending.py: bafybeig72hgi7cpbq3xf32mazyy64lchph32dp4m44b6zlyh3xwdpmrpjm
fingerprint_ignore_patterns: []
entry_point: asset_lending.py
callable: run
diff --git a/packages/valory/customs/balancer_pools_search/component.yaml b/packages/valory/customs/balancer_pools_search/component.yaml
index d0862fa5..564115cd 100644
--- a/packages/valory/customs/balancer_pools_search/component.yaml
+++ b/packages/valory/customs/balancer_pools_search/component.yaml
@@ -7,8 +7,8 @@ description: A strategy that returns the highest APR yielding liquidity pool ove
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeievwo2yoa6vekod333ttto66vpc27lm6wepspnhwyrqxtjx7djzw4
- balancer_pools_search.py: bafybeigkmgvu3ijxcuubeg6ggkvgaeqozvuijpzm7q5vntqn4cym6mg6hy
+ __init__.py: bafybeib2ymskkozxy6au5jaijra67ygs3d5ufr5fso35mivuvphze74gce
+ balancer_pools_search.py: bafybeicpcuzc2e6a4653sd2vsdbo3f4pv24ul5oetwlqu22hd26ebp43om
fingerprint_ignore_patterns: []
entry_point: balancer_pools_search.py
callable: run
diff --git a/packages/valory/customs/max_apr_selection/component.yaml b/packages/valory/customs/max_apr_selection/component.yaml
index f407f423..eea2beb5 100644
--- a/packages/valory/customs/max_apr_selection/component.yaml
+++ b/packages/valory/customs/max_apr_selection/component.yaml
@@ -6,8 +6,8 @@ description: A strategy that selects the best yielding strategy based on APR
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeiebxffqdqb67sa4w2xmmo5q3bnjflr2xeu4xsx3ynrsepf5js2cja
- max_apr_selection.py: bafybeicxbtukzzx3xww73zcxrr3uo2cynt4bxxr5gjqcxia7prrfkvmu3m
+ __init__.py: bafybeig6a4g2sv2bx24o5fqc7kifzh7pebswf6cede4i7aga6x4uzvina4
+ max_apr_selection.py: bafybeibvskytu2tayfdaj2f3ly3ox7dmkzlqc76llfuujir5imj6br3e4e
fingerprint_ignore_patterns: []
entry_point: max_apr_selection.py
callable: run
diff --git a/packages/valory/customs/merkl_pools_search/component.yaml b/packages/valory/customs/merkl_pools_search/component.yaml
index 29b37270..89aa96fd 100644
--- a/packages/valory/customs/merkl_pools_search/component.yaml
+++ b/packages/valory/customs/merkl_pools_search/component.yaml
@@ -7,8 +7,8 @@ description: A strategy that returns the highest APR yielding liquidity pool ove
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeie7iwdt5re7i7lxal5wrzy4yxxi4v3te6tgp7j7aantyyihib7fpi
- merkl_pools_search.py: bafybeigyqng6cbxchwdnnq6yuu34lldqsxbgzfudreg5baldfgrntl2u4q
+ __init__.py: bafybeiaykibi5l6cssaheanajcltyipagaavrvdfwbh3qrtdhsnmj6l2ma
+ merkl_pools_search.py: bafybeielutbzn6cdtfn7jw2wjnlqk2huxmryncqtyy5ke5jpp7hfnbmkpm
fingerprint_ignore_patterns: []
entry_point: merkl_pools_search.py
callable: run
diff --git a/packages/valory/customs/uniswap_pools_search/component.yaml b/packages/valory/customs/uniswap_pools_search/component.yaml
index 9c26d99f..16fb719b 100644
--- a/packages/valory/customs/uniswap_pools_search/component.yaml
+++ b/packages/valory/customs/uniswap_pools_search/component.yaml
@@ -7,8 +7,8 @@ description: A strategy that returns the highest APR yielding liquidity pool ove
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeiej6rb7f54w4epuyvwj3fays7lo6rqqxetjdrzc52k3q5qcbckv4a
- uniswap_pools_search.py: bafybeid77ujugcuwmlvcaislww376k6xl2g7jkwuw3el26slmhbvhbtcde
+ __init__.py: bafybeiflvzq73f3oiitti5ra6alkxcbqqfv5aqefme6z4oyxwkhjjncw4u
+ uniswap_pools_search.py: bafybeie57roiibpqr4j4mawgyjobuztv5kw3q7vudlwwsq5cnrozsmfr4i
fingerprint_ignore_patterns: []
entry_point: uniswap_pools_search.py
callable: run
diff --git a/packages/valory/services/optimus/service.yaml b/packages/valory/services/optimus/service.yaml
index 8af28382..13cdce3d 100644
--- a/packages/valory/services/optimus/service.yaml
+++ b/packages/valory/services/optimus/service.yaml
@@ -6,7 +6,7 @@ aea_version: '>=1.0.0, <2.0.0'
license: Apache-2.0
fingerprint: {}
fingerprint_ignore_patterns: []
-agent: valory/optimus:0.1.0:bafybeigyhmkkpf6adlkwuj7zz66pynopzugxehaatvchkjelyik4juzydi
+agent: valory/optimus:0.1.0:bafybeic7f7ij5ycd7qldoy7s7xrhy6kb2u4ygic5erxudtyqfjjvvqvubq
number_of_agents: 1
deployment:
agent:
diff --git a/packages/valory/skills/liquidity_trader_abci/skill.yaml b/packages/valory/skills/liquidity_trader_abci/skill.yaml
index e84592d5..d8cb937b 100644
--- a/packages/valory/skills/liquidity_trader_abci/skill.yaml
+++ b/packages/valory/skills/liquidity_trader_abci/skill.yaml
@@ -6,33 +6,33 @@ description: The scaffold skill is a scaffold for your own skill implementation.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeia7bn2ahqqwkf63ptje6rfnftuwrsp33sswgpcbh5osbesxxr6g4m
- behaviours.py: bafybeihfm557havyo6ohljtbdtn4mj5pp7whfyyoonqt3laefowxfjmxla
- dialogues.py: bafybeiay23otskx2go5xhtgdwfw2kd6rxd62sxxdu3njv7hageorl5zxzm
- fsm_specification.yaml: bafybeie3vom7fwl5ho6xanje3r7tab7y3a5ij5gs6qvjh2uavbpitffyzu
- handlers.py: bafybeih2zlmkyntlr7zx4mokqkmpcw7qczfbo47g766kndbv7zv7oqjv6e
- io_/__init__.py: bafybeifxgmmwjqzezzn3e6keh2bfo4cyo7y5dq2ept3stfmgglbrzfl5rq
- io_/loader.py: bafybeiaoi7rnmpoyreuhwdo3biudqnjnrc25eu54ehyvsnynlkbzk7r6ti
+ __init__.py: bafybeic3ntqr7d5i4mefv45gdgrwahg4exa7ne5bhbkpfm53k3p73kzqwi
+ behaviours.py: bafybeihrvmdeo727azpvjbp42txugbb2pm3pcnujqyzx6jdnyi5tqtt62u
+ dialogues.py: bafybeihfjd3453c4jc4pul4cnoszfq5olovefwq3futnfal2a3ecda4hry
+ fsm_specification.yaml: bafybeieignzzisgfyhozxca6txqe3wkyexdzxaoctjtj2gbsn5kdxkhqji
+ handlers.py: bafybeibsoowvbl5wiyy2h7rtjocmxm32zg3m2eaj7qofhqyyaa2vn7dioe
+ io_/__init__.py: bafybeidqnemziydeeozd6zdwilsuv3cnky4fviiltymbysgpilsitve5pq
+ io_/loader.py: bafybeicpwflsvqstkcpcsuoxph5cl3wj5rbrhhd7xa2k6q42zhbentx6ym
models.py: bafybeiafmj46andjzmaylqncnqoukhixis2o7cylnqkv655y72j3bqjx5q
- payloads.py: bafybeie5tbx3lqcklwfqdqft5t33oluvkltnbjqavhj3ddjjblocyq62qm
- pool_behaviour.py: bafybeiaheuesscgqzwjbpyrezgwpdbdfurlmfwbc462qv6rblwwxlx5dpm
- pools/balancer.py: bafybeigznhgv7ylo5dvlhxcqikhiuqlqtnx3ikv4tszyvkl2lpcuqgoa5u
- pools/uniswap.py: bafybeigmqptgmjaxscszohfusgxsexqyx4awuyw7p4g5l7k2qpeyq7vdcu
- rounds.py: bafybeidbh4cetttbn4nvti6ftwlrgfnfs5xtuo3i26qfphodrlcaqlibra
+ payloads.py: bafybeibxnowhiejstrxdhk65l4ygbrciaew3twcmhkiyqzfifhtvvbcjra
+ pool_behaviour.py: bafybeiabwfwxrmrjfjqelzlu42i5caw32a4vd4myifdkdtwp4xllxcd4om
+ pools/balancer.py: bafybeiannebar5vgqesmulamhek6kaj4m4qz2u6aj4mt4bgxhrj625mmge
+ pools/uniswap.py: bafybeicvzxb3jhcbzlcvvrhuy5anyirdenygub3m2cbk2x43ikmk2j3yt4
+ rounds.py: bafybeibhrwlbl2e7sa5t2ismrj5aqdj3cl5c5dqvvau3s6dd3y2zwa5aqe
fingerprint_ignore_patterns: []
connections: []
contracts:
- valory/gnosis_safe:0.1.0:bafybeihtqcpqthb37msgqabpzcc2xc3l3yzkp5pl2sodeghqyzzzyuevgi
-- valory/balancer_weighted_pool:0.1.0:bafybeib755ksie5yv4wn6jl7i3bpshlhscf4bzsabqrbahm6b3m5ixzmbi
-- valory/balancer_vault:0.1.0:bafybeidgdivmrm77yotgpnn567ayzhoqa6hufrijy2cj2b7w5wa63otzq4
-- valory/erc20:0.1.0:bafybeifl3yoh66uwdyfzz65ed4dnc7gyhvvgcmzxjm4exhkupvurhjcb6m
+- valory/balancer_weighted_pool:0.1.0:bafybeiedi74xjsrxyf7fc6pov23ol5ycd6fi7v6c6nfgwo6yij6k353cbq
+- valory/balancer_vault:0.1.0:bafybeichirxrzvxughksr3ycjlwsbdeb5rk5hvttqi46bw7djmcmtbecfm
+- valory/erc20:0.1.0:bafybeihbrun3rcmrz4mltx2fizmfwn7mnqvayoehspcx2kocgxxobqifvq
- valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y
-- valory/uniswap_v3_non_fungible_position_manager:0.1.0:bafybeiht7qjxkamjmq22o74f5faz3wqpb3cx2grl2t4zc2zxqjkzitc22a
-- valory/uniswap_v3_pool:0.1.0:bafybeia2pkvje5lcqdwmvltu4v5qyxamj6icswxftufu3wamxdm4w7nz3q
-- valory/merkl_distributor:0.1.0:bafybeiegvzycswa7kdimhnjvhrtbrzu3zycnianhrdizq5i53ql7jf5poa
-- valory/staking_token:0.1.0:bafybeic4ug4p22q4hsh5z4hhjrishvnswino2fsleqsgdxlusd5h2x5hwy
-- valory/staking_activity_checker:0.1.0:bafybeidziyf4o763sw3fqlqjbpz3thrupuwx44barj72zj7tjnxbvkhoxa
-- valory/sturdy_yearn_v3_vault:0.1.0:bafybeieruhikfob2lporaysckr63y2ynvtqeqadoi2e3olddzv4rhtrwkm
+- valory/uniswap_v3_non_fungible_position_manager:0.1.0:bafybeihdnltmbhy7lcvqby324z4ttp4imnn3k7hctu4mwpkbpjodniudum
+- valory/uniswap_v3_pool:0.1.0:bafybeiga5ftedxgxdzgkspgkyy43f4dpnvnneg5ijsysv2kpf27rboqlyu
+- valory/merkl_distributor:0.1.0:bafybeigrnymn2g4m7yv5bah7r3mphni7cim2pg25uffbtatyvnjip7rp3e
+- valory/staking_token:0.1.0:bafybeic3odqiitp7grubfuukubml73pofxnfwh2dx5zqj4c6zrsc2uel4y
+- valory/staking_activity_checker:0.1.0:bafybeidwyuiv7ef7unrdpkzhpkkbssovfoqqti6ojlcibj4cvqkiyzypbi
+- valory/sturdy_yearn_v3_vault:0.1.0:bafybeih6g2vej5nlcknpaytn7psqi3xaqiu2rjwh5xaorr7gbwutsla76m
protocols:
- valory/contract_api:1.0.0:bafybeidgu7o5llh26xp3u3ebq3yluull5lupiyeu6iooi2xyymdrgnzq5i
- valory/ledger_api:1.0.0:bafybeihdk6psr4guxmbcrc26jr2cbgzpd5aljkqvpwo64bvaz7tdti2oni
diff --git a/packages/valory/skills/liquidity_trader_abci/tests/test_diaglogues.py b/packages/valory/skills/liquidity_trader_abci/tests/test_diaglogues.py
new file mode 100644
index 00000000..5f2d4cbc
--- /dev/null
+++ b/packages/valory/skills/liquidity_trader_abci/tests/test_diaglogues.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+#
+# Copyright 2021-2022 Valory AG
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ------------------------------------------------------------------------------
+
+"""Test the dialogues.py module of the skill."""
+
+# pylint: skip-file
+
+import packages.valory.skills.liquidity_trader_abci.dialogues # noqa
+
+
+def test_import() -> None:
+ """Test that the 'dialogues.py' Python module can be imported."""
\ No newline at end of file
diff --git a/packages/valory/skills/liquidity_trader_abci/tests/test_handlers.py b/packages/valory/skills/liquidity_trader_abci/tests/test_handlers.py
new file mode 100644
index 00000000..fce4ffa5
--- /dev/null
+++ b/packages/valory/skills/liquidity_trader_abci/tests/test_handlers.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+#
+# Copyright 2021-2022 Valory AG
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ------------------------------------------------------------------------------
+
+"""Test the dialogues.py module of the skill."""
+
+import packages.valory.skills.liquidity_trader_abci.handlers # noqa
+
+
+# pylint: skip-file
+
+
+def test_import() -> None:
+ """Test that the 'handlers.py' Python module can be imported."""
\ No newline at end of file
diff --git a/packages/valory/skills/liquidity_trader_abci/tests/test_models.py b/packages/valory/skills/liquidity_trader_abci/tests/test_models.py
new file mode 100644
index 00000000..ca803853
--- /dev/null
+++ b/packages/valory/skills/liquidity_trader_abci/tests/test_models.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+#
+# Copyright 2021-2022 Valory AG
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ------------------------------------------------------------------------------
+
+"""Test the models.py module of the skill."""
+
+# pylint: skip-file
+
+from packages.valory.skills.abstract_round_abci.test_tools.base import DummyContext
+from packages.valory.skills.liquidity_trader_abci.models import SharedState
+
+
+class TestSharedState:
+ """Test SharedState(Model) class."""
+
+ def test_initialization(
+ self,
+ ) -> None:
+ """Test initialization."""
+ SharedState(name="", skill_context=DummyContext())
\ No newline at end of file
diff --git a/packages/valory/skills/liquidity_trader_abci/tests/test_payloads.py b/packages/valory/skills/liquidity_trader_abci/tests/test_payloads.py
new file mode 100644
index 00000000..591955f9
--- /dev/null
+++ b/packages/valory/skills/liquidity_trader_abci/tests/test_payloads.py
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+#
+# Copyright 2024 Valory AG
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ------------------------------------------------------------------------------
+"""This module contains the transaction payloads for the liquidity trader abci."""
+
+from datetime import datetime
+from typing import Dict, Type
+
+import pytest
+
+from packages.valory.skills.abstract_round_abci.base import BaseTxPayload
+from packages.valory.skills.liquidity_trader_abci.payloads import (
+ CallCheckpointPayload,
+ CheckStakingKPIMetPayload,
+ DecisionMakingPayload,
+ EvaluateStrategyPayload,
+ GetPositionsPayload,
+ PostTxSettlementPayload,
+)
+
+
+@pytest.mark.parametrize(
+ "payload_class, payload_kwargs",
+ [
+ (
+ CallCheckpointPayload,
+ {
+ service_staking_state: 1
+ min_num_of_safe_tx_required: 1
+ },
+ ),
+ (
+ CheckStakingKPIMetPayload,
+ {
+ is_staking_kpi_met: True
+ },
+ ),
+ (
+ DecisionMakingPayload,
+ {
+ content: "content"
+ },
+ ),
+ (
+ EvaluateStrategyPayload,
+ {
+ actions: "dummy actions"
+ },
+ ),
+ (
+ GetPositionsPayload,
+ {
+ positions: "dummy position"
+ },
+ ),
+ (
+ PostTxSettlementPayload,
+ {
+ content: "content"
+ },
+ ),
+ ],
+)
+
+def test_payload(payload_class: Type[BaseTxPayload], payload_kwargs: Dict) -> None:
+ """Test payloads."""
+ payload = payload_class(sender="sender", **payload_kwargs)
+
+ for key, value in payload_kwargs.items():
+ assert getattr(payload, key) == value
+
+ assert payload.sender == "sender"
+ assert payload.data == payload_kwargs
+ assert payload_class.from_json(payload.json) == payload
diff --git a/packages/valory/skills/liquidity_trader_abci/tests/test_rounds.py b/packages/valory/skills/liquidity_trader_abci/tests/test_rounds.py
new file mode 100644
index 00000000..7c4b57c5
--- /dev/null
+++ b/packages/valory/skills/liquidity_trader_abci/tests/test_rounds.py
@@ -0,0 +1,178 @@
+# -*- coding: utf-8 -*-
+# ------------------------------------------------------------------------------
+#
+# Copyright 2023-2024 Valory AG
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ------------------------------------------------------------------------------
+
+"""This module contains the test for rounds of liquidity trader"""
+from unittest.mock import MagicMock
+
+import pytest
+import logging # noqa: F401
+from typing import cast
+
+from packages.valory.skills.abstract_round_abci.base import (
+ AbciAppDB
+)
+
+from packages.valory.skills.liquidity_trader_abci.rounds import (
+ CallCheckpointRound,
+ CheckStakingKPIMetRound,
+ DecisionMakingRound,
+ EvaluateStrategyRound,
+ Event,
+ FinishedCallCheckpointRound,
+ FinishedCheckStakingKPIMetRound,
+ FinishedEvaluateStrategyRound,
+ FinishedDecisionMakingRound,
+ FinishedTxPreparationRound,
+ FailedMultiplexerRound,
+ GetPositionsRound,
+ LiquidityTraderAbciApp,
+ PostTxSettlementRound,
+ StakingState,
+ SynchronizedData,
+)
+
+@pytest.fixture
+def setup_app() -> LiquidityTraderAbciApp:
+ """Set up the initial app instance for testing."""
+ # Create mock objects for the required arguments
+ synchronized_data = MagicMock(spec=SynchronizedData)
+ logger = MagicMock() # Mock logger
+ context = MagicMock() # Mock context
+
+ # Initialize the app with the mocked dependencies
+ return LiquidityTraderAbciApp(synchronized_data, logger, context)
+
+
+def test_initial_state(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test the initial round of the application."""
+ app = setup_app
+ assert app.initial_round_cls == CallCheckpointRound
+ assert CallCheckpointRound in app.initial_states
+
+
+def test_call_check_point_round_transition(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test transitions from CallCheckpointRound."""
+ app = setup_app
+ transition_function = app.transition_function[CallCheckpointRound]
+
+ # Transition on done
+ assert (
+ transition_function[Event.DONE] == CheckStakingKPIMetRound
+ )
+
+ # Transition on next checkpoint
+ assert (
+ transition_function[Event.NEXT_CHECKPOINT_NOT_REACHED_YET]
+ == CheckStakingKPIMetRound
+ )
+
+ # Test no settle
+ assert transition_function[Event.SETTLE] == FinishedCallCheckpointRound
+
+ # Test no service evicted
+ assert transition_function[Event.SERVICE_EVICTED] == GetPositionsRound
+
+ # Test no majority
+ assert transition_function[Event.NO_MAJORITY] == CallCheckpointRound
+
+
+
+def test_check_staking_kpi_round_transition(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test transitions from CheckStakingKPIMetRound."""
+ app = setup_app
+ transition_function = app.transition_function[CheckStakingKPIMetRound]
+
+ # Transition on done
+ assert transition_function[Event.DONE] == GetPositionsRound
+
+ # Transition on settle
+ assert transition_function[Event.SETTLE] == FinishedCheckStakingKPIMetRound
+
+ # Test none and no majority
+ assert transition_function[Event.NONE] == CheckStakingKPIMetRound
+ assert transition_function[Event.NO_MAJORITY] == CheckStakingKPIMetRound
+
+
+def test_get_positions_round_transition(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test transitions from GetPositionsRound."""
+ app = setup_app
+ transition_function = app.transition_function[GetPositionsRound]
+
+ # Transition on done
+ assert transition_function[Event.DONE] == EvaluateStrategyRound
+
+ # Test no majority
+ assert transition_function[Event.NO_MAJORITY] == GetPositionsRound
+
+
+def test_evaluate_strategy_round_transition(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test transitions from EvaluateStrategyRound."""
+ app = setup_app
+ transition_function = app.transition_function[EvaluateStrategyRound]
+
+ # Test transition on done
+ assert transition_function[Event.DONE] == DecisionMakingRound
+
+ # Test transition on wait
+ assert transition_function[Event.WAIT] == FinishedEvaluateStrategyRound
+
+
+def test_decision_making_round_transition(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test transitions from DecisionMakingRound."""
+ app = setup_app
+ transition_function = app.transition_function[DecisionMakingRound]
+
+ # Transition on done
+ assert transition_function[Event.DONE] == FinishedDecisionMakingRound
+
+ # Test no majority
+ assert transition_function[Event.NO_MAJORITY] == DecisionMakingRound
+
+ # Test no settle
+ assert transition_function[Event.SETTLE] == FinishedTxPreparationRound
+
+
+def test_post_tx_settlement_round_transition(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test transitions from PostTxSettlementRound."""
+ app = setup_app
+ transition_function = app.transition_function[PostTxSettlementRound]
+
+ # Test transition on done
+ assert transition_function[Event.DONE] == PostTxSettlementRound
+
+ # Test transition on action execute
+ assert transition_function[Event.ACTION_EXECUTED] == DecisionMakingRound
+
+ # Test transition on checkpoint tx executed
+ assert transition_function[Event.CHECKPOINT_TX_EXECUTED] == CallCheckpointRound
+
+ # Test transition on vanity tx executed
+ assert transition_function[Event.VANITY_TX_EXECUTED] == CheckStakingKPIMetRound
+
+ # Test transition on unrecognized
+ assert transition_function[Event.UNRECOGNIZED] == FailedMultiplexerRound
+
+
+def test_final_states(setup_app: LiquidityTraderAbciApp) -> None:
+ """Test the final states of the application."""
+ app = setup_app
+ assert FinishedEvaluateStrategyRound in app.final_states
+ assert FinishedDecisionMakingRound in app.final_states
+ assert FinishedTxPreparationRound in app.final_states
+ assert FinishedCallCheckpointRound in app.final_states
\ No newline at end of file
diff --git a/packages/valory/skills/optimus_abci/skill.yaml b/packages/valory/skills/optimus_abci/skill.yaml
index 9f5f3889..18d6ea25 100644
--- a/packages/valory/skills/optimus_abci/skill.yaml
+++ b/packages/valory/skills/optimus_abci/skill.yaml
@@ -6,13 +6,13 @@ description: The scaffold skill is a scaffold for your own skill implementation.
license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
- __init__.py: bafybeiechr3zr5bc4xl3vvs2p2gti54ily7ao2gu4ff5lys6cixehzkdea
- behaviours.py: bafybeig3agtm256pl7rekx3i3kbz6h5hrnneu44f4pzkqp4mwtdxuob54e
- composition.py: bafybeigxpycqh7xnqwdj5eg2ln6kqchbwvwuvzjtpwhgylr6qb56ooo7wu
- dialogues.py: bafybeiafoomno5pn6qrx43jxf2opxkil5eg4nod6jhd5oqwwplfz4x6dke
- fsm_specification.yaml: bafybeihzhlhigw5qcncirnnxpazcb4qbvpgk6emms4vi2wtgyzfomkr53a
- handlers.py: bafybeicyu4bsubv2rnrhnx76wjt23oqbhaqihjaulrlshxygwicv4ml5la
- models.py: bafybeieeq64gdcpri2lcj3yvrvsp6edgg52vx53shqd3wxskekhhn2s5xy
+ __init__.py: bafybeihimvaad4b42unlewkjc7t7wt3qacplaemuumofcvz6ckmio6aoei
+ behaviours.py: bafybeidlajmzryduifzktppusucehht6jt5pk6japgk4debs6qsxzjmecm
+ composition.py: bafybeieentvbw64iagpiytcugj552klqpbw2bllemk6fqb6vjxuuvo3n24
+ dialogues.py: bafybeid7hmvtsy3idnsjbcxayszomamiub6u2eufmp6nndz7diyabdeneq
+ fsm_specification.yaml: bafybeia6avh7jtmrn56nzhyrjlkvbdd7xqi7rpiwskuge3c2kyilawe4kq
+ handlers.py: bafybeihtynd5r2kruwgycsoydphbvowalopangisufyp6arlj5dxmww3uu
+ models.py: bafybeid457du3icit2h6venm5bsyso5pckoia7wke4p3y6j3j2i7wkuedu
fingerprint_ignore_patterns: []
connections:
- valory/http_server:0.22.0:bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m
@@ -24,7 +24,7 @@ skills:
- valory/registration_abci:0.1.0:bafybeiagi6e2h7kochmlemy5c5yk6hwn37tfxiqvk2en74jhowsdwlmrny
- valory/reset_pause_abci:0.1.0:bafybeiezfedmmseox3ce5aucxsiszdmvskrwwbtpb2a3vw3sbmc5jt7nri
- valory/termination_abci:0.1.0:bafybeiea67epwwgngp7b3wavs6hpkaxv6etyaps6g6325bchfnf354mibq
-- valory/liquidity_trader_abci:0.1.0:bafybeiehsxe2cx37pxsdkj4jfwf2csv4lqlvkzkvh4cefqtdileoglybry
+- valory/liquidity_trader_abci:0.1.0:bafybeienjtf6jyj4skxbvcopy4pm7kjgewe5kslcklxn4uwvmdati6zcsy
- valory/transaction_settlement_abci:0.1.0:bafybeifmgmwdkx4esemxjacjwzqkqymkuklb5nehkwqkx7v335fllgswcq
behaviours:
main:
diff --git a/poetry.lock b/poetry.lock
index f61cc30e..bcca0011 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand.
[[package]]
name = "aiohappyeyeballs"
@@ -6,6 +6,8 @@ version = "2.4.4"
description = "Happy Eyeballs for asyncio"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"},
{file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"},
@@ -17,6 +19,8 @@ version = "3.11.11"
description = "Async http client/server framework (asyncio)"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"},
{file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"},
@@ -115,6 +119,8 @@ version = "1.3.2"
description = "aiosignal: a list of registered asynchronous callbacks"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"},
{file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"},
@@ -129,6 +135,8 @@ version = "0.17.4"
description = "Python graph (network) package"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"},
{file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"},
@@ -140,6 +148,8 @@ version = "4.7.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"},
{file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"},
@@ -162,6 +172,8 @@ version = "1.4.0"
description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "asn1crypto-1.4.0-py2.py3-none-any.whl", hash = "sha256:4bcdf33c861c7d40bdcd74d8e4dd7661aac320fcdf40b9a3f95b4ee12fde2fa8"},
{file = "asn1crypto-1.4.0.tar.gz", hash = "sha256:f4f6e119474e58e04a2b1af817eb585b4fd72bdd89b998624712b5c99be7641c"},
@@ -173,6 +185,8 @@ version = "3.0.0"
description = "Annotate AST trees with source code positions"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"},
{file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"},
@@ -188,6 +202,8 @@ version = "5.0.1"
description = "Timeout context manager for asyncio programs"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version < \"3.11\""
files = [
{file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"},
{file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"},
@@ -199,6 +215,8 @@ version = "24.3.0"
description = "Classes Without Boilerplate"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"},
{file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"},
@@ -218,6 +236,8 @@ version = "2.2.1"
description = "Function decoration for backoff and retry"
optional = false
python-versions = ">=3.7,<4.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"},
{file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"},
@@ -229,6 +249,8 @@ version = "2.1.1"
description = "Base58 and Base58Check implementation."
optional = false
python-versions = ">=3.5"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2"},
{file = "base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c"},
@@ -243,6 +265,8 @@ version = "4.2.1"
description = "Modern password hashing for your software and your servers"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "bcrypt-4.2.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:1340411a0894b7d3ef562fb233e4b6ed58add185228650942bdc885362f32c17"},
{file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ee315739bc8387aa36ff127afc99120ee452924e0df517a8f3e4c0187a0f5f"},
@@ -281,6 +305,8 @@ version = "1.2.0"
description = "Reference implementation for Bech32 and segwit addresses."
optional = false
python-versions = ">=3.5"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "bech32-1.2.0-py3-none-any.whl", hash = "sha256:990dc8e5a5e4feabbdf55207b5315fdd9b73db40be294a19b3752cde9e79d981"},
{file = "bech32-1.2.0.tar.gz", hash = "sha256:7d6db8214603bd7871fcfa6c0826ef68b85b0abd90fa21c285a9c5e21d2bd899"},
@@ -292,6 +318,8 @@ version = "2.9.3"
description = "efficient arrays of booleans -- C extension"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "bitarray-2.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2cf5f5400636c7dda797fd681795ce63932458620fe8c40955890380acba9f62"},
{file = "bitarray-2.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3487b4718ffa5942fab777835ee36085f8dda7ec4bd0b28433efb117f84852b6"},
@@ -438,6 +466,8 @@ version = "24.2.0"
description = "The uncompromising code formatter."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"},
{file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"},
@@ -484,6 +514,8 @@ version = "1.5.2"
description = "A decorator for caching properties in classes."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
{file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
@@ -495,6 +527,8 @@ version = "2024.12.14"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"},
{file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"},
@@ -506,6 +540,8 @@ version = "1.17.1"
description = "Foreign Function Interface for Python calling C code."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
{file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
@@ -585,6 +621,8 @@ version = "3.4.0"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"},
{file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"},
@@ -699,6 +737,8 @@ version = "1.0.2"
description = "Python bindings for C-KZG-4844"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "ckzg-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdd082bc0f2a595e3546658ecbe1ff78fe65b0ab7e619a8197a62d94f46b5b46"},
{file = "ckzg-1.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50ca4af4e2f1a1e8b0a7e97b3aef39dedbb0d52d90866ece424f13f8df1b5972"},
@@ -793,6 +833,8 @@ version = "8.1.7"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
@@ -807,6 +849,8 @@ version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+groups = ["main"]
+markers = "(platform_system == \"Windows\" or sys_platform == \"win32\") and python_version <= \"3.11\""
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
@@ -818,6 +862,8 @@ version = "1.3.1"
description = "Python library for calculating contours of 2D quadrilateral grids"
optional = false
python-versions = ">=3.10"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"},
{file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"},
@@ -891,6 +937,8 @@ version = "0.9.2"
description = "A library for interacting with the cosmos networks"
optional = false
python-versions = ">=3.8,<4.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "cosmpy-0.9.2-py3-none-any.whl", hash = "sha256:3591311198b08a0aa75340851ca166669974f17ffaa207a8d2cb26504fb0fa19"},
{file = "cosmpy-0.9.2.tar.gz", hash = "sha256:0f0eb80152f28ef5ee4d846d581d2e34ba2d952900f0e3570cacb84bb376f664"},
@@ -913,6 +961,8 @@ version = "7.6.9"
description = "Code coverage measurement for Python"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb"},
{file = "coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710"},
@@ -990,6 +1040,8 @@ version = "44.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
optional = false
python-versions = "!=3.9.0,!=3.9.1,>=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092"},
@@ -997,7 +1049,6 @@ files = [
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543"},
- {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385"},
{file = "cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e"},
{file = "cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e"},
{file = "cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053"},
@@ -1008,7 +1059,6 @@ files = [
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c"},
- {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba"},
{file = "cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64"},
{file = "cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285"},
{file = "cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417"},
@@ -1041,6 +1091,8 @@ version = "0.12.1"
description = "Composable style cycles"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"},
{file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"},
@@ -1056,6 +1108,8 @@ version = "1.0.1"
description = "Cython implementation of Toolz: High performance functional utilities"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and implementation_name == \"cpython\""
files = [
{file = "cytoolz-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cec9af61f71fc3853eb5dca3d42eb07d1f48a4599fa502cbe92adde85f74b042"},
{file = "cytoolz-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:140bbd649dbda01e91add7642149a5987a7c3ccc251f2263de894b89f50b6608"},
@@ -1171,6 +1225,8 @@ version = "5.1.1"
description = "Decorators for Humans"
optional = false
python-versions = ">=3.5"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
@@ -1182,6 +1238,8 @@ version = "0.3.9"
description = "Distribution utilities"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"},
{file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"},
@@ -1193,6 +1251,8 @@ version = "1.9.0"
description = "Distro - an OS platform information API"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"},
{file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
@@ -1204,6 +1264,8 @@ version = "6.1.2"
description = "A Python library for the Docker Engine API."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "docker-6.1.2-py3-none-any.whl", hash = "sha256:134cd828f84543cbf8e594ff81ca90c38288df3c0a559794c12f2e4b634ea19e"},
{file = "docker-6.1.2.tar.gz", hash = "sha256:dcc088adc2ec4e7cfc594e275d8bd2c9738c56c808de97476939ef67db5af8c2"},
@@ -1226,6 +1288,8 @@ version = "0.4.1"
description = "Python library to use the pseudo-tty of a docker container"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "dockerpty-0.4.1.tar.gz", hash = "sha256:69a9d69d573a0daa31bcd1c0774eeed5c15c295fe719c61aca550ed1393156ce"},
]
@@ -1239,6 +1303,8 @@ version = "0.6.2"
description = "Pythonic argument parser, that will make you smile"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"},
]
@@ -1249,6 +1315,8 @@ version = "0.16.1"
description = "ECDSA cryptographic signature library (pure python)"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "ecdsa-0.16.1-py2.py3-none-any.whl", hash = "sha256:881fa5e12bb992972d3d1b3d4dfbe149ab76a89f13da02daa5ea1ec7dea6e747"},
{file = "ecdsa-0.16.1.tar.gz", hash = "sha256:cfc046a2ddd425adbd1a78b3c46f0d1325c657811c0f45ecc3a0a6236c1e50ff"},
@@ -1267,6 +1335,8 @@ version = "0.5.5"
description = "empyrical is a Python library with performance and risk statistics commonly used in quantitative finance"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "empyrical-0.5.5.tar.gz", hash = "sha256:84320f36931496774e948d7ca9f03494ae2dd94451b320eeda378639e5eba950"},
]
@@ -1286,6 +1356,8 @@ version = "5.1.0"
description = "eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding"
optional = false
python-versions = "<4,>=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth_abi-5.1.0-py3-none-any.whl", hash = "sha256:84cac2626a7db8b7d9ebe62b0fdca676ab1014cc7f777189e3c0cd721a4c16d8"},
{file = "eth_abi-5.1.0.tar.gz", hash = "sha256:33ddd756206e90f7ddff1330cc8cac4aa411a824fe779314a0a52abea2c8fc14"},
@@ -1308,6 +1380,8 @@ version = "0.8.0"
description = "eth-account: Sign Ethereum transactions and messages with local private keys"
optional = false
python-versions = ">=3.6, <4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth-account-0.8.0.tar.gz", hash = "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca"},
{file = "eth_account-0.8.0-py3-none-any.whl", hash = "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b"},
@@ -1335,6 +1409,8 @@ version = "0.7.0"
description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3"
optional = false
python-versions = ">=3.8, <4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth-hash-0.7.0.tar.gz", hash = "sha256:bacdc705bfd85dadd055ecd35fd1b4f846b671add101427e089a4ca2e8db310a"},
{file = "eth_hash-0.7.0-py3-none-any.whl", hash = "sha256:b8d5a230a2b251f4a291e3164a23a14057c4a6de4b0aa4a16fa4dc9161b57e2f"},
@@ -1356,6 +1432,8 @@ version = "0.6.1"
description = "A library for handling the encrypted keyfiles used to store ethereum private keys."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth-keyfile-0.6.1.tar.gz", hash = "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c"},
{file = "eth_keyfile-0.6.1-py3-none-any.whl", hash = "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560"},
@@ -1378,6 +1456,8 @@ version = "0.4.0"
description = "Common API for Ethereum key operations."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth-keys-0.4.0.tar.gz", hash = "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216"},
{file = "eth_keys-0.4.0-py3-none-any.whl", hash = "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d"},
@@ -1400,6 +1480,8 @@ version = "0.3.0"
description = "eth-rlp: RLP definitions for common Ethereum objects in Python"
optional = false
python-versions = ">=3.7, <4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth-rlp-0.3.0.tar.gz", hash = "sha256:f3263b548df718855d9a8dbd754473f383c0efc82914b0b849572ce3e06e71a6"},
{file = "eth_rlp-0.3.0-py3-none-any.whl", hash = "sha256:e88e949a533def85c69fa94224618bbbd6de00061f4cff645c44621dab11cf33"},
@@ -1422,6 +1504,8 @@ version = "3.5.2"
description = "eth-typing: Common type annotations for ethereum python packages"
optional = false
python-versions = ">=3.7.2, <4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth-typing-3.5.2.tar.gz", hash = "sha256:22bf051ddfaa35ff827c30090de167e5c5b8cc6d343f7f35c9b1c7553f6ab64d"},
{file = "eth_typing-3.5.2-py3-none-any.whl", hash = "sha256:1842e628fb1ffa929b94f89a9d33caafbeb9978dc96abb6036a12bc91f1c624b"},
@@ -1442,6 +1526,8 @@ version = "2.3.2"
description = "eth-utils: Common utility functions for python code that interacts with Ethereum"
optional = false
python-versions = "<4,>=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "eth_utils-2.3.2-py3-none-any.whl", hash = "sha256:4470be372674a25b8440b69cb35bda634a079876930853814ea307248c3d198b"},
{file = "eth_utils-2.3.2.tar.gz", hash = "sha256:1986d704b29202386c9bc4b27b948a134320c11c8104c45ca367e4663ae7d10e"},
@@ -1465,6 +1551,8 @@ version = "1.2.2"
description = "Backport of PEP 654 (exception groups)"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version < \"3.11\""
files = [
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
@@ -1479,6 +1567,8 @@ version = "2.1.0"
description = "Get the currently executing AST node of a frame, and other information"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"},
{file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"},
@@ -1493,6 +1583,8 @@ version = "3.16.1"
description = "A platform independent file lock."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"},
{file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"},
@@ -1509,6 +1601,8 @@ version = "2.1.3"
description = "A simple framework for building complex web applications."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "Flask-2.1.3-py3-none-any.whl", hash = "sha256:9013281a7402ad527f8fd56375164f3aa021ecfaff89bfe3825346c24f87e04c"},
{file = "Flask-2.1.3.tar.gz", hash = "sha256:15972e5017df0575c3d6c090ba168b6db90259e620ac8d7ea813a396bad5b6cb"},
@@ -1530,6 +1624,8 @@ version = "4.55.3"
description = "Tools to manipulate font files"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"},
{file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"},
@@ -1603,6 +1699,8 @@ version = "1.5.0"
description = "A list-like structure which implements collections.abc.MutableSequence"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"},
{file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"},
@@ -1704,6 +1802,8 @@ version = "1.66.0"
description = "Common protobufs used in Google APIs"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"},
{file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"},
@@ -1721,6 +1821,8 @@ version = "3.5.0"
description = "GraphQL client for Python"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "gql-3.5.0-py2.py3-none-any.whl", hash = "sha256:70dda5694a5b194a8441f077aa5fb70cc94e4ec08016117523f013680901ecb7"},
{file = "gql-3.5.0.tar.gz", hash = "sha256:ccb9c5db543682b28f577069950488218ed65d4ac70bb03b6929aaadaf636de9"},
@@ -1749,6 +1851,8 @@ version = "3.2.5"
description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL."
optional = false
python-versions = "<4,>=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "graphql_core-3.2.5-py3-none-any.whl", hash = "sha256:2f150d5096448aa4f8ab26268567bbfeef823769893b39c1a2e1409590939c8a"},
{file = "graphql_core-3.2.5.tar.gz", hash = "sha256:e671b90ed653c808715645e3998b7ab67d382d55467b7e2978549111bbabf8d5"},
@@ -1760,6 +1864,8 @@ version = "1.53.0"
description = "HTTP/2-based RPC framework"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "grpcio-1.53.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:752d2949b40e12e6ad3ed8cc552a65b54d226504f6b1fb67cab2ccee502cc06f"},
{file = "grpcio-1.53.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:8a48fd3a7222be226bb86b7b413ad248f17f3101a524018cdc4562eeae1eb2a3"},
@@ -1817,6 +1923,8 @@ version = "0.3.1"
description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output"
optional = false
python-versions = ">=3.7, <4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "hexbytes-0.3.1-py3-none-any.whl", hash = "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59"},
{file = "hexbytes-0.3.1.tar.gz", hash = "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d"},
@@ -1834,6 +1942,8 @@ version = "6.21.6"
description = "A library for property-based testing"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "hypothesis-6.21.6-py3-none-any.whl", hash = "sha256:1a96c67658f0fca00476380c2c7323066e2fb1d45a2b0874dd07fd0643b49b46"},
{file = "hypothesis-6.21.6.tar.gz", hash = "sha256:29b72005910f2a548d727e5d5accf862a6ae84e49176d748fb6ca040ef657592"},
@@ -1865,6 +1975,8 @@ version = "3.10"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
@@ -1879,6 +1991,8 @@ version = "2.0.0"
description = "brain-dead simple config-ini parsing"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
@@ -1890,6 +2004,8 @@ version = "0.8.0a2"
description = "Python IPFS HTTP CLIENT library"
optional = false
python-versions = ">=3.6.2,!=3.7.0,!=3.7.1"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "ipfshttpclient-0.8.0a2-py3-none-any.whl", hash = "sha256:ce6bac0e3963c4ced74d7eb6978125362bb05bbe219088ca48f369ce14d3cc39"},
{file = "ipfshttpclient-0.8.0a2.tar.gz", hash = "sha256:0d80e95ee60b02c7d414e79bf81a36fc3c8fbab74265475c52f70b2620812135"},
@@ -1905,6 +2021,8 @@ version = "8.30.0"
description = "IPython: Productive Interactive Computing"
optional = false
python-versions = ">=3.10"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "ipython-8.30.0-py3-none-any.whl", hash = "sha256:85ec56a7e20f6c38fce7727dcca699ae4ffc85985aa7b23635a8008f918ae321"},
{file = "ipython-8.30.0.tar.gz", hash = "sha256:cb0a405a306d2995a5cbb9901894d240784a9f341394c6ba3f4fe8c6eb89ff6e"},
@@ -1943,6 +2061,8 @@ version = "0.7.2"
description = "An ISO 8601 date/time/duration parser and formatter"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"},
{file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"},
@@ -1954,6 +2074,8 @@ version = "5.13.2"
description = "A Python utility / library to sort Python imports."
optional = false
python-versions = ">=3.8.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
{file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
@@ -1968,6 +2090,8 @@ version = "2.2.0"
description = "Safely pass data to untrusted environments and back."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"},
{file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"},
@@ -1979,6 +2103,8 @@ version = "0.19.2"
description = "An autocompletion tool for Python that can be used for text editors."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"},
{file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"},
@@ -1998,6 +2124,8 @@ version = "3.1.4"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
{file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
@@ -2015,6 +2143,8 @@ version = "1.4.2"
description = "Lightweight pipelining with Python functions"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"},
{file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
@@ -2026,6 +2156,8 @@ version = "4.3.3"
description = "An implementation of JSON Schema validation for Python"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "jsonschema-4.3.3-py3-none-any.whl", hash = "sha256:eb7a69801beb7325653aa8fd373abbf9ff8f85b536ab2812e5e8287b522fb6a2"},
{file = "jsonschema-4.3.3.tar.gz", hash = "sha256:f210d4ce095ed1e8af635d15c8ee79b586f656ab54399ba87b8ab87e5bff0ade"},
@@ -2045,6 +2177,8 @@ version = "1.4.7"
description = "A fast implementation of the Cassowary constraint solver"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"},
{file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"},
@@ -2168,6 +2302,8 @@ version = "1.2.0"
description = "An Dict like LRU container."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "lru-dict-1.2.0.tar.gz", hash = "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7"},
{file = "lru_dict-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641"},
@@ -2262,6 +2398,8 @@ version = "5.3.0"
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"},
{file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"},
@@ -2416,6 +2554,8 @@ version = "1.16.3"
description = "Mach-O header analysis and editing"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and sys_platform == \"darwin\""
files = [
{file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"},
{file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"},
@@ -2430,6 +2570,8 @@ version = "3.0.2"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
@@ -2500,6 +2642,8 @@ version = "3.10.0"
description = "Python plotting package"
optional = false
python-versions = ">=3.10"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "matplotlib-3.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6"},
{file = "matplotlib-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e"},
@@ -2557,6 +2701,8 @@ version = "0.1.7"
description = "Inline Matplotlib backend for Jupyter"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"},
{file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"},
@@ -2571,6 +2717,8 @@ version = "10.5.0"
description = "More routines for operating on iterables, beyond itertools"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"},
{file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"},
@@ -2582,6 +2730,8 @@ version = "1.0"
description = "Smart conversions between unicode and bytes types for common cases"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "morphys-1.0-py2.py3-none-any.whl", hash = "sha256:76d6dbaa4d65f597e59d332c81da786d83e4669387b9b2a750cfec74e7beec20"},
]
@@ -2592,6 +2742,8 @@ version = "0.0.9"
description = "Python implementation of jbenet's multiaddr"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "multiaddr-0.0.9-py2.py3-none-any.whl", hash = "sha256:5c0f862cbcf19aada2a899f80ef896ddb2e85614e0c8f04dd287c06c69dac95b"},
{file = "multiaddr-0.0.9.tar.gz", hash = "sha256:30b2695189edc3d5b90f1c303abb8f02d963a3a4edf2e7178b975eb417ab0ecf"},
@@ -2609,6 +2761,8 @@ version = "6.1.0"
description = "multidict implementation"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"},
{file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"},
@@ -2713,6 +2867,8 @@ version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker."
optional = false
python-versions = ">=3.5"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
@@ -2724,6 +2880,8 @@ version = "1.3.0"
description = "A network address manipulation library for Python"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "netaddr-1.3.0-py3-none-any.whl", hash = "sha256:c2c6a8ebe5554ce33b7d5b3a306b71bbb373e000bbbf2350dd5213cc56e3dbbe"},
{file = "netaddr-1.3.0.tar.gz", hash = "sha256:5c3c3d9895b551b763779ba7db7a03487dc1f8e3b385af819af341ae9ef6e48a"},
@@ -2738,6 +2896,8 @@ version = "2.2.0"
description = "Fundamental package for array computing in Python"
optional = false
python-versions = ">=3.10"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"},
{file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"},
@@ -2802,6 +2962,8 @@ version = "1.60.0"
description = "Open Autonomous Economic Agent framework (without vendor lock-in)"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "open_aea-1.60.0-py3-none-any.whl", hash = "sha256:7463b95973d1594bfc6aa8bd5f561f9a683dcec2adb06c44084c896325f2f5ea"},
{file = "open_aea-1.60.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:bf3ca4803a61d78133e130d74e0a7c02007318ff4ec4450a980e604ee83d8941"},
@@ -2826,7 +2988,10 @@ py-multicodec = ">=0.2.0"
pymultihash = "0.8.2"
pytest = {version = ">=7.0.0,<7.3.0", optional = true, markers = "extra == \"all\""}
python-dotenv = ">=0.14.0,<1.0.1"
-pyyaml = {version = ">=6.0.1,<7", optional = true, markers = "extra == \"all\""}
+pyyaml = [
+ {version = ">=6.0.1,<7"},
+ {version = ">=6.0.1,<7", optional = true, markers = "extra == \"all\""},
+]
requests = ">=2.28.1,<3"
semver = ">=2.9.1,<3.0.0"
@@ -2841,6 +3006,8 @@ version = "1.60.0"
description = "CLI extension for open AEA framework wrapping IPFS functionality."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "open_aea_cli_ipfs-1.60.0-py3-none-any.whl", hash = "sha256:d32493650d4d86210cfd56848748d8a3ef9eb439cd064153a3efd4a961eaf31a"},
{file = "open_aea_cli_ipfs-1.60.0.tar.gz", hash = "sha256:e90bc224ebc47bfd56a5f34739300ab8b8615e077072b5a202af398b92028d50"},
@@ -2857,6 +3024,8 @@ version = "1.60.0"
description = "Python package wrapping the public and private key cryptography and ledger api of Cosmos."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "open_aea_ledger_cosmos-1.60.0-py3-none-any.whl", hash = "sha256:53a1c8a04a12a9e18a03a7ecc1988efef6e3712cf6408ae4c46c18d8d66fba31"},
{file = "open_aea_ledger_cosmos-1.60.0.tar.gz", hash = "sha256:df48bf695de632b768baf968e6de66e27d7350af2edfac715a5635389d891b75"},
@@ -2875,6 +3044,8 @@ version = "1.60.0"
description = "Python package wrapping the public and private key cryptography and ledger api of Ethereum."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "open_aea_ledger_ethereum-1.60.0-py3-none-any.whl", hash = "sha256:0026ae8faa987f651234d3d125998a445b414a65847a121fd033f49b99de0bf0"},
{file = "open_aea_ledger_ethereum-1.60.0.tar.gz", hash = "sha256:932219edff66500f29f17ab47d487f2995e4770456031cfbacfc0eea94571c6c"},
@@ -2892,6 +3063,8 @@ version = "0.18.3"
description = "Plugin containing test tools for open-autonomy packages."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "open_aea_test_autonomy-0.18.3-py3-none-any.whl", hash = "sha256:e5a188220b8dc10268e7f7d28159cc63d97dea2a9ff3b533dbf83e0ac9bd184e"},
{file = "open_aea_test_autonomy-0.18.3.tar.gz", hash = "sha256:72c400cae3bf38035964bfc2befe65502d63fabe2139f3375ca299e08cc2d9ee"},
@@ -2909,6 +3082,8 @@ version = "0.18.3"
description = "A framework for the creation of autonomous agent services."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "open_autonomy-0.18.3-py3-none-any.whl", hash = "sha256:bc26908a73c8a72c42ec44cdd7d8ddbc6a52688fddd02328aedf83cfc7e5bbc2"},
{file = "open_autonomy-0.18.3.tar.gz", hash = "sha256:50d6fd431061630f783a90d957a674bbbabb74ff85c3b58857f42d52b79ae892"},
@@ -2946,6 +3121,8 @@ version = "0.15.0"
description = "client-side and server-side support for the OpenAPI Specification v3"
optional = false
python-versions = ">=3.7.0,<4.0.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "openapi-core-0.15.0.tar.gz", hash = "sha256:bb386117ce860ad0471c3d31180e20baf3ae53530f250ced6e78bacf96706dff"},
{file = "openapi_core-0.15.0-py3-none-any.whl", hash = "sha256:9af798aa933eb2e0e4672c6325bd87a31eb3a1100eb72be54c24a2a5c0fb6660"},
@@ -2973,6 +3150,8 @@ version = "0.2.3"
description = "OpenAPI schema validation for Python"
optional = false
python-versions = ">=3.7.0,<4.0.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "openapi-schema-validator-0.2.3.tar.gz", hash = "sha256:2c64907728c3ef78e23711c8840a423f0b241588c9ed929855e4b2d1bb0cf5f2"},
{file = "openapi_schema_validator-0.2.3-py3-none-any.whl", hash = "sha256:9bae709212a19222892cabcc60cafd903cbf4b220223f48583afa3c0e3cc6fc4"},
@@ -2992,6 +3171,8 @@ version = "0.4.0"
description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3.0 spec validator"
optional = false
python-versions = ">=3.7.0,<4.0.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "openapi-spec-validator-0.4.0.tar.gz", hash = "sha256:97f258850afc97b048f7c2653855e0f88fa66ac103c2be5077c7960aca2ad49a"},
{file = "openapi_spec_validator-0.4.0-py3-none-any.whl", hash = "sha256:06900ac4d546a1df3642a779da0055be58869c598e3042a2fef067cfd99d04d0"},
@@ -3012,6 +3193,8 @@ version = "23.2"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
{file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
@@ -3023,6 +3206,8 @@ version = "2.2.3"
description = "Powerful data structures for data analysis, time series, and statistics"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"},
{file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"},
@@ -3108,6 +3293,8 @@ version = "0.10.0"
description = "Data readers extracted from the pandas codebase,should be compatible with recent pandas versions"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pandas-datareader-0.10.0.tar.gz", hash = "sha256:9fc3c63d39bc0c10c2683f1c6d503ff625020383e38f6cbe14134826b454d5a6"},
{file = "pandas_datareader-0.10.0-py3-none-any.whl", hash = "sha256:0b95ff3635bc3ee1a6073521b557ab0e3c39d219f4a3b720b6b0bc6e8cdb4bb7"},
@@ -3124,6 +3311,8 @@ version = "3.5.0"
description = "SSH2 protocol library"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "paramiko-3.5.0-py3-none-any.whl", hash = "sha256:1fedf06b085359051cd7d0d270cebe19e755a8a921cc2ddbfa647fb0cd7d68f9"},
{file = "paramiko-3.5.0.tar.gz", hash = "sha256:ad11e540da4f55cedda52931f1a3f812a8238a7af7f62a60de538cd80bb28124"},
@@ -3145,6 +3334,8 @@ version = "1.20.2"
description = "parse() is the opposite of format()"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"},
{file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"},
@@ -3156,6 +3347,8 @@ version = "0.10.0"
description = "(Soon to be) the fastest pure-Python PEG parser I could muster"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "parsimonious-0.10.0-py3-none-any.whl", hash = "sha256:982ab435fabe86519b57f6b35610aa4e4e977e9f02a14353edf4bbc75369fc0f"},
{file = "parsimonious-0.10.0.tar.gz", hash = "sha256:8281600da180ec8ae35427a4ab4f7b82bfec1e3d1e52f80cb60ea82b9512501c"},
@@ -3170,6 +3363,8 @@ version = "0.8.4"
description = "A Python Parser"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"},
{file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"},
@@ -3185,6 +3380,8 @@ version = "0.4.3"
description = "Object-oriented paths"
optional = false
python-versions = ">=3.7.0,<4.0.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pathable-0.4.3-py3-none-any.whl", hash = "sha256:cdd7b1f9d7d5c8b8d3315dbf5a86b2596053ae845f056f57d97c0eefff84da14"},
{file = "pathable-0.4.3.tar.gz", hash = "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab"},
@@ -3196,6 +3393,8 @@ version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
@@ -3207,6 +3406,8 @@ version = "2024.8.26"
description = "Python PE parsing module"
optional = false
python-versions = ">=3.6.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and sys_platform == \"win32\""
files = [
{file = "pefile-2024.8.26-py3-none-any.whl", hash = "sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f"},
{file = "pefile-2024.8.26.tar.gz", hash = "sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632"},
@@ -3218,6 +3419,8 @@ version = "4.9.0"
description = "Pexpect allows easy control of interactive console applications."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\")"
files = [
{file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
{file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
@@ -3232,6 +3435,8 @@ version = "11.0.0"
description = "Python Imaging Library (Fork)"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"},
{file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"},
@@ -3324,6 +3529,8 @@ version = "4.3.6"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"},
{file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"},
@@ -3340,6 +3547,8 @@ version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
@@ -3355,6 +3564,8 @@ version = "3.0.48"
description = "Library for building powerful interactive command lines in Python"
optional = false
python-versions = ">=3.7.0"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"},
{file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"},
@@ -3369,6 +3580,8 @@ version = "0.2.1"
description = "Accelerated property cache"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"},
{file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"},
@@ -3460,6 +3673,8 @@ version = "4.24.4"
description = ""
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "protobuf-4.24.4-cp310-abi3-win32.whl", hash = "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb"},
{file = "protobuf-4.24.4-cp310-abi3-win_amd64.whl", hash = "sha256:1badab72aa8a3a2b812eacfede5020472e16c6b2212d737cefd685884c191085"},
@@ -3482,6 +3697,8 @@ version = "0.7.0"
description = "Run a subprocess in a pseudo terminal"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\")"
files = [
{file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
{file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
@@ -3493,6 +3710,8 @@ version = "0.2.3"
description = "Safely evaluate AST nodes without side effects"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"},
{file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"},
@@ -3507,6 +3726,8 @@ version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
@@ -3518,6 +3739,8 @@ version = "6.0.0"
description = "Elliptic curve crypto in python including secp256k1 and alt_bn128"
optional = false
python-versions = ">=3.6, <4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "py_ecc-6.0.0-py3-none-any.whl", hash = "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b"},
{file = "py_ecc-6.0.0.tar.gz", hash = "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d"},
@@ -3540,6 +3763,8 @@ version = "1.0.3"
description = "Multibase implementation for Python"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "py-multibase-1.0.3.tar.gz", hash = "sha256:d28a20efcbb61eec28f55827a0bf329c7cea80fffd933aecaea6ae8431267fe4"},
{file = "py_multibase-1.0.3-py2.py3-none-any.whl", hash = "sha256:2677c1fafcc0ae15ddb9c7f444c5becc2530b3889124fd4fa2959ddfefb8c15b"},
@@ -3556,6 +3781,8 @@ version = "0.2.1"
description = "Multicodec implementation in Python"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "py-multicodec-0.2.1.tar.gz", hash = "sha256:83021ffe8c0e272d19b5b86bc5b39efa67c8e9f4735ce6cafdbc1ace767ec647"},
{file = "py_multicodec-0.2.1-py2.py3-none-any.whl", hash = "sha256:55b6bb53088a63e56c434cb11b29795e8805652bac43d50a8f2a9bcf5ca84e1f"},
@@ -3572,6 +3799,8 @@ version = "3.2.0"
description = "Python wrapper around the CoinGecko API"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pycoingecko-3.2.0-py3-none-any.whl", hash = "sha256:b4fec16e9420b3e2f1ae38ea95710b631c9809cf1bffbf0021cc6608e357925b"},
{file = "pycoingecko-3.2.0.tar.gz", hash = "sha256:c48935d6e608efd9a798cbc4be30f1b43176cb680503dfef8f9352e038fc7605"},
@@ -3586,6 +3815,8 @@ version = "2.22"
description = "C parser in Python"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
@@ -3597,6 +3828,8 @@ version = "3.21.0"
description = "Cryptographic library for Python"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pycryptodome-3.21.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:dad9bf36eda068e89059d1f07408e397856be9511d7113ea4b586642a429a4fd"},
{file = "pycryptodome-3.21.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:a1752eca64c60852f38bb29e2c86fca30d7672c024128ef5d70cc15868fa10f4"},
@@ -3638,6 +3871,8 @@ version = "0.9.2"
description = "pyfolio is a Python library for performance and risk analysis of financial portfolios"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pyfolio-0.9.2.tar.gz", hash = "sha256:6ae63e9b01034b89accfef2806f5f11bc5810f5a5b4216882b5faa89f5f2a2a9"},
]
@@ -3664,6 +3899,8 @@ version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
{file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
@@ -3678,6 +3915,8 @@ version = "6.8.0"
description = "PyInstaller bundles a Python application and all its dependencies into a single package."
optional = false
python-versions = "<3.13,>=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pyinstaller-6.8.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:5ff6bc2784c1026f8e2f04aa3760cbed41408e108a9d4cf1dd52ee8351a3f6e1"},
{file = "pyinstaller-6.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:39ac424d2ee2457d2ab11a5091436e75a0cccae207d460d180aa1fcbbafdd528"},
@@ -3712,6 +3951,8 @@ version = "2024.10"
description = "Community maintained hooks for PyInstaller"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pyinstaller_hooks_contrib-2024.10-py3-none-any.whl", hash = "sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10"},
{file = "pyinstaller_hooks_contrib-2024.10.tar.gz", hash = "sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c"},
@@ -3727,6 +3968,8 @@ version = "0.8.2"
description = "Python implementation of the multihash specification"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pymultihash-0.8.2-py3-none-any.whl", hash = "sha256:f7fa840b24bd6acbd6b073fcd330f10e15619387297babf1dd13ca4dae6e8209"},
{file = "pymultihash-0.8.2.tar.gz", hash = "sha256:49c75a1ae9ecc6d22d259064d4597b3685da3f0258f4ded632e03a3a79af215b"},
@@ -3742,6 +3985,8 @@ version = "1.5.0"
description = "Python binding to the Networking and Cryptography (NaCl) library"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"},
{file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"},
@@ -3768,6 +4013,8 @@ version = "3.2.0"
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84"},
{file = "pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"},
@@ -3782,6 +4029,8 @@ version = "0.20.0"
description = "Persistent/Functional/Immutable data structures"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pyrsistent-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c3aba3e01235221e5b229a6c05f585f344734bd1ad42a8ac51493d74722bbce"},
{file = "pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1beb78af5423b879edaf23c5591ff292cf7c33979734c99aa66d5914ead880f"},
@@ -3823,6 +4072,8 @@ version = "7.2.1"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"},
{file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"},
@@ -3846,6 +4097,8 @@ version = "0.21.2"
description = "Pytest support for asyncio"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"},
{file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"},
@@ -3864,6 +4117,8 @@ version = "4.0.0"
description = "Pytest plugin for measuring coverage."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"},
{file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"},
@@ -3882,6 +4137,8 @@ version = "3.12.0"
description = "Pytest plugin to randomly order tests and control random.seed."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pytest-randomly-3.12.0.tar.gz", hash = "sha256:d60c2db71ac319aee0fc6c4110a7597d611a8b94a5590918bfa8583f00caccb2"},
{file = "pytest_randomly-3.12.0-py3-none-any.whl", hash = "sha256:f4f2e803daf5d1ba036cc22bf4fe9dbbf99389ec56b00e5cba732fb5c1d07fdd"},
@@ -3896,6 +4153,8 @@ version = "11.0"
description = "pytest plugin to re-run tests to eliminate flaky failures"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pytest-rerunfailures-11.0.tar.gz", hash = "sha256:cee59e4e6f0d73ae63fba099865314ba9b915b719349541110fa012ffb6efb13"},
{file = "pytest_rerunfailures-11.0-py3-none-any.whl", hash = "sha256:b8c535b6c353de8c4b39258216512c64f288e4d349e86877583a08b2f5ea5441"},
@@ -3911,6 +4170,8 @@ version = "1.2.2"
description = "Convert numbers from base 10 integers to base X strings and back again."
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "python-baseconv-1.2.2.tar.gz", hash = "sha256:0539f8bd0464013b05ad62e0a1673f0ac9086c76b43ebf9f833053527cd9931b"},
]
@@ -3921,6 +4182,8 @@ version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
@@ -3935,6 +4198,8 @@ version = "0.21.1"
description = "Read key-value pairs from a .env file and set them as environment variables"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "python-dotenv-0.21.1.tar.gz", hash = "sha256:1c93de8f636cde3ce377292818d0e440b6e45a82f215c3744979151fa8151c49"},
{file = "python_dotenv-0.21.1-py3-none-any.whl", hash = "sha256:41e12e0318bebc859fcc4d97d4db8d20ad21721a6aa5047dd59f090391cb549a"},
@@ -3949,6 +4214,8 @@ version = "2022.2.1"
description = "World timezone definitions, modern and historical"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"},
{file = "pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"},
@@ -3960,6 +4227,8 @@ version = "16.0.0"
description = "Unicode normalization forms (NFC, NFKC, NFD, NFKD). A library independent of the Python core Unicode database."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "pyunormalize-16.0.0-py3-none-any.whl", hash = "sha256:c647d95e5d1e2ea9a2f448d1d95d8518348df24eab5c3fd32d2b5c3300a49152"},
{file = "pyunormalize-16.0.0.tar.gz", hash = "sha256:2e1dfbb4a118154ae26f70710426a52a364b926c9191f764601f5a8cb12761f7"},
@@ -3971,6 +4240,8 @@ version = "308"
description = "Python for Window Extensions"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "(sys_platform == \"win32\" or platform_system == \"Windows\") and python_version <= \"3.11\""
files = [
{file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"},
{file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"},
@@ -3998,6 +4269,8 @@ version = "0.2.3"
description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and sys_platform == \"win32\""
files = [
{file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"},
{file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"},
@@ -4009,6 +4282,8 @@ version = "6.0.1"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
{file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
@@ -4069,6 +4344,8 @@ version = "2024.11.6"
description = "Alternative regular expression module, to replace re."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
@@ -4172,6 +4449,8 @@ version = "2.31.0"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
{file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
@@ -4193,6 +4472,8 @@ version = "1.0.0"
description = "A utility belt for advanced users of python-requests"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"},
{file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"},
@@ -4207,6 +4488,8 @@ version = "3.0.0"
description = "A package for Recursive Length Prefix encoding and decoding"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "rlp-3.0.0-py2.py3-none-any.whl", hash = "sha256:d2a963225b3f26795c5b52310e0871df9824af56823d739511583ef459895a7d"},
{file = "rlp-3.0.0.tar.gz", hash = "sha256:63b0465d2948cd9f01de449d7adfb92d207c1aef3982f20310f8009be4a507e8"},
@@ -4228,6 +4511,8 @@ version = "1.6.0"
description = "A set of python modules for machine learning and data mining"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718"},
{file = "scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460"},
@@ -4282,6 +4567,8 @@ version = "1.14.1"
description = "Fundamental algorithms for scientific computing in Python"
optional = false
python-versions = ">=3.10"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"},
{file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"},
@@ -4332,6 +4619,8 @@ version = "0.13.2"
description = "Statistical data visualization"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"},
{file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"},
@@ -4353,6 +4642,8 @@ version = "2.13.0"
description = "Python helper for Semantic Versioning (http://semver.org/)"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"},
{file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"},
@@ -4364,6 +4655,8 @@ version = "75.6.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"},
{file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"},
@@ -4384,6 +4677,8 @@ version = "1.17.0"
description = "Python 2 and 3 compatibility utilities"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
@@ -4395,6 +4690,8 @@ version = "1.3.1"
description = "Sniff out which async library your code is running under"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"},
{file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
@@ -4406,6 +4703,8 @@ version = "2.4.0"
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"},
{file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"},
@@ -4417,6 +4716,8 @@ version = "0.6.3"
description = "Extract data from python stack frames and tracebacks for informative displays"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
{file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
@@ -4436,6 +4737,8 @@ version = "1.6.7"
description = "module to create simple ASCII tables"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "texttable-1.6.7-py2.py3-none-any.whl", hash = "sha256:b7b68139aa8a6339d2c320ca8b1dc42d13a7831a346b446cb9eb385f0c76310c"},
{file = "texttable-1.6.7.tar.gz", hash = "sha256:290348fb67f7746931bcdfd55ac7584ecd4e5b0846ab164333f0794b121760f2"},
@@ -4447,6 +4750,8 @@ version = "3.5.0"
description = "threadpoolctl"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"},
{file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"},
@@ -4458,6 +4763,8 @@ version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
@@ -4469,6 +4776,8 @@ version = "2.2.1"
description = "A lil' TOML parser"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version < \"3.11\""
files = [
{file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
{file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
@@ -4510,6 +4819,8 @@ version = "0.2.17"
description = "A library that wraps many useful tools (linters, analysers, etc) to keep Python code clean, secure, well-documented and optimised."
optional = false
python-versions = "<4,>=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "tomte-0.2.17-py3-none-any.whl", hash = "sha256:477e1e903610b5e2a8cf74a78cf229eacc21aa666e25e7bb872385ef2c013cfe"},
{file = "tomte-0.2.17.tar.gz", hash = "sha256:ad583dd39f2c398272f7f196471b2ecc8430eb89e07295ec1e682f64dd782831"},
@@ -4547,6 +4858,8 @@ version = "1.0.0"
description = "List processing tools and functional utilities"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\" and (implementation_name == \"cpython\" or implementation_name == \"pypy\")"
files = [
{file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"},
{file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"},
@@ -4558,6 +4871,8 @@ version = "3.28.0"
description = "tox is a generic virtualenv management and test command line tool"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "tox-3.28.0-py2.py3-none-any.whl", hash = "sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea"},
{file = "tox-3.28.0.tar.gz", hash = "sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640"},
@@ -4583,6 +4898,8 @@ version = "5.14.3"
description = "Traitlets Python configuration system"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"},
{file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"},
@@ -4598,6 +4915,8 @@ version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
@@ -4609,6 +4928,8 @@ version = "2024.2"
description = "Provider of IANA time zone data"
optional = false
python-versions = ">=2"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"},
{file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"},
@@ -4620,6 +4941,8 @@ version = "2.2.3"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"},
{file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"},
@@ -4637,6 +4960,8 @@ version = "1.29.3"
description = "Multi-container orchestration for Docker"
optional = false
python-versions = ">=3.4"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "valory-docker-compose-1.29.3.tar.gz", hash = "sha256:77469ff7493e0317ccc8d92264323d62eee23c810536184d705b833e0cbb6a03"},
{file = "valory_docker_compose-1.29.3-py2.py3-none-any.whl", hash = "sha256:7f5d1eceb080d0512e2f5d16b57eaaf9a742b02da0878b71041217ec7cef53fe"},
@@ -4665,6 +4990,8 @@ version = "1.0.2"
description = "Simple python varint implementation"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "varint-1.0.2.tar.gz", hash = "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5"},
]
@@ -4675,6 +5002,8 @@ version = "20.28.0"
description = "Virtual Python Environment builder"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"},
{file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"},
@@ -4695,6 +5024,8 @@ version = "6.0.0"
description = "Filesystem events monitoring"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"},
{file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"},
@@ -4737,6 +5068,8 @@ version = "0.2.13"
description = "Measures the displayed width of unicode strings in a terminal"
optional = false
python-versions = "*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
{file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
@@ -4748,6 +5081,8 @@ version = "6.20.3"
description = "web3.py"
optional = false
python-versions = ">=3.7.2"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "web3-6.20.3-py3-none-any.whl", hash = "sha256:529fbb33f2476ce8185f7a2ed7e2e07c4c28621b0e89b845fbfdcaea9571286d"},
{file = "web3-6.20.3.tar.gz", hash = "sha256:c69dbf1a61ace172741d06990e60afc7f55f303eac087e7235f382df3047d017"},
@@ -4783,6 +5118,8 @@ version = "0.59.0"
description = "WebSocket client for Python with low level API options"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "websocket-client-0.59.0.tar.gz", hash = "sha256:d376bd60eace9d437ab6d7ee16f4ab4e821c9dae591e1b783c58ebd8aaf80c5c"},
{file = "websocket_client-0.59.0-py2.py3-none-any.whl", hash = "sha256:2e50d26ca593f70aba7b13a489435ef88b8fc3b5c5643c1ce8808ff9b40f0b32"},
@@ -4797,6 +5134,8 @@ version = "14.1"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"},
{file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"},
@@ -4875,6 +5214,8 @@ version = "2.0.3"
description = "The comprehensive WSGI web application library."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "Werkzeug-2.0.3-py3-none-any.whl", hash = "sha256:1421ebfc7648a39a5c58c601b154165d05cf47a3cd0ccb70857cbdacf6c8f2b8"},
{file = "Werkzeug-2.0.3.tar.gz", hash = "sha256:b863f8ff057c522164b6067c9e28b041161b4be5ba4d0daceeaa50a163822d3c"},
@@ -4889,6 +5230,8 @@ version = "1.18.3"
description = "Yet another URL library"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
+markers = "python_version <= \"3.11\""
files = [
{file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"},
{file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"},
@@ -4980,6 +5323,6 @@ multidict = ">=4.0"
propcache = ">=0.2.0"
[metadata]
-lock-version = "2.0"
+lock-version = "2.1"
python-versions = "<3.12,>=3.10"
-content-hash = "615e10bd73352897efc6e3852125b0daaeacbd949d65635b575561c9d0ad7c9d"
+content-hash = "146c9c21ee0cad71bdc1b74c1e8dc1f134307f141ee9f6c5ab8580d39d3c8345"
From 31eb4690241da4f2af454661a3c74615f048d5c6 Mon Sep 17 00:00:00 2001
From: princevijay27
Date: Wed, 8 Jan 2025 13:16:29 +0530
Subject: [PATCH 2/8] resolve the CLI issue
---
LICENSE | 222 +--------
README.md | 438 ++++++++++++++----
gitleaks | Bin 0 -> 6397952 bytes
gitleaks_8.10.1_linux_x64.tar.gz | Bin 0 -> 2615207 bytes
packages/packages.json | 8 +-
.../valory/agents/optimus/aea-config.yaml | 4 +-
packages/valory/services/optimus/service.yaml | 2 +-
.../skills/liquidity_trader_abci/skill.yaml | 5 +
.../valory/skills/optimus_abci/skill.yaml | 2 +-
9 files changed, 389 insertions(+), 292 deletions(-)
create mode 100644 gitleaks
create mode 100644 gitleaks_8.10.1_linux_x64.tar.gz
diff --git a/LICENSE b/LICENSE
index 261eeb9e..3c270b36 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,201 +1,21 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+MIT License
+
+Copyright (c) 2019 Zachary Rice
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index ea65335b..33d22225 100644
--- a/README.md
+++ b/README.md
@@ -1,124 +1,396 @@
-## Optimus service
+# gitleaks
-**Supported Chains:**
-The Optimus service currently operates on the following chains:
-- Optimism
-- Base
-- Ethereum
-- Mode
+```
+┌─○───┐
+│ │╲ │
+│ │ ○ │
+│ ○ ░ │
+└─░───┘
+```
-**Supported DEXs:**
-The Optimus service trades on the following decentralized exchanges (DEXs):
-- Balancer
-- Uniswap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Gitleaks is a SAST tool for **detecting** and **preventing** hardcoded secrets like passwords, api keys, and tokens in git repos. Gitleaks is an **easy-to-use, all-in-one solution** for detecting secrets, past or present, in your code.
+
+| Demos |
+| ----------- |
+| CLI [![asciicast](https://asciinema.org/a/455683.svg)](https://asciinema.org/a/455683)|
+| [Github-Action](https://github.com/gitleaks/gitleaks-action) ![gitleaks-demo-fast-cropped](https://user-images.githubusercontent.com/15034943/178513034-de5a1906-b71d-454a-a792-47b7ac0e21e6.gif)|
+
+## Getting Started
+
+Gitleaks can be installed using Homebrew, Docker, or Go. Gitleaks is also available in binary form for many popular platforms and OS types on the [releases page](https://github.com/zricethezav/gitleaks/releases). In addition, Gitleaks can be implemented as a pre-commit hook directly in your repo or as a GitHub action using [Gitleaks-Action](https://github.com/gitleaks/gitleaks-action) (see demo above).
+
+### MacOS
-**Operational Process:**
-Within a typical epoch of 24 hours, the Optimus service performs the following tasks:
+```bash
+brew install gitleaks
+```
-1. **Opportunity Identification:** It identifies trading opportunities through campaigns advertised on the Merkl platform across the supported DEXs.
-
-2. **Liquidity Pool Investment:** When a suitable liquidity pool is found, the service takes the following actions:
- - **First Opportunity:** If this is the first opportunity encountered, the service will add liquidity to the pool if its Annual Percentage Rate (APR) is higher than 5%.
- - **Subsequent Opportunities:** If the service has already invested in a liquidity pool, it will consider the next opportunity only if its APR exceeds that of the previously invested pool.
+### Docker
-3. **Transaction Tracking:** The service tracks the number of transactions performed on the Optimism chain, which serves as key performance indicators (KPIs) for Olas Staking Rewards.
+#### DockerHub
-The Optimus service is an [agent service](https://docs.autonolas.network/open-autonomy/get_started/what_is_an_agent_service/) (or autonomous service) based on the [Open Autonomy framework](https://docs.autonolas.network/open-autonomy/). Below we show you how to prepare your environment, how to prepare the agent keys, and how to configure and run the service.
+```bash
+docker pull zricethezav/gitleaks:latest
+docker run -v ${path_to_host_folder_to_scan}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path" [OPTIONS]
+```
-## Prepare the environment
+#### ghcr.io
-- System requirements:
+```bash
+docker pull ghcr.io/zricethezav/gitleaks:latest
+docker run -v ${path_to_host_folder_to_scan}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path" [OPTIONS]
+```
- - Python `== 3.10`
- - [Poetry](https://python-poetry.org/docs/) `>=1.4.0`
- - [Docker Engine](https://docs.docker.com/engine/install/)
- - [Docker Compose](https://docs.docker.com/compose/install/)
+### From Source
-- Clone this repository:
+1. Download and install Go from https://golang.org/dl/
+2. Clone the repo
- git clone https://github.com/valory-xyz/optimus.git
+```bash
+git clone https://github.com/zricethezav/gitleaks.git
+```
-- Create a development environment:
+3. Build the binary
- poetry install && poetry shell
+```bash
+cd gitleaks
+make build
+```
-- Configure the Open Autonomy framework:
+### Github Action
- autonomy init --reset --author valory --remote --ipfs --ipfs-node "/dns/registry.autonolas.tech/tcp/443/https"
+Check out the official [Gitleaks GitHub Action](https://github.com/gitleaks/gitleaks-action)
-- Pull packages required to run the service:
+```
+name: gitleaks
+on: [pull_request, push, workflow_dispatch]
+jobs:
+ scan:
+ name: gitleaks
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - uses: gitleaks/gitleaks-action@v2
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE}} # Only required for Organizations, not personal accounts.
+```
- autonomy packages sync --update-packages
+### Pre-Commit
-## Prepare the keys and the Safe
+1. Install pre-commit from https://pre-commit.com/#install
+2. Create a `.pre-commit-config.yaml` file at the root of your repository with the following content:
-1. You need a **Gnosis keypair** to run the service.
+ ```
+ repos:
+ - repo: https://github.com/zricethezav/gitleaks
+ rev: v8.2.0
+ hooks:
+ - id: gitleaks
+ ```
-First, prepare the `keys.json` file with the Gnosis keypair of your agent. (Replace the uppercase placeholders below):
+ for a [native execution of GitLeaks](https://github.com/zricethezav/gitleaks/releases) or use the [`gitleaks-docker` pre-commit ID](https://github.com/zricethezav/gitleaks/blob/master/.pre-commit-hooks.yaml) for executing GitLeaks using the [official Docker images](#docker)
- cat > keys.json << EOF
- [
- {
- "address": "YOUR_AGENT_ADDRESS",
- "private_key": "YOUR_AGENT_PRIVATE_KEY"
- }
- ]
- EOF
+3. Install with `pre-commit install`
+4. Now you're all set!
-2. You need to deploy **[Safes](https://safe.global/) on the following networks - Ethereum-Mainnet, Optimism, Base, Mode**
+```
+➜ git commit -m "this commit contains a secret"
+Detect hardcoded secrets.................................................Failed
+```
-3. You need to provide some funds ETH and USDC both to your Safe address on Ethereum-Mainnet, and some ETH to your agent across all the chains (Ethereum-Mainnet, Optimism, Base, Mode) to cover for gas fees.
+Note: to disable the gitleaks pre-commit hook you can prepend `SKIP=gitleaks` to the commit command
+and it will skip running gitleaks
-4. You will need your Tenderly Access Key, Tenderly account Slug, and Tenderly Project Slug. Get one at https://dashboard.tenderly.co/ under settings.
+```
+➜ SKIP=gitleaks git commit -m "skip gitleaks check"
+Detect hardcoded secrets................................................Skipped
+```
-5. You will need also need Coingecko API Key. Get one at https://www.coingecko.com/ under My Account -> Developer's Dashboard.
+## Usage
-## Configure the service
+```
+Usage:
+ gitleaks [command]
+
+Available Commands:
+ completion generate the autocompletion script for the specified shell
+ detect Detect secrets in code
+ help Help about any command
+ protect Protect secrets in code
+ version Display gitleaks version
+
+Flags:
+ -c, --config string config file path
+ order of precedence:
+ 1. --config/-c
+ 2. env var GITLEAKS_CONFIG
+ 3. (--source/-s)/.gitleaks.toml
+ If none of the three options are used, then gitleaks will use the default config
+ --exit-code string exit code when leaks have been encountered (default: 1)
+ -h, --help help for gitleaks
+ -l, --log-level string log level (debug, info, warn, error, fatal) (default "info")
+ --redact redact secrets from logs and stdout
+ -f, --report-format string output format (json, csv, sarif)
+ -r, --report-path string report file
+ -s, --source string path to source (git repo, directory, file)
+ -v, --verbose show verbose output from scan
+
+Use "gitleaks [command] --help" for more information about a command.
+```
-Set up the following environment variables, to run the service. **Please read their description below**.
+### Commands
-```bash
-export ETHEREUM_LEDGER_RPC=INSERT_YOUR_ETHEREUM_RPC
-export OPTIMISM_LEDGER_RPC=INSERT_YOUR_OPTIMISM_RPC
-export BASE_LEDGER_RPC=INSERT_YOUR_BASE_RPC
-export MODE_LEDGER_RPC=INSERT_YOUR_MODE_RPC
+There are two commands you will use to detect secrets; `detect` and `protect`.
+
+#### Detect
+
+The `detect` command is used to scan repos, directories, and files. This command can be used on developer machines and in CI environments.
+
+When running `detect` on a git repository, gitleaks will parse the output of a `git log -p` command (you can see how this executed
+[here](https://github.com/zricethezav/gitleaks/blob/7240e16769b92d2a1b137c17d6bf9d55a8562899/git/git.go#L17-L25)).
+[`git log -p` generates patches](https://git-scm.com/docs/git-log#_generating_patch_text_with_p) which gitleaks will use to detect secrets.
+You can configure what commits `git log` will range over by using the `--log-opts` flag. `--log-opts` accepts any option for `git log -p`.
+For example, if you wanted to run gitleaks on a range of commits you could use the following command: `gitleaks detect --source . --log-opts="--all commitA..commitB"`.
+See the `git log` [documentation](https://git-scm.com/docs/git-log) for more information.
+
+You can scan files and directories by using the `--no-git` option.
+
+#### Protect
+
+The `protect` command is used to uncommitted changes in a git repo. This command should be used on developer machines in accordance with
+[shifting left on security](https://cloud.google.com/architecture/devops/devops-tech-shifting-left-on-security).
+When running `protect` on a git repository, gitleaks will parse the output of a `git diff` command (you can see how this executed
+[here](https://github.com/zricethezav/gitleaks/blob/7240e16769b92d2a1b137c17d6bf9d55a8562899/git/git.go#L48-L49)). You can set the
+`--staged` flag to check for changes in commits that have been `git add`ed. The `--staged` flag should be used when running Gitleaks
+as a pre-commit.
-export ALL_PARTICIPANTS='["YOUR_AGENT_ADDRESS"]'
-export SAFE_CONTRACT_ADDRESSES='{ethereum:"YOUR_SAFE_ADDRESS_ON_ETHEREUM","optimism":"YOUR_SAFE_ADDRESS_ON_OPTIMISM","base":"YOUR_SAFE_ADDRESS_ON_BASE","mode":"YOUR_SAFE_ADDRESS_ON_MODE"}'
+**NOTE**: the `protect` command can only be used on git repos, running `protect` on files or directories will result in an error message.
+
+### Verify Findings
+
+You can verify a finding found by gitleaks using a `git log` command.
+Example output:
+
+```
+{
+ "Description": "AWS",
+ "StartLine": 37,
+ "EndLine": 37,
+ "StartColumn": 19,
+ "EndColumn": 38,
+ "Match": "\t\t\"aws_secret= \\\"AKIAIMNOJVGFDXXXE4OA\\\"\": true,",
+ "Secret": "AKIAIMNOJVGFDXXXE4OA",
+ "File": "checks_test.go",
+ "Commit": "ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29",
+ "Entropy": 0,
+ "Author": "zricethezav",
+ "Email": "thisispublicanyways@gmail.com",
+ "Date": "2018-01-28 17:39:00 -0500 -0500",
+ "Message": "[update] entropy check",
+ "Tags": [],
+ "RuleID": "aws-access-token"
+}
+
+```
+
+We can use the following format to verify the leak:
-export SLIPPAGE_FOR_SWAP=0.09
-export TENDERLY_ACCESS_KEY=YOUR_TENDERLY_ACCESS_KEY
-export TENDERLY_ACCOUNT_SLUG=YOUR_TENDERLY_ACCOUNT_SLUG
-export TENDERLY_PROJECT_SLUG=YOUR_TENDERLY_PROJECT_SLUG
-export COINGECKO_API_KEY=YOUR_COINGECKO_API_KEY
+```
+git log -L {StartLine,EndLine}:{File} {Commit}
```
-Note - We provide default value for SLIPPAGE_FOR_SWAP, but feel free to experiment with different values. It indicates the allowed slippage when bridging/swapping assets using LiFi.
+So in this example it would look like:
-## Run the service
-Once you have configured (exported) the environment variables, you are in position to run the service.
+```
+git log -L 37,37:checks_test.go ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29
+```
-- Fetch the service:
+Which gives us:
- ```bash
- autonomy fetch --local --service valory/optimus && cd optimus
- ```
+```
+commit ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29
+Author: zricethezav
+Date: Sun Jan 28 17:39:00 2018 -0500
-- Build the Docker image:
+ [update] entropy check
- ```bash
- autonomy build-image
- ```
+diff --git a/checks_test.go b/checks_test.go
+--- a/checks_test.go
++++ b/checks_test.go
+@@ -28,0 +37,1 @@
++ "aws_secret= \"AKIAIMNOJVGFDXXXE4OA\"": true,
-- Copy your `keys.json` file prepared [in the previous section](#prepare-the-keys-and-the-safe) in the same directory:
+```
- ```bash
- cp path/to/keys.json .
- ```
+## Pre-Commit hook
+
+You can run Gitleaks as a pre-commit hook by copying the example `pre-commit.py` script into
+your `.git/hooks/` directory.
+
+## Configuration
+
+Gitleaks offers a configuration format you can follow to write your own secret detection rules:
+
+```toml
+# Title for the gitleaks configuration file.
+title = "Gitleaks title"
+
+# Extend the base (this) configuration. When you extend a configuration
+# the base rules take precendence over the extended rules. I.e, if there are
+# duplicate rules in both the base configuration and the extended configuration
+# the base rules will override the extended rules.
+# Another thing to know with extending configurations is you can chain together
+# multiple configuration files to a depth of 2. Allowlist arrays are appended
+# and can contain duplicates.
+# useDefault and path can NOT be used at the same time. Choose one.
+[extend]
+# useDefault will extend the base configuration with the default gitleaks config:
+# https://github.com/zricethezav/gitleaks/blob/master/config/gitleaks.toml
+useDefault = true
+# or you can supply a path to a configuration. Path is relative to where gitleaks
+# was invoked, not the location of the base config.
+path = "common_config.toml"
+
+# An array of tables that contain information that define instructions
+# on how to detect secrets
+[[rules]]
+
+# Unique identifier for this rule
+id = "awesome-rule-1"
+
+# Short human readable description of the rule.
+description = "awesome rule 1"
+
+# Golang regular expression used to detect secrets. Note Golang's regex engine
+# does not support lookaheads.
+regex = '''one-go-style-regex-for-this-rule'''
+
+# Golang regular expression used to match paths. This can be used as a standalone rule or it can be used
+# in conjunction with a valid `regex` entry.
+path = '''a-file-path-regex'''
+
+# Array of strings used for metadata and reporting purposes.
+tags = ["tag","another tag"]
+
+# Int used to extract secret from regex match and used as the group that will have
+# its entropy checked if `entropy` is set.
+secretGroup = 3
+
+# Float representing the minimum shannon entropy a regex group must have to be considered a secret.
+entropy = 3.5
+
+# Keywords are used for pre-regex check filtering. Rules that contain
+# keywords will perform a quick string compare check to make sure the
+# keyword(s) are in the content being scanned. Ideally these values should
+# either be part of the idenitifer or unique strings specific to the rule's regex
+# (introduced in v8.6.0)
+keywords = [
+ "auth",
+ "password",
+ "token",
+]
+
+# You can include an allowlist table for a single rule to reduce false positives or ignore commits
+# with known/rotated secrets
+[rules.allowlist]
+description = "ignore commit A"
+commits = [ "commit-A", "commit-B"]
+paths = [
+ '''go\.mod''',
+ '''go\.sum'''
+]
+regexes = [
+ '''process''',
+ '''getenv''',
+]
+# note: stopwords targets the extracted secret, not the entire regex match
+# like 'regexes' does. (stopwords introduced in 8.8.0)
+stopwords = [
+ '''client''',
+ '''endpoint''',
+]
+
+
+# This is a global allowlist which has a higher order of precedence than rule-specific allowlists.
+# If a commit listed in the `commits` field below is encountered then that commit will be skipped and no
+# secrets will be detected for said commit. The same logic applies for regexes and paths.
+[allowlist]
+description = "global allow list"
+commits = [ "commit-A", "commit-B", "commit-C"]
+paths = [
+ '''gitleaks\.toml''',
+ '''(.*?)(jpg|gif|doc)'''
+]
+regexes = [
+ '''219-09-9999''',
+ '''078-05-1120''',
+ '''(9[0-9]{2}|666)-\d{2}-\d{4}''',
+]
+# note: stopwords targets the extracted secret, not the entire regex match
+# like 'regexes' does. (stopwords introduced in 8.8.0)
+stopwords = [
+ '''client''',
+ '''endpoint''',
+]
+```
+Refer to the default [gitleaks config](https://github.com/zricethezav/gitleaks/blob/master/config/gitleaks.toml) for examples or follow the [contributing guidelines](https://github.com/zricethezav/gitleaks/blob/master/README.md).
-- Build the deployment with a single agent and run:
+### Additional Configuration
+#### gitleaks:allow
+If you are knowingly committing a test secret that gitleaks will catch you can add a `gitleaks:allow` comment to that line which will instruct gitleaks
+to ignore that secret. Ex:
+```
+class CustomClass:
+ discord_client_secret = '8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ' #gitleaks:allow
- ```bash
- autonomy deploy build --n 1 -ltm
- autonomy deploy run --build-dir abci_build/
- ```
+```
+
+#### .gitleaksignore
+You can ignore specific findings by creating a `.gitleaksignore` file at the root of your repo. In release v8.10.0 Gitleaks added a `Fingerprint` value to the Gitleaks report. Each leak, or finding, has a Fingerprint that uniquely identifies a secret. Add this fingerprint to the `.gitleaksignore` file to ignore that specific secret. See Gitleaks' [.gitleaksignore](https://github.com/zricethezav/gitleaks/blob/master/.gitleaksignore) for an example.
+
+
+
+## Secured by Jit
+
+We use [Jit](https://www.jit.io/jit-open-source-gitleaks?utm_source=github&utm_medium=readme&utm_campaign=GitleaksReadme&utm_id=oss&items=item-secret-detection) to secure our codebase, to achieve fully automated, full-stack continuous security using the world's best OSS security tools.
+
+## Sponsorships
+
+
+
+
+
+
+
+## Exit Codes
+
+You can always set the exit code when leaks are encountered with the --exit-code flag. Default exit codes below:
+
+```
+0 - no leaks present
+1 - leaks or error encountered
+126 - unknown flag
+```
diff --git a/gitleaks b/gitleaks
new file mode 100644
index 0000000000000000000000000000000000000000..320391438fb4ec67bf3afde22c31e0360a708540
GIT binary patch
literal 6397952
zcmeEvd3=*q_IJ7j!cv~dB4ts6MlG%_Yb$n4v4tm?Iz<_+;%_X99aL0=1j?eMqy-*h
zG_IrKIOwROqmDYmAe-7!XbU=8z=dT-albJx6-H=br0@58?~^oX3p(%begB(&KFxEV
zyPSLOIp>~x&fT6RMV^VNDJhoNU#jI77QVTPCdw$6nb6pt#p1H$TDs%6k0s604e9Cl
zkL7cjq1bbUSuXap*cCvQ;s0ZrdVfrF$w2HmLq%I+Pv+$x!C7S}_Tw@G>bd^I^W=N%
z8LN-wB#eD3-LmgiRnC0YJbjLQk3AF1v5l7S|ET=o-z7a)^;DScTiIR3o9&zOxp#&v
zr(%Ed*JkGM4@ke>a^_EFk7tOLi%0xl21p)$r%reZA)^BH^Ghycr{
z#vo2NCszF)}j2f1*-hB1*&|9>=M_+xNwK^HD>vmSoy*s
ziP<~h&sy02I1S@+s^oTG2mDR8#$i%=6U*;=SjqXmhgJDq!{U%-8ArUN3Xr>rezfOg||o?S)jYZ-4)9=)V;BF9rTff&WtAzZCc{
z1^!Ec|5D(;6!_m#fHvl3_~&yH+|_Hwy3e`NbIEOU#$Gh@vW27ElWv+&c-|<_jKUkH
zPn~|wq)SHLGhO?y@m1xV(B&5o(R}g~ng454u$b1@A
zPI^GmZo1LzG3xZ{y;{||u*Gw>Mh@elH`KP_Pp{s3d!M45nw*2Wu{)Zh4RcxayxrRJ
z22e;3-Ik)~9nhA(#Fr6o>Y+t#Zlgs%^pRfMcA-A}sGd@<2U^n?|E@Cky4k*SeGlgB
z(1uwe8zlHm1n)s>N_4~PtkA1>Xm?$e0+U)TeCPfHSF@Y&GPlpgZURfIo*;|6QLVdxMHev
zm>wLEizwZg>U1IgT{Kp_b730jXniV_YuP{t5%duobi{%GrR1wayujCxb@YjOmJJSM
z5i8B~GN$X|E|vbsB!HkVB^Dt<93#NZh5_bqmYHP2
zoT+3kSHUcb!#sm9pG<~X_ak5ituvlLn}Qj?!b8!oy2jgs)s*Dyi1ycmro2^drWn@g
zfm(;Q=E^~O@HV?1%<}{bZ2kqA7Vphfd%eH$|H4up_LWg8z|6&v3et*r&lXSrLXu(D
zPBe26QGQ^OB2$GTLp5JR)+;t4eIV1lh!Eeg6e*ww0Ync1Tr_pX$$Hx+J+Dc-=N8Cd
za01pUP41S{)_&3ts=ykRGtiY^0y6^?vJ$YMw>q)p=
zifOiPw1^T+K~&ZFMo7fj&a!r%de9=h5R&N}=0Qq!WD(mD%y{?rtaHp3`6vXOJk+;b
z;!|S?q&@%R;E@l&*7YRVvzP0wr5LSEzm
zVgrDYCz#RAL@djsQbB!TibVW}$7T8#c)0W4oU_4W>=Kca0P!>Yc#J0KPk>$voq(RU
zUEGZq-DpHmHx&QG5oCnYgF+LtW$GRw5EV{Pt+}mSwf(3s)BD`@9?oc}1%%o5GwoKt{F@McROe@*QS3$qqN
z1ysLD+(Q{t8)g8Gju9e5SHWxqFI2%21jnf0Yy{7e!4=f#csp6Wy{z6&P;X7@EnU4e
ztGAYV*0I74U4(K`^_H#PK2&cd>TSDvo2}lqsJF0sTdUq)R&UR$w>pxfCR!b;U}I(@P6X9ETXZeo7pZqP>oUIIB;VJXZ7X0@sfscicpjsQRFv7ulNdEp
zMVU?Qg(zA75EX4#*dE-1oHiAet)f0-)DHuR<=PSzwS!TgsHoX0s)kYTsHm`tdI?cs
zu|dVXtl}PHwr5pTlZsl-s0SI;s!8*(g2J)YM1JdAw61BFioNkHs)@iIDElJqinbY^;ONs@(D$L{Y#2WREh*a4y{HMA#IY7R{koCv6rUre
zQ+C7p%mxSmKqA#5YP-l|*VgZ|X!lvSZwC3+?@K|jP6c})xKRcBA@~;+?2q8HDmW0q
zhgEP8f&mpAqTN@!BI6GA(p$T4)9`I82Haw%%}LMM8qEggPBFC;GU-ktFt-POQ?>hQ
zqNzDGMlD*+=%I)h-nhc*03bv;0xjLOrR+#6pw`$xPBqH@CH5lJkrKTDA`LixS|?j+
z1&&g)61TTioDIoaRFEy-pn`1q^9aTX9Ttl^!mnKHw4pKnxjkveWx_ERi&;gyS(*U`>OjjWh`j^!bnF-w)Q&1>w!_d%MdlF={VCifvWgY6X
zXemudwIQ~*ij9?4`fc8I&}|OtwoGcOOg*S$i0Y>Yv&&(hU2O9WqOycBA;&4G(w*Yz
z{&J{F$HDvX6=5~ZSgp~e$
z3-CJVUtp9=j9d^QjWs*;(Bu@4QKK6NV6|ylNEyQ0^xBUx>UwP)bq9HZ=_wdWd)eH1
z-}`<|g9Ggb!DP83y79euvmaaLoj{PFgxBfPgNskJ)3C}d4tnf%Pu@E|Cyc)nGm9{a
z+A|At-|_Y5`=A0Ej)PpeA81uKp-nk8?JT4KB=VN*P{Yk{=-GLZ)+Kk4IJWC|e
zvdrV9zV%kK*e{#3ed)au)XzW!I{pFX@vAHGcw^-k3dblpg*zG0O4rw`w)58tV$
z>{co1ddhZvy=MNg5Ujr1uWXE#MeXqrR73g+fqhH5K*ke#%IQL%Q!ey4I;)jmyU<(d
zLg(@c7g|2yLhE=JJx59d_=X8EfZ=glMC%zw(O(-Iw43*;t7OLZ7;K-p+{E9d>F*c5)u1i--56y-xCcUq?rMiU%5-io6t>Ne|
z;@Hh5c6QN|6`W>bXBS7t;&q;c+zC6_w^YT8H;VVNkt>_{UCiS3cm;k}7sP1zH!MGj
z>?HhF)KFy_cR6X%X?A}jA172fTh!|=^Oa*QQib`Nsa|C!WX{4X#;AOv4iewBS(=9c
zD)ZAm9Z$?IH@U}H@mwxqo+5@Ize8`U(E}|#7QZG=V9r^{DVEDbQ!XkuQ(V;eCcgRF
zDvQ}7e}I#SF2M0?-jyBZe*&$x`8k+u@t&=RreM}(yYJL0Q0hpJxqTq1yEtsb=6`mr
z>p`4;u!AEZ>$ihO;&IZz3kxjbS}iTni;=^axH(oooiz-|7}_Go9bc0%0~W?^9Wy9;
zEoc_%KS-}VoQAoN)VX7|HAC&X@xEUBNg5_yfc)Zu;}on5z7BS@{>k-*;7gs6AMdP&<%ruYHZy
zb?qj9P5~B?g)oq$F?;L2b)!6qccAV5gNsSxpwLRwTFqdwYKSw=3{g?gRGXe~DO
zdGhMCyFX!DZrDm}VOkBf6s7DgHtO6Xnwh#Rid0a>iRQlaNzsUpi$m9?l!ps3KT~}_
zl011IYfCpGP#l_>Qk?g>w)`o+jHq)P?|4SkdO`(l?nArWwJn$(6z-H7Pu_=Kx*sKM
zjMHPxaAtYHoorIm@RX_{@yJ<
zM{JlJgLT12C;Q9smR%I|i4
zdmCbEiZF&(w?Tf}WT)_iu7LdRGNC$iCxy~a^%x)Mc}FR~M<~DZrTmgPaUquSOSYP#
z+vF?M^FGv;7f8{iPB-3!sc-s+7#|_OXLKpQ09(jGfIJ6%4@K?CqWdA*cR;(l7LrzU
zLrtvl*+nT$Zezbb;wb&61KP6JkdFR0G#gFaT{L1>ap{1rx
z{L9|YyOzSplTz@c4CidcfC`Ao3?ZfIT~oWa9&@3{sL5yqE$VCY>{60LA-t5v;*3$
z-SDrKYu?6k?Soo=N7zreY)1DYg_f4T3vf>
ztG-j{fqg0Q!jnV2w*YyIerUJ%VoZs*%!mIxHfoz3^mc2}cYdqy`~nlO3bmcTvutufNO=Q+*Z)E(zcXU48Pt&7a&}(Fl$V-13cgH#o4fy>Sjt-bZ(Qh9B?w
z9^<3LJYWIZj5)zt2T(za3)Yj3s=>*PL{_%7oi_~m^Xpy$E?#S72e$5V=)^n{M%+6w
zDtJPe6^mTeHDgUM{``Phet*aE7&8GRGWfXV!Cfem1H?UW#HB5L6(N6qmV`M|MbXXy
z2c#~+^Ky2XYxq;n?r|%B=CLa*VOOZd|4#gWj{igD+TKn0{{sJ;p@EuWvaAQ9u1c(e
zKrcRqUW;YCBd$65AZs`LYxuvMJ>we3mLI(zqj!9@<-NV^67P2`-`3{cOa=giHjGK|CV?^&NJ$RKZQe|e~!r}7y
z()>AW*8&S=s3mp2v%DyX4mWjRTX}F?d0}3?R`t3}Yry)}2XnrPT%>ZQ&3Ba-1WQw5
z*^ippy?xMpnf2R9CbE_X=ckmzNU5qwfU-04Bk+d%nLdBGS>2Dpak8>03E94mysxr#
zpMN1yO3_DbDhOU}`8UeQ?Cq5`OM5@)&HXp)>YV`O{m8uvh;9BU#j0todT<>453TAm
znWE5*Ms85~wD}WamAO$_3k%8o?X`Uu$!A_v2ack?#}eS|j0{(B?DKOD6hQM3*!K|A
zfsoAYkjDLbC3pbmzUumfVjo7nq9_DfhRrXFRnOvumSzd13jpo-d=hyPg^}gzTff6k7Jla$OYZ
z)n0^y%+dJ#)9YF|HvYVc;@$@BF0pD?4+%z*K+!ozF=ol>_`SMlTFy1NZt)
z2Ywv67Q_FG4_Ydzmt?&{5TdaY&?TOSQ3I0NS=7~t)M)B1G9xM79C4maOb>jGS;txM
zi7+c6*^4P0@RlBh3#%GVJ!$bwc>V>+gDV18pZNouv)Xa##C+DDG_xYbhw!tx0U
z3CDu}+^+vEd>VJ+lY_^=-~FG!@4&ynCNQI?Se694E566#Bz;G8fD!~VvBYRJVgK8-
z-+)V9k@?9FlE|q}iUUpu!3kE`9mOS1K~=goMn
zV#Z1HR_SS#4vsAA_hzkLwf&B?FZCR(mDKBpKGBU=WJ*pGmJ@S!>Fb6+bNP)=+~Tw7
zIgR?dH?F&9!%g2^YSFcqFyj*wkag)K`prKi5q)iYK|txcV1i`5^nPNK<@`is2*f$L
z$w_aj{p&lmf4^#fxgtOXp8x+TU?T-?!U}aeRrLRm0x!OoOaaT!Y5%-@@E+4MN&73S
zV(b4LDxoHzt7_AAY{D`cMT3lMpJb0sqlt5qs*gTt&JQ0C{vs&T7<`Ddg#Q~E*9H8y
z-%V^@48FGPABun3Y=gPKC}@}b$4*J_?RxN1Sjr2rac+sWX3jv@!Fq>xG!|}biIRzB
zF-!>^5MN1|PLQ=tWJi|VhoA?$F0GzpViWk|9Up%XC_DT
zncA9?{+xe1xXGqfpAPmSVqoBtVSacq%bt|Xd(7#_(|@@C{HgxKC-{0(5mn^uh)e~r
z`2IyCYt`c^9)Sv%#Ww(p#qgiR^`?Zw{@pwqGA|>u&2FV4{f9HXXN3KS2VuH~^#w~@
z5Wie*{jC~CfEbLqGj^m5O8~!YX4}~WLY4CGKip^jc>m!H@5u;h)vpkesx4LSAdF=;
zBfn{7Z;VA^e%pUoizD6CRf!?o>=`eiV`#!gWH_CH!?t+Afk}9&s<7HD=QkI9mx!~8
z#xqHgV%-09mWqvk$b|%8f7~hv#=+Ta7CX(XyGLPt@c`GZ8WYjN)=ND!7fOx_hKqDy
zRxT&|bL7y~=D&k$~__;V;mfl40n}%a4
z@N+xDhoEC13tnsk{C*OAFLU&pMQwua+^L4kl52>apZHJV$IfSTf`8zxq!uK?*OrCZ
z!IJk6W8ZupbYdn4_zSf)v(>160@gbqt!#lDvBPzGaHLWyZSTip<$glhOqr=pyk80h
zGnAFI56KNRx!7MX#yoLw^UqUlU+AdFz?=($c0H%sP{fks}^98#OWk<(q#Dl{Jr;)
z7T7R~HAm_ehgiq~1Nz@Vzdwun&CrNA0F+O#TJ%8v!e342oZmg93Ow~}Jh66q0uD3C
zUz~wJxKs}f*u)$d>o5w!>t}_O;}R@_PsOlU%JtH#F)_rW71(FR5OQK`bk9a>@`hj{
zm#ydXMv}Q2dWl-%RW?Y@USg}lEX`_csK$YtlI1t5ow1hm~Ss!p&6Cuat)8XBDA2rhJbf)nJDK89TQ0Y-mdfnif(!Tr9#0@w@{
z_Z|ZY>_pQIaGQ_=n{(^Lvkg{DbeY0}^=r$Pla|T)DUjcC893pcED3HWFC54PJ0W8Q
zAFQ5uWRfHfk{7Qa@ALJY$Q$=QVgwWuJEPj3DP|H#`%kO{vZN+N6J|oh(?Q%N{l+It
zA?c?FCxcYI6{*CDUDc;#P&^8RqiYj+k{AZ$GI9nIhaa>TvXKAnrJ#&?exr)h*#7)c
zcR}v8>i&2ErJSUcKmSxldV71oBJd6~r`*I&%2kkPIPx$R;Hqo1ss~BYJp24^u#vDe
z3|VKAm{Qs#rG+=8gM=YZCeU$4s!>+*C|mxT-Gu%Zfg%fpO2U&J02`(W5XL0RG8LQu
zWFG61*d)n%43ofOr}ISLU|9sbnoSK`Ay#fmwM4Dr0X!&zr4Yfg
z1ba>LZ(0Z0Q~ZOXxXPiV3vwUq8<%`Vk!!ocgLOKTu*;z_Tqo9}RndnNd72nbuGyb|
z%bnz7)!#rn)Bgs09+H%lqyrJ%!HH6*U~8a18~kqb%l)Cj6)wE!az~3rR6VZ5)=}^0
zmPB+v%v4H&lomDg7EW&zV!mYW#~p|c`q{x3Y@tF^>ML2=(q^yed#1R~p33nB
zTVqbaIj!GK#mO;jSnQz(Ptb#ITNGQTa(1vwX2P}`zLrQ5D;wBrH#MjVWB()%oaWWu
zq3glXa0*`M&P}(0#TR-0GVgJYM%ZGIcVx~$qzXdHdwd@w>u5h7nY;1W;KK=`l-w}$
z4ef*Wn?()9A9Oo#K??jXMSspez&E;z{WDv9Bj0=z$YYQ3J?po5&(!nu60b9`wi!rS
zd?0`X0Iz012E-+L7F+H>%d=q096!{T=H3u2D$Y5ehcL5{j<)Wa`(=AE*@v-U2^O$2
zu=9LAfHD-I?7>pe!ZBjMg^EMJ&8_VqLhazp^J|rakxYrWj*RJXkz6f9>GsP673r~0a{6<0g`@fNss!)vm8bTVrnmjKkzVJJ&a;4O^)(}M;DvPGw|F2LCAlC^dU0Sp=}Q6|73B=yalts+mNJ{4)$
z97Ts5Nh7&`FUuY3oy~|cJ#W(zR1$;Ujy~+O&3@uvLHsLVjB~kt?qq$$HY`)?+N8sr
z7dp7fbl1@Vi
z%x!!hc8Ail^;$6)=A(r00Pzj>-$W`7$F^O)_FHS^7i|Egr@Zg36=?;5eQA0nHr))f
zL?IYFY!4E1oBP8+$~@S<*qNQPH#$w~f)e>#Dt|GxH{fE{pr&{@i-S&5MwyvOnS@0l
zy9;!J^R+H?g2}N!9roGv*JS?%;k7^=s-`$+VUyyCI1xR6T9NjLO>=)m=q_nvLo}T<
zbsg?t`XJGOSvGALD9EjoS~a~Rh@%tx>t!n_lDW#-H_uNwv*k8Qd5F0n(2_PcqoA!u
z)*s=aY&~zkx0l{l4{AhyjrT&M4s%A>=V>&H4d0LpuviKxeb~Qo*n|usaf(b;8R3rG
z1jz_lOIl*eXWf^n794}aSojXcT947FUN+$+toG-h(@{5GWrzI;`(vR4wxmrQLIVlh
zA$7c%xe*pcz3OBg^p`w%(oHws#;LPz;V`>d3YtN6mU2K(L8G9>c)GNd{P_D|vLULKBv
zLd~FyA`3N*)Cow&SO@y!P(G@UhS>m9`-Q9{55=gn@{8lz2e8jFwPid`ik4PTlR(J$
z15HBvf`aa)O1ZwXN*OEXn@{k;sj71N(Lzivp9Dy9PIy1w0mNm_31cz@LXBNO(Mj#9
zM$V6#GtIL>`wFRTjuQ&hV}toFkFnKb?DPaDg1+uN+dMak2RZh#mw2dS;Z2f`CEO@o
zhMm@8fD|9*0{uWbsbrCXi_SAiz+5WaGVF2j#;``G=NMr$OZ#q`q>rMnIo>fdm|rUKR@1a&^}O%h=q}o%
zx1qN55pNUml--oSL-YL!_<5Zh)C=0&J;L^-n!6c@nLeZrYvW#+<7iuoClQ!tE!|dke|I2rasSI
zm)Ik6x*=3y7rpnuMyaH1vctjr+OT&l&Num0L>4LFkf3C5m7FQC
zN3qF`!O#M`c!cZiMq~8cwPk=C!{k&GlL~tv{~1{tYNNu=dD2!ufjGmowtJg!Tc2H@QTWqtlAH1VXIeg!bP#_yF*!NE#MoxCaIPoKz$
zE3CNS;dCG*9zjHy%~gySBh~`nIJ+a~L%
z4_0JOvQ*;tC(u298nCLi`pyef47E_t!HB8e;p+)&3~MM4Y=SP$v*TH{!`oX;-l&0Y
zg*hAr=HGr<-vhDUZuAirt}xgznnvG2VfVl(R$V+&N*q
zqx8#4zJwOp#7G&tCptWkKUPBP4x6GPH+lj_UE!0tDqLa~0{(@gE#BdtAk3xOoSFj3
z)aD}Xl@%4}XSfZgrXbLqf_n;#T9pO>MYIFPp?^Z~QD{ee{Sb`Os%J}!5p&y9(7n^}
zqOEyAS_?Pzdiv90V>+4Mu;rmlOwYD3SaxuKvc08LL7GvX94@X?Gh%Hn&kw5}ogX!joWeKkrTz6=JO?-hxdep}8cQ4oLjgK&DL?;IF|Gk*a>I>AQ90HCmVV&g(%~Y_yQz&jm
z>i|j@D-|elzl6gUxmr--FLTwP
zoVS$p)T-~pZy^6>i4M+g$XJx(^%)qNO5rx00u1VxN@HJJqmK#XyW*MSypWl3bCDQ;
z%qu+3^Uw*iAhLH1Q<4Vr&1l*nyY0?f(Musux!k#SULb$}B2WVN7m-aR?KR^#lxRd#
zMIFReX61RXzaT?=62r8@gI8iSDR5}7PRYa?>K;AqN(`-cNf{Q);B-)2iKrf&gVj_R
zzIf!#v2i!^ge+F5x248<&gEBkg0CC~Psj>T;H8`a^uP+?>haE4MLhUB^L2Dci{KXX
zPADp=4=jM%JppW*8idXo#N5~aLk=Pz&Xyz12fc9~b;r9h>itKNX9)8YAWsazzfA+a
zA?u%2{y#GRlgJ-#A9g@})7*IO6-Zos{2>jMxe;lC+tEI9sF0jLv>?mkb&AbzcQt6K@&ynq(-pw%?v*KGemC}^*jU_7
z^L87L&CL?$fjBH`>tN{73eJjb@5&I6^q&mcWt09ec=!X;QCFHNI1NmN$%M%a@d~JH
zx`vpoF&Bh%@#sHUDT@VgQ%VQqaKF<_op6fYnasa=CC9G+GSoj6^~12{e9CrlRtGG=
zQ{X519}f$0Vi!nMOC*&1e8B-OX$>dIe)%ht(FI+)X+>l~@Eg_myy0?E#p86bmub~E
zAZtUxP>7gZ{*qcYIoIQtPsY+Llox7NQ~Kf=yiro`vih456SAmDa!si
zS7uoNg+B-D`_%`%g|L4lloR!aiIO6^aa+6nGZ}~eK$jMe(SSqGVjBQrKo?8-3@x;Y
zbqGXHgZ`H=X!R_}jSk2;sOq04vn_CmOA(Nk&q?r0VD?CwHWzBIEUN%TUD^ZnfrBYg
z&7?I-`_Tpq&r((w0OQCKbdN+n-MCv(vCi8i$syRCNj|tLEs%eO1P+qlFG>CzNzV-oi*o=!aycV{Q*`Pl
zDKgU)#nBb80t|rx!TU)VAoxWl!LP)|Y17~=!cHU-9DDFd@GFTk2>v}c5Rl+HBBG8!
z{ySbaQW9Lp$=SW)9hqZ6iKs__v@Q>OvFT`VP7UcCAf2@b>H-H+qPCp9YJH$;uU1_`
z^1cD`s?j7%{N`8Cj|21uKS|8L4RQzzrzlgw4mZ#{C>&PptMOvv#EMnOMZIK?Hd5Ir
zUnvG}AmCwivfn62vk~1eI;FoYN3$PqkWt+j_5I&t1D5FaJeo>HiT#V%RMxJJI)$JW
z9Mp_(CGn%2(3!*qNMu6ebv$p@5kObvvrrzc@y~*ga6f2>2hfgjKPbH{E?-q`#crA%
zxYLOf-RQN!68O|R=wo3{7?$@zMuC`
zB!YQOByRS?0GS*I=WP|Uzg;>oeny11(+<^7r&izAqZ(&(bUP`6B
zHy!=4QRq`he+7@;8{3g<@f9d>(1qk
zDjh>gQ}r_(4+D7^0W8|GhuFB_mD$OLaLhkMemH?pq8JVe(33u-^@?k{X1v2vF}9e=
z;@jOYWwfh>k=(3C6eF-l6{
zJTZ-b(QN4sVplg*rs*sn0Z_~=V6Kz0QLNw=8@S*AbJF|atwwHPljsK7B#a@L1+_^y
zAK?NB7RpqGxEvylAXw5f&6!s$i{UZ^S8?!KS8?@cUU-;~N^qLTD1)a84eK^0xS~E!
zs01Sp{bs<#eIa5q&~k?=Y-0Qt=|+oDcuGIDIXWqjKUG3W@KYz`N{^|{9GEYtbzQEH+M28B|0Zi;=|#?l7x@4n
zk!Q0xh*nTbDKAp$W_Xdal^6LUvK^y0fqLujius18VR#L<+xlojrg-HKL@(xjNWYK!
z^SW^Q5(dei_Wz2h659R0C%f|hg6LBneTc>M|FDsa%EzS!y0gF&t?JKcBS$o4KQ1~z
zV~SbeB$bl9C6T+B1H^*PD#5OtS6!KI?WHC?4KfUMaJsbYFfZ?*SAq*qu*&t|Ho}x8
zVD*{skRf<6%)DmMTFjL>&ytUH`Ll?$Ry?-qj
zgb9Kb?A|#$mYo3Yj*Eru7n{P{E-&pOD*7f>9eqX#VO;*;{mep(0N;U2E+7V3Ns
zGc2byU)ZMk^KV5E`_=MSbxXB)`$_!sn;7nns5F@JvTH|e`TOvOd0>D30$gjmnijg3w}_#qWcG)GMMsFVCK7g%0F
z@h;)P1rA(#Fjj6;P7O5GljSqaxkb)d+c00fsR%0rF9q_0NU>;D0TjYW8dzUC451}B
zZoR&Yq4`))SU;1Yd0$aq0GiQ
zq{E&l`44uMd?laB{sV#LQv9-`L&e9K^61bIrUE=xsIk-FO5i4&f$KL%!vAe>Rke8`
z+SamlXl-aTI?%intltS(bGI+h^ZC>QOVK`^-wFujw>*M;#%SD){qi8}h2i*r=tC?-
z>YC?!53W0N*M6L)F664697@MUHFe%hz4i-epzlSM+^kJ}LIav+%m8(*k+rNg9evn^
zb#Ln)yq1Tf-Ssx>2MFfWEKemJRX&N|CoRDkDArxk7r<>7yeP04KQ9%
zvK2C)SUQp;9mJsw=~5iZC=R$mtc+BJZ9WsX4?V($@{YV>%yZ)&J!rc7+{>5m1=ycHDIJI3mjt%}S%
z=YR~20DE?Ccjb>VcDb7(8=8VIC48kVyB=CHH@HQ-!)w4<*R}8FG{cQpJnY31b2&0Gy<}L^PQz7!c-$Z1liO5V7k*RVg
zLL7^dL@Z_|Ve!}6BrIgTvf(C&D>swz=zvWgtb`O{@WOLF$tu>q0Zol==(i*48_w
zWBqnfA(Eg(Xb&!tC%EiUIp>VoKPKhX!uF2KJ&GAUU}WJ^K68F;d|$R3<&BKyYi3x)
z^YXorDkRofWNXC8ctdmuPOQTKYbXp(m_Tc1GpCD(2t3AqH9w>0-CM)Ds?`cQrw#LZ
z&b?L7n{1nNgOnYc{Dqr?1|uir(<--{15_sWE4c{N!4R}A@-PI&m+n;bo%V1iEfq5n
z*@F0@cj3cm_DO`F7<+E#*jUTdQ}L$=Y(`7V62_;q={k6W|Tr_=_wC}e2PA;#ku+19f>*ufNIZ~^tVUNz+9_=pY
zw{TNVHDhF+v0C+NgpqHwR`oDK;mA|W%}S~tWhfcEi-3G~g3lS5Yu>bin7)h|Ic98m
zSgV@CVyxvV1Q_DGC6Q0L#vX5ao`9}X>wO|QcbMoR9VZ|QNDpdwRi4l
zB|lo#_iQ_wlg3OZGt;P%<9vOYX>2a)hf5z%*Q(#c8}p1EGe*jXR$Ye}W*#+GZ4`)b
zv5jL~7U>MR&6qMc*YZXNV#VF7p`EL1mS9HQgCy)_emzEO>_PJltXu#>WRLXq@-OH;
z8he8C_7koBzN?rpGJCXd3KDX?1yT2L0F2JglK{rz7)%VnAOgtE$@AF(V5I7?u@S$K
zLoQZ7j@a&S>+9zDZt>o5^Y!Oq?mQp_;^QP8f&n;5x<
ziYP8|nE!}D(ClWafBlv$N!EYC@G3?^&*N-K
zd?L5r|1x3+`|}TcHyws0&JjT)tmSUx4Uj3!U;l$GL7eo4)tw8wt!Wl_@N%&8z8d5S
zhq<3}PBx=t@Gp#IA-jTM$h(V^mERbk%`CRa#Rt!;7Bb%Wrs-|YQdP=6F1!7QR9WI
zzZ*9m`}^<1RNP`1rZP3DIF{mY7z$;?KFvp1c#A`Y$*KiWtX>T+}Qpo-G*%D{K-Mg&@ldvaxxDNb@f)LN0&)_OGX-CEjzT
zoJ01TknT1f+K0#56YwL29laW-wvUQ2TU5VsseVIn;)&Fs(Ql+Ba_cs$!IUo5HAC6M;d||e70Ga@QtR;$q0xi#$%+)@5yGM
zELfO@C8D=>#X5L8psV$gmK2&W?DP`vt>^JIKJ-KAY{GXhg@gS!n9L8#_q^GVZOGv)
zr=7jn?hf9)LZS}G%MCI1IBkLaQ?8rI9tX0g34AO+c&Oy_JLMuTh0z})WT7#)=O)QzBDnVS9jB6*L
zc;t_2?!`2vSgSY<_$zw;jPt+qCMMIDXYc%Z7TmuDo#qg&xB*-@uucqpVG~hw;|^YD
zoN5|~7=6(kITHI1*TXyLC!h%xFksd=2w!l_&3th6`$N(N!q|_sm694IQiZ`!8^A@F
zgg!0LxZ;kxg*I+=%R6%WRk(G!cV>aVHQ#H+!e+FXq5+L9&zQmy=lo~3yn6w+R@aCp
zUgFFPbAYPSZ!YCD6tpGtLKw3P%qyXzX#iJ*wIOJ|1-SI@=#r)Ku2D?E;jLkgQy=k>
z9=ZlSb+>+Kue^VK_%2UMjoh^m*Fo49`e*7u?8CVPx`-n)*1z_yO`1s+H{ES=PRn^?`>pncO4h#6^?k+$T
z@?9R}SS`PHuukSM-r+QiT80$wUa3qth?qR@1ADxl#UPTiNgAD$^-DnJ98>CxxPFf3
zkKirJbmWZOCv(K8TwufcDai=D!%P97ne9w)gE5WbQAuZ>Fv)w9Ujo8Pt;((Zvz0H%
z(+9(VE2^2z4gp&!|Nf_PEw4KOQ>>qsZi$}MA$jS&NS2?MTZv>nXo^wgW=a=^+b-F*
z_b=qQWLu%<7;HmJB*(C9Y%=T7uN4OpnPrn?Xy<@rnj|dPVRCK+)@8}_M9y(s#m)%_
zzGnzcyIOG$d72U5&a4>w)cQ(k=k~2r62^~iKw)5Y&g$%yi%CoRC~h1oF!mDIN!Q@>
z9pXq=^a0mxqVi6X1EI(j?e=!ZF8ovdTaJ&szayLd1I{;p06tgl#Khu2?1ra*W&)XS
zr4%wtAZf3b_`xu7kyr%MM@&7O^jCSMG*e|(5RVM>4AnD=kT@xQ>4o^wEqE&AHOn|;}hqk@M%#mAr0JR#?O?(Ls>
zMtrIVj`pAPayar0!62*!-bW}AxZ8M7AF&^Y?67eK)83xY9bbElBW`@n*fad7C$v#v
z08U=Wad9?Hb!=PM=yU*45c0{@l8~4sCU2(>rkZCqH~}*~Sd(Hl#Yzu)RW1v`g)X}|
zl%7Q+&)AL1NPjt~CCFV&I+CPR3I+|!GL9IKUtnvXW+2gKMuA_GPWd;
zQP!=<2or=9%mOhaIYGv0e@!G~#vpXs7zLRv)){2UBr^5~8FADP+g)&~vPoP9_bjRZ
z{wH*dT#dQ=IN?_OF@cJU@S@HXirF$Ap~esDpOR
zbgfwI93*xuC4wAnASQOXy@B`Z4vMrMZ-+y|{=M^{#E-RqFK)oacCBGQ-@8zpLET>2
zdh^u5f7O;>0mV?+dROXc3$*1_d}{u+vh~Q4C(qTE2hfnp)-B!I`r*J_C}Ydq9JPMH
z?+I5207+YuwxZD4PxRW7iZDY@G;khd5#A$J$Y4UMzMT3xl##ZW5HNF#@)scrw}_?f
z=O@o{MdRjFz9K01@1^2?00OyC0=Z_wFUm2$9?F>TN)GiG%cmg)^^>Zz#hoZkI?h)1
z=b~*We-LqzHYjJafz{g)28^Tga})+x{NXig7vVNEppc1RFN8eK{$f0e;uT-vJfK}w
zgAf>o&{nZ@YbyP#l?45i1l_js!iVPHUfFtXC}){(48ULWvI+iLR;RX3=prJodBVD}
zwEy-3jJTXYu89NDs_~^W;`i%6ngE8k11J^GngB{cKe3YSJCWsw$?`jYvFT+@4CCv$
z3*+?p6s!g2X|i!c#Y~i!O&ZE3i7V>?;a$W<{wYO3ibM5F2m{Jv^GpnWk9RQTB3$t_y1kWLKbJ^!?R67@^Wz9)6M^Shm^otoLpH72&oZHmbN+1B
zKO66g;j=|cttpY>TXYF=10l>oI{9DOy87z2ecE!4W|ggd=dXRwHy&`Ve=)Itol4*e
zT8a3R3C-Mpxso7HBuHMGX@aZ%9^e4x!{<$OKIVJyB3QDR{?UV&T!w2c}k*XH}p5-}!LB
zE@S%(vb?WUdsTH+CI2-s;%uiJdQd!CTG@K|w#yF5QY-(UO5xHBS*lDtXO<|FJ;%yR2v;4Rxm@zy5P-m=Em>&WZZsP>;E|3P4QmGx9Zl{J_qV3`rp2m2AClOYh=bS!N$gDQzl6*JQgllU`}Y}v^b+wFG(D2G
z$CEZtzQ+>&r-^jY-Y`M0Oa^_I0v(Q*Ula#@n*u#AmZb2XM)>aoNF)IG{?=~V^1n-V
zSbdo4Fy}q4Gb=kcsWK^lLsW&sVo*iTScMAy5vXP~$P!Qgiei2}0Lk=7Mq;ZJw{iXf
zO9%<{dR4J>!{!*ho?!&(rN$q?UlmUy|AjRU|3!?A{?_gZTv3(iVtR5Vm#RuGj{_<&
zE78R`C|%TXK|JYn*6{?&ha<&+AEOgwiqh&5-I75cQj|YZ7sLMxMgV^o<|nCML)Lxq
zv~5TeMF61a^Ns8XkO;^~uF{}w<}_1`Q