From 79ea983ca379d2550ea2d6ab37f1255a75b8652d Mon Sep 17 00:00:00 2001 From: openclaw Date: Fri, 13 Mar 2026 17:10:49 +0800 Subject: [PATCH] initial import: etf strategy project --- .gitignore | 17 + OPENCLAW.md | 17 + README.md | 42 ++ configs/etf_universe.json | 408 +++++++++++ configs/etf_universe_industry_extended.json | 498 +++++++++++++ configs/etf_universe_industry_only.json | 318 ++++++++ configs/etf_universe_industry_profiled.json | 318 ++++++++ configs/etf_universe_proxy.json | 73 ++ configs/tushare.env.example | 3 + data/etf_trend_equity_2020_2025_daily.parquet | Bin 0 -> 5513 bytes .../etf_trend_equity_2020_2025_ma5x20.parquet | Bin 0 -> 19194 bytes ...0_2025_v10_full_universe_proxybest.parquet | Bin 0 -> 23202 bytes ...v10_full_universe_proxybest_trades.parquet | Bin 0 -> 30710 bytes ...10_full_universe_proxybest_weights.parquet | Bin 0 -> 66508 bytes ...quity_2020_2025_v11_industry_event.parquet | Bin 0 -> 14956 bytes ...020_2025_v11_industry_event_trades.parquet | Bin 0 -> 11973 bytes ...20_2025_v11_industry_event_weights.parquet | Bin 0 -> 44398 bytes ...ty_2020_2025_v12_industry_event_v2.parquet | Bin 0 -> 14700 bytes ..._2025_v12_industry_event_v2_trades.parquet | Bin 0 -> 9400 bytes ...2025_v12_industry_event_v2_weights.parquet | Bin 0 -> 44022 bytes ...0_2025_v13_industry_event_defaults.parquet | Bin 0 -> 13507 bytes ...v13_industry_event_defaults_trades.parquet | Bin 0 -> 8157 bytes ...13_industry_event_defaults_weights.parquet | Bin 0 -> 43752 bytes ...equity_2020_2025_v14_profiled_best.parquet | Bin 0 -> 14134 bytes ...2020_2025_v14_profiled_best_trades.parquet | Bin 0 -> 8475 bytes ...020_2025_v14_profiled_best_weights.parquet | Bin 0 -> 43823 bytes ..._equity_2020_2025_v15_best_confirm.parquet | Bin 0 -> 13954 bytes ...equity_2020_2025_v15_best_confirm2.parquet | Bin 0 -> 15504 bytes ...2020_2025_v15_best_confirm2_trades.parquet | Bin 0 -> 8630 bytes ...020_2025_v15_best_confirm2_weights.parquet | Bin 0 -> 43833 bytes ..._2020_2025_v15_best_confirm_trades.parquet | Bin 0 -> 7586 bytes ...2020_2025_v15_best_confirm_weights.parquet | Bin 0 -> 43649 bytes data/etf_trend_equity_2020_2025_v2.parquet | Bin 0 -> 19126 bytes ...f_trend_equity_2020_2025_v2_trades.parquet | Bin 0 -> 8750 bytes ..._trend_equity_2020_2025_v2_weights.parquet | Bin 0 -> 18473 bytes ...quity_2020_2025_v3_universe_expand.parquet | Bin 0 -> 23210 bytes ...020_2025_v3_universe_expand_trades.parquet | Bin 0 -> 46161 bytes ...20_2025_v3_universe_expand_weights.parquet | Bin 0 -> 45783 bytes ...tf_trend_equity_2020_2025_v4_vol25.parquet | Bin 0 -> 23202 bytes ...d_equity_2020_2025_v4_vol25_trades.parquet | Bin 0 -> 45777 bytes ..._equity_2020_2025_v4_vol25_weights.parquet | Bin 0 -> 45382 bytes ...d_equity_2020_2025_v5_concentrated.parquet | Bin 0 -> 23194 bytes ...y_2020_2025_v5_concentrated_trades.parquet | Bin 0 -> 38256 bytes ..._2020_2025_v5_concentrated_weights.parquet | Bin 0 -> 41278 bytes ...ity_2020_2025_v6_more_concentrated.parquet | Bin 0 -> 23194 bytes ...0_2025_v6_more_concentrated_trades.parquet | Bin 0 -> 37645 bytes ..._2025_v6_more_concentrated_weights.parquet | Bin 0 -> 40962 bytes ...020_2025_v7_swing_trailing_anomaly.parquet | Bin 0 -> 23170 bytes ...5_v7_swing_trailing_anomaly_trades.parquet | Bin 0 -> 21218 bytes ..._v7_swing_trailing_anomaly_weights.parquet | Bin 0 -> 33729 bytes ...ty_2020_2025_v8_big_universe_macro.parquet | Bin 0 -> 23186 bytes ..._2025_v8_big_universe_macro_trades.parquet | Bin 0 -> 25960 bytes ...2025_v8_big_universe_macro_weights.parquet | Bin 0 -> 64354 bytes ...uity_2020_2025_v9_gridbest_nomacro.parquet | Bin 0 -> 23202 bytes ...20_2025_v9_gridbest_nomacro_trades.parquet | Bin 0 -> 52142 bytes ...0_2025_v9_gridbest_nomacro_weights.parquet | Bin 0 -> 76041 bytes data/etf_trend_equity_2024.parquet | Bin 0 -> 5513 bytes data/etf_trend_equity_2024_daily.parquet | Bin 0 -> 5513 bytes data/experiment_ledger.parquet | Bin 0 -> 102134 bytes data/experiments.sqlite | Bin 0 -> 77824 bytes data/experiments.sqlite-shm | Bin 0 -> 32768 bytes data/experiments.sqlite-wal | Bin 0 -> 1091832 bytes data/grid_search_results_v2.parquet | Bin 0 -> 30588 bytes data/grid_stage_a.parquet | Bin 0 -> 46171 bytes data/opt_grid_20260306T085113Z.log | 17 + data/opt_state.json | 678 ++++++++++++++++++ data/tune_results_2020_2025.parquet | Bin 0 -> 7742 bytes data/tune_results_fast_2020_2025.parquet | Bin 0 -> 9818 bytes data/universe_profile_extended.parquet | Bin 0 -> 9125 bytes docs/ETF_TREND_SYSTEM.md | 63 ++ docs/FACTOR_PIPELINE.md | 18 + docs/TUSHARE.md | 28 + docs/dev-flow-checklist.md | 69 ++ pyproject.toml | 15 + requirements.txt | 25 + scripts/analyze_drawdown.py | 45 ++ scripts/auto_tune_etf_trend.py | 164 +++++ scripts/auto_tune_etf_trend_fast.py | 229 ++++++ scripts/auto_tune_etf_trend_small.py | 95 +++ scripts/expand_etf_universe.py | 148 ++++ scripts/filter_universe_by_profile.py | 128 ++++ scripts/grid_search_opt.py | 159 ++++ scripts/grid_search_stage_a.py | 130 ++++ scripts/iterate_best_local.py | 472 ++++++++++++ scripts/iterate_optimize.py | 499 +++++++++++++ scripts/report_last_run.py | 93 +++ scripts/run_etf_trend_backtest.py | 158 ++++ scripts/run_iter20_loop.sh | 0 scripts/run_macro20.sh | 0 scripts/smoke.py | 26 + scripts/tushare_download_daily.py | 35 + scripts/tushare_download_universe.py | 47 ++ scripts/verify_topn.py | 150 ++++ src/qfr.egg-info/PKG-INFO | 5 + src/qfr.egg-info/SOURCES.txt | 12 + src/qfr.egg-info/dependency_links.txt | 1 + src/qfr.egg-info/top_level.txt | 1 + src/qfr/__init__.py | 0 src/qfr/data/__init__.py | 1 + src/qfr/data/tushare_client.py | 76 ++ src/qfr/factors.py | 42 ++ src/qfr/metrics.py | 24 + src/qfr/strategy/etf_trend.py | 584 +++++++++++++++ web/db.sqlite3 | 0 web/django.log | 23 + web/django.pid | 1 + web/lab/__init__.py | 0 web/lab/admin.py | 3 + web/lab/apps.py | 6 + web/lab/migrations/__init__.py | 0 web/lab/models.py | 3 + web/lab/templates/lab/best_artifacts.html | 43 ++ web/lab/templates/lab/index.html | 15 + web/lab/templates/lab/top_trials.html | 42 ++ web/lab/tests.py | 3 + web/lab/urls.py | 11 + web/lab/views.py | 113 +++ web/manage.py | 22 + web/qfrweb/__init__.py | 0 web/qfrweb/asgi.py | 16 + web/qfrweb/settings.py | 127 ++++ web/qfrweb/urls.py | 23 + web/qfrweb/wsgi.py | 16 + 123 files changed, 6398 insertions(+) create mode 100644 .gitignore create mode 100644 OPENCLAW.md create mode 100644 README.md create mode 100644 configs/etf_universe.json create mode 100644 configs/etf_universe_industry_extended.json create mode 100644 configs/etf_universe_industry_only.json create mode 100644 configs/etf_universe_industry_profiled.json create mode 100644 configs/etf_universe_proxy.json create mode 100644 configs/tushare.env.example create mode 100644 data/etf_trend_equity_2020_2025_daily.parquet create mode 100644 data/etf_trend_equity_2020_2025_ma5x20.parquet create mode 100644 data/etf_trend_equity_2020_2025_v10_full_universe_proxybest.parquet create mode 100644 data/etf_trend_equity_2020_2025_v10_full_universe_proxybest_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v10_full_universe_proxybest_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v11_industry_event.parquet create mode 100644 data/etf_trend_equity_2020_2025_v11_industry_event_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v11_industry_event_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v12_industry_event_v2.parquet create mode 100644 data/etf_trend_equity_2020_2025_v12_industry_event_v2_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v12_industry_event_v2_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v13_industry_event_defaults.parquet create mode 100644 data/etf_trend_equity_2020_2025_v13_industry_event_defaults_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v13_industry_event_defaults_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v14_profiled_best.parquet create mode 100644 data/etf_trend_equity_2020_2025_v14_profiled_best_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v14_profiled_best_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v15_best_confirm.parquet create mode 100644 data/etf_trend_equity_2020_2025_v15_best_confirm2.parquet create mode 100644 data/etf_trend_equity_2020_2025_v15_best_confirm2_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v15_best_confirm2_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v15_best_confirm_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v15_best_confirm_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v2.parquet create mode 100644 data/etf_trend_equity_2020_2025_v2_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v2_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v3_universe_expand.parquet create mode 100644 data/etf_trend_equity_2020_2025_v3_universe_expand_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v3_universe_expand_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v4_vol25.parquet create mode 100644 data/etf_trend_equity_2020_2025_v4_vol25_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v4_vol25_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v5_concentrated.parquet create mode 100644 data/etf_trend_equity_2020_2025_v5_concentrated_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v5_concentrated_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v6_more_concentrated.parquet create mode 100644 data/etf_trend_equity_2020_2025_v6_more_concentrated_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v6_more_concentrated_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v7_swing_trailing_anomaly.parquet create mode 100644 data/etf_trend_equity_2020_2025_v7_swing_trailing_anomaly_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v7_swing_trailing_anomaly_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v8_big_universe_macro.parquet create mode 100644 data/etf_trend_equity_2020_2025_v8_big_universe_macro_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v8_big_universe_macro_weights.parquet create mode 100644 data/etf_trend_equity_2020_2025_v9_gridbest_nomacro.parquet create mode 100644 data/etf_trend_equity_2020_2025_v9_gridbest_nomacro_trades.parquet create mode 100644 data/etf_trend_equity_2020_2025_v9_gridbest_nomacro_weights.parquet create mode 100644 data/etf_trend_equity_2024.parquet create mode 100644 data/etf_trend_equity_2024_daily.parquet create mode 100644 data/experiment_ledger.parquet create mode 100644 data/experiments.sqlite create mode 100644 data/experiments.sqlite-shm create mode 100644 data/experiments.sqlite-wal create mode 100644 data/grid_search_results_v2.parquet create mode 100644 data/grid_stage_a.parquet create mode 100644 data/opt_grid_20260306T085113Z.log create mode 100644 data/opt_state.json create mode 100644 data/tune_results_2020_2025.parquet create mode 100644 data/tune_results_fast_2020_2025.parquet create mode 100644 data/universe_profile_extended.parquet create mode 100644 docs/ETF_TREND_SYSTEM.md create mode 100644 docs/FACTOR_PIPELINE.md create mode 100644 docs/TUSHARE.md create mode 100644 docs/dev-flow-checklist.md create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 scripts/analyze_drawdown.py create mode 100644 scripts/auto_tune_etf_trend.py create mode 100644 scripts/auto_tune_etf_trend_fast.py create mode 100644 scripts/auto_tune_etf_trend_small.py create mode 100644 scripts/expand_etf_universe.py create mode 100644 scripts/filter_universe_by_profile.py create mode 100644 scripts/grid_search_opt.py create mode 100644 scripts/grid_search_stage_a.py create mode 100644 scripts/iterate_best_local.py create mode 100644 scripts/iterate_optimize.py create mode 100644 scripts/report_last_run.py create mode 100644 scripts/run_etf_trend_backtest.py create mode 100755 scripts/run_iter20_loop.sh create mode 100644 scripts/run_macro20.sh create mode 100644 scripts/smoke.py create mode 100644 scripts/tushare_download_daily.py create mode 100644 scripts/tushare_download_universe.py create mode 100644 scripts/verify_topn.py create mode 100644 src/qfr.egg-info/PKG-INFO create mode 100644 src/qfr.egg-info/SOURCES.txt create mode 100644 src/qfr.egg-info/dependency_links.txt create mode 100644 src/qfr.egg-info/top_level.txt create mode 100644 src/qfr/__init__.py create mode 100644 src/qfr/data/__init__.py create mode 100644 src/qfr/data/tushare_client.py create mode 100644 src/qfr/factors.py create mode 100644 src/qfr/metrics.py create mode 100644 src/qfr/strategy/etf_trend.py create mode 100644 web/db.sqlite3 create mode 100644 web/django.log create mode 100644 web/django.pid create mode 100644 web/lab/__init__.py create mode 100644 web/lab/admin.py create mode 100644 web/lab/apps.py create mode 100644 web/lab/migrations/__init__.py create mode 100644 web/lab/models.py create mode 100644 web/lab/templates/lab/best_artifacts.html create mode 100644 web/lab/templates/lab/index.html create mode 100644 web/lab/templates/lab/top_trials.html create mode 100644 web/lab/tests.py create mode 100644 web/lab/urls.py create mode 100644 web/lab/views.py create mode 100755 web/manage.py create mode 100644 web/qfrweb/__init__.py create mode 100644 web/qfrweb/asgi.py create mode 100644 web/qfrweb/settings.py create mode 100644 web/qfrweb/urls.py create mode 100644 web/qfrweb/wsgi.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d4fe0e --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# Python +__pycache__/ +*.pyc +.venv/ + +# Jupyter +.ipynb_checkpoints/ + +# Data +/data/raw/ +/data/processed/ + +# Secrets +.env + +# OS +.DS_Store diff --git a/OPENCLAW.md b/OPENCLAW.md new file mode 100644 index 0000000..fe27ce7 --- /dev/null +++ b/OPENCLAW.md @@ -0,0 +1,17 @@ +# Operations Notes + +Project home: + +- `/home/openclaw/projects/quant-factor-research` + +This is a research workspace (not a service). If you later want to run scheduled jobs, +we can add: + +- a Docker image + cron +- a Jupyter server behind Caddy +- a factor computation API + +## 2026-03-07 用户迭代准则 + +- 基于已达标的基础策略(年化 25%+)做增量迭代;不要换主框架。 +- 单次微调因子不超过 4 个,确保可归因/可回滚。 diff --git a/README.md b/README.md new file mode 100644 index 0000000..6401476 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# Quant Factor Research (QFR) + +A lightweight, reproducible workspace for researching, backtesting, and evaluating quantitative equity factors. + +## Goals + +- Factor definition library (cross-sectional / time-series) +- Data ingestion + caching +- Standardized preprocessing (winsorize, z-score, neutralization) +- IC / rank IC / turnover / decay analysis +- Simple backtests (long-short / top-k) with transaction cost hooks + +## Quickstart + +1) Create env (pick one) + +- Conda: + - `conda create -n qfr python=3.11 -y` + - `conda activate qfr` + - `pip install -r requirements.txt` + +- venv: + - `python3 -m venv .venv && source .venv/bin/activate` + - `pip install -r requirements.txt` + - Note: some servers ship Python without ensurepip/venv support; you may need the OS package `python3-venv` (root required). + +2) Run a smoke test + +- `python -c "import qfr; print('ok')"` + +## Layout + +- `src/qfr/` core library +- `notebooks/` research notebooks +- `data/raw/` raw data (not committed) +- `data/processed/` derived data (not committed) +- `configs/` config templates +- `scripts/` CLI utilities + +## Notes + +- Keep secrets out of git. Use `.env` locally. diff --git a/configs/etf_universe.json b/configs/etf_universe.json new file mode 100644 index 0000000..84062e5 --- /dev/null +++ b/configs/etf_universe.json @@ -0,0 +1,408 @@ +{ + "version": 1, + "description": "Default ETF universe for trend-following (edit ts_code list after verifying tradability).", + "assets": [ + { + "ts_code": "510300.SH", + "asset_class": "equity_cn", + "name": "CSI300 ETF" + }, + { + "ts_code": "510500.SH", + "asset_class": "equity_cn", + "name": "CSI500 ETF" + }, + { + "ts_code": "159915.SZ", + "asset_class": "equity_cn", + "name": "ChiNext ETF" + }, + { + "ts_code": "588000.SH", + "asset_class": "equity_cn", + "name": "STAR50 ETF" + }, + { + "ts_code": "510880.SH", + "asset_class": "equity_cn", + "name": "Dividend ETF" + }, + { + "ts_code": "513100.SH", + "asset_class": "equity_qdii", + "name": "NASDAQ100 ETF (QDII)" + }, + { + "ts_code": "513500.SH", + "asset_class": "equity_qdii", + "name": "S&P 500 ETF (QDII)" + }, + { + "ts_code": "513800.SH", + "asset_class": "equity_qdii", + "name": "Nikkei 225 ETF (QDII)" + }, + { + "ts_code": "513030.SH", + "asset_class": "equity_qdii", + "name": "Germany ETF (QDII)" + }, + { + "ts_code": "511010.SH", + "asset_class": "rates", + "name": "Treasury ETF" + }, + { + "ts_code": "518880.SH", + "asset_class": "commodity_precious", + "name": "Gold ETF" + }, + { + "ts_code": "159980.SZ", + "asset_class": "commodity_metals", + "name": "Non-ferrous / Metals ETF" + }, + { + "ts_code": "159985.SZ", + "asset_class": "commodity_agri", + "name": "Soymeal ETF" + }, + { + "ts_code": "159870.SZ", + "asset_class": "commodity_chem", + "name": "Chemicals ETF" + }, + { + "ts_code": "513310.SH", + "asset_class": "equity_cn_sector", + "name": "\u4e2d\u97e9\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "588200.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u82af\u7247ETF" + }, + { + "ts_code": "515880.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF" + }, + { + "ts_code": "159994.SZ", + "asset_class": "equity_cn_sector", + "name": "5GETF" + }, + { + "ts_code": "561330.SH", + "asset_class": "equity_cn_sector", + "name": "\u77ff\u4e1aETF" + }, + { + "ts_code": "512400.SH", + "asset_class": "equity_cn_sector", + "name": "\u6709\u8272\u91d1\u5c5eETF" + }, + { + "ts_code": "516150.SH", + "asset_class": "equity_cn_sector", + "name": "\u7a00\u571fETF\u5609\u5b9e" + }, + { + "ts_code": "588010.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF" + }, + { + "ts_code": "516800.SH", + "asset_class": "equity_cn_sector", + "name": "\u667a\u80fd\u5236\u9020ETF" + }, + { + "ts_code": "562500.SH", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "159667.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5de5\u4e1a\u6bcd\u673aETF" + }, + { + "ts_code": "512710.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5\u9f99\u5934ETF" + }, + { + "ts_code": "159732.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "588790.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521bAIETF\u535a\u65f6" + }, + { + "ts_code": "512480.SH", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "159516.SZ", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53\u8bbe\u5907ETF" + }, + { + "ts_code": "159995.SZ", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "512760.SH", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "515050.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF\u534e\u590f" + }, + { + "ts_code": "159583.SZ", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1\u8bbe\u5907ETF" + }, + { + "ts_code": "159811.SZ", + "asset_class": "equity_cn_sector", + "name": "5G50ETF" + }, + { + "ts_code": "512660.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF" + }, + { + "ts_code": "512680.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF\u5e7f\u53d1" + }, + { + "ts_code": "159530.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "159770.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "562950.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "561600.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "515070.SH", + "asset_class": "equity_cn_sector", + "name": "\u4eba\u5de5\u667a\u80fdAIETF" + }, + { + "ts_code": "512930.SH", + "asset_class": "equity_cn_sector", + "name": "AI\u4eba\u5de5\u667a\u80fdETF" + }, + { + "ts_code": "159852.SZ", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "515230.SH", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "513120.SH", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159570.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u901a\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159892.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6052\u751f\u533b\u836fETF" + }, + { + "ts_code": "512010.SH", + "asset_class": "equity_cn_sector", + "name": "\u533b\u836fETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "516160.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90ETF" + }, + { + "ts_code": "515030.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90\u8f66ETF" + }, + { + "ts_code": "515790.SH", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159857.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159840.SZ", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "561160.SH", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "159755.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c60ETF" + }, + { + "ts_code": "159796.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c6050ETF" + }, + { + "ts_code": "159690.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u8272\u77ff\u4e1aETF\u62db\u5546" + }, + { + "ts_code": "560860.SH", + "asset_class": "commodity_cn", + "name": "\u5de5\u4e1a\u6709\u8272ETF" + }, + { + "ts_code": "159652.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u827250ETF" + }, + { + "ts_code": "516780.SH", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159713.SZ", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159761.SZ", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u6750\u659950ETF" + }, + { + "ts_code": "588160.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF\u5357\u65b9" + }, + { + "ts_code": "159934.SZ", + "asset_class": "commodity_cn", + "name": "\u9ec4\u91d1ETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "159937.SZ", + "asset_class": "commodity_cn", + "name": "\u9ec4\u91d1ETF\u535a\u65f6" + }, + { + "ts_code": "161226.SZ", + "asset_class": "commodity_cn", + "name": "\u56fd\u6295\u767d\u94f6LOF" + }, + { + "ts_code": "501018.SH", + "asset_class": "commodity_cn", + "name": "\u5357\u65b9\u539f\u6cb9LOF" + }, + { + "ts_code": "161129.SZ", + "asset_class": "commodity_cn", + "name": "\u539f\u6cb9LOF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "515220.SH", + "asset_class": "commodity_cn", + "name": "\u7164\u70adETF" + }, + { + "ts_code": "161032.SZ", + "asset_class": "commodity_cn", + "name": "\u7164\u70ad\u9f99\u5934LOF" + }, + { + "ts_code": "159981.SZ", + "asset_class": "commodity_cn", + "name": "\u80fd\u6e90\u5316\u5de5ETF" + }, + { + "ts_code": "516020.SH", + "asset_class": "commodity_cn", + "name": "\u5316\u5de5ETF" + }, + { + "ts_code": "159825.SZ", + "asset_class": "commodity_cn", + "name": "\u519c\u4e1aETF" + }, + { + "ts_code": "516810.SH", + "asset_class": "commodity_cn", + "name": "\u519c\u4e1aETF\u534e\u590f" + }, + { + "ts_code": "511100.SH", + "asset_class": "rates_cn", + "name": "\u56fd\u503aETF\u534e\u590f" + }, + { + "ts_code": "511090.SH", + "asset_class": "rates_cn", + "name": "30\u5e74\u56fd\u503aETF" + }, + { + "ts_code": "511520.SH", + "asset_class": "rates_cn", + "name": "\u653f\u91d1\u503a\u5238ETF" + } + ], + "constraints": { + "max_positions": 4, + "must_include": { + "commodity": 0, + "rates": 0, + "equity": 0 + }, + "risk_proxy": "510300.SH", + "rates_fallback": "511010.SH", + "backtest_default_start": "20200101", + "backtest_default_end": "20251231" + } +} diff --git a/configs/etf_universe_industry_extended.json b/configs/etf_universe_industry_extended.json new file mode 100644 index 0000000..bbd0e35 --- /dev/null +++ b/configs/etf_universe_industry_extended.json @@ -0,0 +1,498 @@ +{ + "version": 1, + "description": "Default ETF universe for trend-following (edit ts_code list after verifying tradability).", + "assets": [ + { + "ts_code": "588000.SH", + "asset_class": "equity_cn", + "name": "STAR50 ETF" + }, + { + "ts_code": "510880.SH", + "asset_class": "equity_cn", + "name": "Dividend ETF" + }, + { + "ts_code": "513100.SH", + "asset_class": "equity_qdii", + "name": "NASDAQ100 ETF (QDII)" + }, + { + "ts_code": "513500.SH", + "asset_class": "equity_qdii", + "name": "S&P 500 ETF (QDII)" + }, + { + "ts_code": "513800.SH", + "asset_class": "equity_qdii", + "name": "Nikkei 225 ETF (QDII)" + }, + { + "ts_code": "513030.SH", + "asset_class": "equity_qdii", + "name": "Germany ETF (QDII)" + }, + { + "ts_code": "513310.SH", + "asset_class": "equity_cn_sector", + "name": "\u4e2d\u97e9\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "588200.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u82af\u7247ETF" + }, + { + "ts_code": "515880.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF" + }, + { + "ts_code": "159994.SZ", + "asset_class": "equity_cn_sector", + "name": "5GETF" + }, + { + "ts_code": "561330.SH", + "asset_class": "equity_cn_sector", + "name": "\u77ff\u4e1aETF" + }, + { + "ts_code": "512400.SH", + "asset_class": "equity_cn_sector", + "name": "\u6709\u8272\u91d1\u5c5eETF" + }, + { + "ts_code": "516150.SH", + "asset_class": "equity_cn_sector", + "name": "\u7a00\u571fETF\u5609\u5b9e" + }, + { + "ts_code": "588010.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF" + }, + { + "ts_code": "516800.SH", + "asset_class": "equity_cn_sector", + "name": "\u667a\u80fd\u5236\u9020ETF" + }, + { + "ts_code": "562500.SH", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "159667.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5de5\u4e1a\u6bcd\u673aETF" + }, + { + "ts_code": "512710.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5\u9f99\u5934ETF" + }, + { + "ts_code": "159732.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "588790.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521bAIETF\u535a\u65f6" + }, + { + "ts_code": "512480.SH", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "159516.SZ", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53\u8bbe\u5907ETF" + }, + { + "ts_code": "159995.SZ", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "512760.SH", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "515050.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF\u534e\u590f" + }, + { + "ts_code": "159583.SZ", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1\u8bbe\u5907ETF" + }, + { + "ts_code": "159811.SZ", + "asset_class": "equity_cn_sector", + "name": "5G50ETF" + }, + { + "ts_code": "512660.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF" + }, + { + "ts_code": "512680.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF\u5e7f\u53d1" + }, + { + "ts_code": "159530.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "159770.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "562950.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "561600.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "515070.SH", + "asset_class": "equity_cn_sector", + "name": "\u4eba\u5de5\u667a\u80fdAIETF" + }, + { + "ts_code": "512930.SH", + "asset_class": "equity_cn_sector", + "name": "AI\u4eba\u5de5\u667a\u80fdETF" + }, + { + "ts_code": "159852.SZ", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "515230.SH", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "513120.SH", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159570.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u901a\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159892.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6052\u751f\u533b\u836fETF" + }, + { + "ts_code": "512010.SH", + "asset_class": "equity_cn_sector", + "name": "\u533b\u836fETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "516160.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90ETF" + }, + { + "ts_code": "515030.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90\u8f66ETF" + }, + { + "ts_code": "515790.SH", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159857.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159840.SZ", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "561160.SH", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "159755.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c60ETF" + }, + { + "ts_code": "159796.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c6050ETF" + }, + { + "ts_code": "159761.SZ", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u6750\u659950ETF" + }, + { + "ts_code": "588160.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF\u5357\u65b9" + }, + { + "ts_code": "518880.SH", + "asset_class": "commodity_precious", + "name": "Gold ETF" + }, + { + "ts_code": "159980.SZ", + "asset_class": "commodity_metals", + "name": "Non-ferrous / Metals ETF" + }, + { + "ts_code": "159985.SZ", + "asset_class": "commodity_agri", + "name": "Soymeal ETF" + }, + { + "ts_code": "159870.SZ", + "asset_class": "commodity_chem", + "name": "Chemicals ETF" + }, + { + "ts_code": "159690.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u8272\u77ff\u4e1aETF\u62db\u5546" + }, + { + "ts_code": "560860.SH", + "asset_class": "commodity_cn", + "name": "\u5de5\u4e1a\u6709\u8272ETF" + }, + { + "ts_code": "159652.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u827250ETF" + }, + { + "ts_code": "516780.SH", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159713.SZ", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159792.SZ", + "asset_class": "equity_sector", + "name": "\u6e2f\u80a1\u4e92\u8054\u7f51" + }, + { + "ts_code": "515580.SH", + "asset_class": "equity_sector", + "name": "\u79d1\u6280" + }, + { + "ts_code": "159740.SZ", + "asset_class": "equity_sector", + "name": "\u6052\u751f\u79d1\u6280" + }, + { + "ts_code": "159998.SZ", + "asset_class": "equity_sector", + "name": "\u8ba1\u7b97\u673a" + }, + { + "ts_code": "159890.SZ", + "asset_class": "equity_sector", + "name": "\u4e91\u8ba1\u7b97" + }, + { + "ts_code": "159786.SZ", + "asset_class": "equity_sector", + "name": "VR" + }, + { + "ts_code": "512980.SH", + "asset_class": "equity_sector", + "name": "\u4f20\u5a92" + }, + { + "ts_code": "159869.SZ", + "asset_class": "equity_sector", + "name": "\u6e38\u620f" + }, + { + "ts_code": "516620.SH", + "asset_class": "equity_sector", + "name": "\u5f71\u89c6" + }, + { + "ts_code": "159206.SZ", + "asset_class": "equity_sector", + "name": "\u536b\u661f" + }, + { + "ts_code": "159392.SZ", + "asset_class": "equity_sector", + "name": "\u822a\u7a7a\u822a\u5929" + }, + { + "ts_code": "561380.SH", + "asset_class": "equity_sector", + "name": "\u7535\u7f51" + }, + { + "ts_code": "159566.SZ", + "asset_class": "equity_sector", + "name": "\u50a8\u80fd\u7535\u6c60" + }, + { + "ts_code": "512170.SH", + "asset_class": "equity_sector", + "name": "\u533b\u7597" + }, + { + "ts_code": "512290.SH", + "asset_class": "equity_sector", + "name": "\u751f\u7269\u533b\u836f" + }, + { + "ts_code": "159992.SZ", + "asset_class": "equity_sector", + "name": "\u521b\u65b0\u836f" + }, + { + "ts_code": "159327.SZ", + "asset_class": "equity_sector", + "name": "\u534a\u5bfc\u4f53\u8bbe\u5907" + }, + { + "ts_code": "159565.SZ", + "asset_class": "equity_sector", + "name": "\u6c7d\u8f66\u96f6\u90e8\u4ef6" + }, + { + "ts_code": "516110.SH", + "asset_class": "equity_sector", + "name": "\u6c7d\u8f66" + }, + { + "ts_code": "512690.SH", + "asset_class": "equity_sector", + "name": "\u9152/\u98df\u54c1" + }, + { + "ts_code": "159928.SZ", + "asset_class": "equity_sector", + "name": "\u6d88\u8d39" + }, + { + "ts_code": "159698.SZ", + "asset_class": "equity_sector", + "name": "\u7cae\u98df" + }, + { + "ts_code": "159766.SZ", + "asset_class": "equity_sector", + "name": "\u65c5\u6e38" + }, + { + "ts_code": "159709.SZ", + "asset_class": "equity_sector", + "name": "\u7269\u8054\u7f51" + }, + { + "ts_code": "516020.SH", + "asset_class": "equity_sector", + "name": "\u5316\u5de5" + }, + { + "ts_code": "159666.SZ", + "asset_class": "equity_sector", + "name": "\u4ea4\u901a\u8fd0\u8f93" + }, + { + "ts_code": "515220.SH", + "asset_class": "equity_sector", + "name": "\u7164\u70ad" + }, + { + "ts_code": "515210.SH", + "asset_class": "equity_sector", + "name": "\u94a2\u94c1" + }, + { + "ts_code": "512880.SH", + "asset_class": "equity_sector", + "name": "\u8bc1\u5238" + }, + { + "ts_code": "159299.SZ", + "asset_class": "equity_sector", + "name": "\u91d1\u878d\u79d1\u6280" + }, + { + "ts_code": "159937.SZ", + "asset_class": "commodity", + "name": "\u9ec4\u91d1" + }, + { + "ts_code": "159608.SZ", + "asset_class": "equity_sector", + "name": "\u7a00\u6709\u91d1\u5c5e" + }, + { + "ts_code": "159588.SZ", + "asset_class": "equity_sector", + "name": "\u77f3\u6cb9\u5929\u7136\u6c14" + }, + { + "ts_code": "511010.SH", + "asset_class": "rates", + "name": "\u56fd\u503a" + }, + { + "ts_code": "159745.SZ", + "asset_class": "equity_sector", + "name": "\u5efa\u6750" + }, + { + "ts_code": "161226.SZ", + "asset_class": "commodity", + "name": "\u767d\u94f6" + } + ], + "constraints": { + "max_positions": 3, + "must_include": { + "equity": 1, + "rates": 0, + "commodity": 0 + }, + "risk_proxy": "588000.SH", + "rates_fallback": "511010.SH", + "backtest_default_start": "20200101", + "backtest_default_end": "20251231" + } +} diff --git a/configs/etf_universe_industry_only.json b/configs/etf_universe_industry_only.json new file mode 100644 index 0000000..f6a7f3a --- /dev/null +++ b/configs/etf_universe_industry_only.json @@ -0,0 +1,318 @@ +{ + "version": 1, + "description": "Default ETF universe for trend-following (edit ts_code list after verifying tradability).", + "assets": [ + { + "ts_code": "588000.SH", + "asset_class": "equity_cn", + "name": "STAR50 ETF" + }, + { + "ts_code": "510880.SH", + "asset_class": "equity_cn", + "name": "Dividend ETF" + }, + { + "ts_code": "513100.SH", + "asset_class": "equity_qdii", + "name": "NASDAQ100 ETF (QDII)" + }, + { + "ts_code": "513500.SH", + "asset_class": "equity_qdii", + "name": "S&P 500 ETF (QDII)" + }, + { + "ts_code": "513800.SH", + "asset_class": "equity_qdii", + "name": "Nikkei 225 ETF (QDII)" + }, + { + "ts_code": "513030.SH", + "asset_class": "equity_qdii", + "name": "Germany ETF (QDII)" + }, + { + "ts_code": "513310.SH", + "asset_class": "equity_cn_sector", + "name": "\u4e2d\u97e9\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "588200.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u82af\u7247ETF" + }, + { + "ts_code": "515880.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF" + }, + { + "ts_code": "159994.SZ", + "asset_class": "equity_cn_sector", + "name": "5GETF" + }, + { + "ts_code": "561330.SH", + "asset_class": "equity_cn_sector", + "name": "\u77ff\u4e1aETF" + }, + { + "ts_code": "512400.SH", + "asset_class": "equity_cn_sector", + "name": "\u6709\u8272\u91d1\u5c5eETF" + }, + { + "ts_code": "516150.SH", + "asset_class": "equity_cn_sector", + "name": "\u7a00\u571fETF\u5609\u5b9e" + }, + { + "ts_code": "588010.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF" + }, + { + "ts_code": "516800.SH", + "asset_class": "equity_cn_sector", + "name": "\u667a\u80fd\u5236\u9020ETF" + }, + { + "ts_code": "562500.SH", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "159667.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5de5\u4e1a\u6bcd\u673aETF" + }, + { + "ts_code": "512710.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5\u9f99\u5934ETF" + }, + { + "ts_code": "159732.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "588790.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521bAIETF\u535a\u65f6" + }, + { + "ts_code": "512480.SH", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "159516.SZ", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53\u8bbe\u5907ETF" + }, + { + "ts_code": "159995.SZ", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "512760.SH", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "515050.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF\u534e\u590f" + }, + { + "ts_code": "159583.SZ", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1\u8bbe\u5907ETF" + }, + { + "ts_code": "159811.SZ", + "asset_class": "equity_cn_sector", + "name": "5G50ETF" + }, + { + "ts_code": "512660.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF" + }, + { + "ts_code": "512680.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF\u5e7f\u53d1" + }, + { + "ts_code": "159530.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "159770.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "562950.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "561600.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "515070.SH", + "asset_class": "equity_cn_sector", + "name": "\u4eba\u5de5\u667a\u80fdAIETF" + }, + { + "ts_code": "512930.SH", + "asset_class": "equity_cn_sector", + "name": "AI\u4eba\u5de5\u667a\u80fdETF" + }, + { + "ts_code": "159852.SZ", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "515230.SH", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "513120.SH", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159570.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u901a\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159892.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6052\u751f\u533b\u836fETF" + }, + { + "ts_code": "512010.SH", + "asset_class": "equity_cn_sector", + "name": "\u533b\u836fETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "516160.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90ETF" + }, + { + "ts_code": "515030.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90\u8f66ETF" + }, + { + "ts_code": "515790.SH", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159857.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159840.SZ", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "561160.SH", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "159755.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c60ETF" + }, + { + "ts_code": "159796.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c6050ETF" + }, + { + "ts_code": "159761.SZ", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u6750\u659950ETF" + }, + { + "ts_code": "588160.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF\u5357\u65b9" + }, + { + "ts_code": "518880.SH", + "asset_class": "commodity_precious", + "name": "Gold ETF" + }, + { + "ts_code": "159980.SZ", + "asset_class": "commodity_metals", + "name": "Non-ferrous / Metals ETF" + }, + { + "ts_code": "159985.SZ", + "asset_class": "commodity_agri", + "name": "Soymeal ETF" + }, + { + "ts_code": "159870.SZ", + "asset_class": "commodity_chem", + "name": "Chemicals ETF" + }, + { + "ts_code": "159690.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u8272\u77ff\u4e1aETF\u62db\u5546" + }, + { + "ts_code": "560860.SH", + "asset_class": "commodity_cn", + "name": "\u5de5\u4e1a\u6709\u8272ETF" + }, + { + "ts_code": "159652.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u827250ETF" + }, + { + "ts_code": "516780.SH", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159713.SZ", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + } + ], + "constraints": { + "max_positions": 3, + "must_include": { + "equity": 1, + "rates": 0, + "commodity": 0 + }, + "risk_proxy": "588000.SH", + "rates_fallback": "511010.SH", + "backtest_default_start": "20200101", + "backtest_default_end": "20251231" + } +} diff --git a/configs/etf_universe_industry_profiled.json b/configs/etf_universe_industry_profiled.json new file mode 100644 index 0000000..c181fca --- /dev/null +++ b/configs/etf_universe_industry_profiled.json @@ -0,0 +1,318 @@ +{ + "version": 1, + "description": "Default ETF universe for trend-following (edit ts_code list after verifying tradability).", + "assets": [ + { + "ts_code": "588000.SH", + "asset_class": "equity_cn", + "name": "STAR50 ETF" + }, + { + "ts_code": "513310.SH", + "asset_class": "equity_cn_sector", + "name": "\u4e2d\u97e9\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "588200.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u82af\u7247ETF" + }, + { + "ts_code": "515880.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF" + }, + { + "ts_code": "159994.SZ", + "asset_class": "equity_cn_sector", + "name": "5GETF" + }, + { + "ts_code": "561330.SH", + "asset_class": "equity_cn_sector", + "name": "\u77ff\u4e1aETF" + }, + { + "ts_code": "512400.SH", + "asset_class": "equity_cn_sector", + "name": "\u6709\u8272\u91d1\u5c5eETF" + }, + { + "ts_code": "516150.SH", + "asset_class": "equity_cn_sector", + "name": "\u7a00\u571fETF\u5609\u5b9e" + }, + { + "ts_code": "588010.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF" + }, + { + "ts_code": "516800.SH", + "asset_class": "equity_cn_sector", + "name": "\u667a\u80fd\u5236\u9020ETF" + }, + { + "ts_code": "562500.SH", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "159667.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5de5\u4e1a\u6bcd\u673aETF" + }, + { + "ts_code": "512710.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5\u9f99\u5934ETF" + }, + { + "ts_code": "159732.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "512480.SH", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "159516.SZ", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53\u8bbe\u5907ETF" + }, + { + "ts_code": "159995.SZ", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "512760.SH", + "asset_class": "equity_cn_sector", + "name": "\u82af\u7247ETF" + }, + { + "ts_code": "515050.SH", + "asset_class": "equity_cn_sector", + "name": "\u901a\u4fe1ETF\u534e\u590f" + }, + { + "ts_code": "159811.SZ", + "asset_class": "equity_cn_sector", + "name": "5G50ETF" + }, + { + "ts_code": "512660.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF" + }, + { + "ts_code": "512680.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF\u5e7f\u53d1" + }, + { + "ts_code": "159770.SZ", + "asset_class": "equity_cn_sector", + "name": "\u673a\u5668\u4ebaETF" + }, + { + "ts_code": "562950.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "561600.SH", + "asset_class": "equity_cn_sector", + "name": "\u6d88\u8d39\u7535\u5b50ETF" + }, + { + "ts_code": "515070.SH", + "asset_class": "equity_cn_sector", + "name": "\u4eba\u5de5\u667a\u80fdAIETF" + }, + { + "ts_code": "512930.SH", + "asset_class": "equity_cn_sector", + "name": "AI\u4eba\u5de5\u667a\u80fdETF" + }, + { + "ts_code": "159852.SZ", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "515230.SH", + "asset_class": "equity_cn_sector", + "name": "\u8f6f\u4ef6ETF" + }, + { + "ts_code": "513120.SH", + "asset_class": "equity_cn_sector", + "name": "\u6e2f\u80a1\u521b\u65b0\u836fETF" + }, + { + "ts_code": "159892.SZ", + "asset_class": "equity_cn_sector", + "name": "\u6052\u751f\u533b\u836fETF" + }, + { + "ts_code": "516160.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90ETF" + }, + { + "ts_code": "515030.SH", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u80fd\u6e90\u8f66ETF" + }, + { + "ts_code": "515790.SH", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159857.SZ", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159840.SZ", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "561160.SH", + "asset_class": "equity_cn_sector", + "name": "\u9502\u7535\u6c60ETF" + }, + { + "ts_code": "159755.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c60ETF" + }, + { + "ts_code": "159796.SZ", + "asset_class": "equity_cn_sector", + "name": "\u7535\u6c6050ETF" + }, + { + "ts_code": "159761.SZ", + "asset_class": "equity_cn_sector", + "name": "\u65b0\u6750\u659950ETF" + }, + { + "ts_code": "588160.SH", + "asset_class": "equity_cn_sector", + "name": "\u79d1\u521b\u65b0\u6750\u6599ETF\u5357\u65b9" + }, + { + "ts_code": "159690.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u8272\u77ff\u4e1aETF\u62db\u5546" + }, + { + "ts_code": "560860.SH", + "asset_class": "commodity_cn", + "name": "\u5de5\u4e1a\u6709\u8272ETF" + }, + { + "ts_code": "159652.SZ", + "asset_class": "commodity_cn", + "name": "\u6709\u827250ETF" + }, + { + "ts_code": "516780.SH", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159713.SZ", + "asset_class": "commodity_cn", + "name": "\u7a00\u571fETF" + }, + { + "ts_code": "159792.SZ", + "asset_class": "equity_sector", + "name": "\u6e2f\u80a1\u4e92\u8054\u7f51" + }, + { + "ts_code": "515580.SH", + "asset_class": "equity_sector", + "name": "\u79d1\u6280" + }, + { + "ts_code": "159740.SZ", + "asset_class": "equity_sector", + "name": "\u6052\u751f\u79d1\u6280" + }, + { + "ts_code": "159998.SZ", + "asset_class": "equity_sector", + "name": "\u8ba1\u7b97\u673a" + }, + { + "ts_code": "159890.SZ", + "asset_class": "equity_sector", + "name": "\u4e91\u8ba1\u7b97" + }, + { + "ts_code": "159786.SZ", + "asset_class": "equity_sector", + "name": "VR" + }, + { + "ts_code": "512980.SH", + "asset_class": "equity_sector", + "name": "\u4f20\u5a92" + }, + { + "ts_code": "159869.SZ", + "asset_class": "equity_sector", + "name": "\u6e38\u620f" + }, + { + "ts_code": "516620.SH", + "asset_class": "equity_sector", + "name": "\u5f71\u89c6" + }, + { + "ts_code": "159766.SZ", + "asset_class": "equity_sector", + "name": "\u65c5\u6e38" + }, + { + "ts_code": "159709.SZ", + "asset_class": "equity_sector", + "name": "\u7269\u8054\u7f51" + }, + { + "ts_code": "515220.SH", + "asset_class": "equity_sector", + "name": "\u7164\u70ad" + }, + { + "ts_code": "159608.SZ", + "asset_class": "equity_sector", + "name": "\u7a00\u6709\u91d1\u5c5e" + }, + { + "ts_code": "161226.SZ", + "asset_class": "commodity", + "name": "\u767d\u94f6" + } + ], + "constraints": { + "max_positions": 3, + "must_include": { + "equity": 1, + "rates": 0, + "commodity": 0 + }, + "risk_proxy": "588000.SH", + "rates_fallback": "511010.SH", + "backtest_default_start": "20200101", + "backtest_default_end": "20251231" + } +} diff --git a/configs/etf_universe_proxy.json b/configs/etf_universe_proxy.json new file mode 100644 index 0000000..75c5ba8 --- /dev/null +++ b/configs/etf_universe_proxy.json @@ -0,0 +1,73 @@ +{ + "version": 1, + "description": "Default ETF universe for trend-following (edit ts_code list after verifying tradability).", + "assets": [ + { + "ts_code": "510300.SH", + "asset_class": "equity_cn", + "name": "CSI300 ETF" + }, + { + "ts_code": "510500.SH", + "asset_class": "equity_cn", + "name": "CSI500 ETF" + }, + { + "ts_code": "159915.SZ", + "asset_class": "equity_cn", + "name": "ChiNext ETF" + }, + { + "ts_code": "511010.SH", + "asset_class": "rates", + "name": "Treasury ETF" + }, + { + "ts_code": "512480.SH", + "asset_class": "equity_cn_sector", + "name": "\u534a\u5bfc\u4f53ETF" + }, + { + "ts_code": "512660.SH", + "asset_class": "equity_cn_sector", + "name": "\u519b\u5de5ETF" + }, + { + "ts_code": "515070.SH", + "asset_class": "equity_cn_sector", + "name": "\u4eba\u5de5\u667a\u80fdAIETF" + }, + { + "ts_code": "515790.SH", + "asset_class": "equity_cn_sector", + "name": "\u5149\u4f0fETF" + }, + { + "ts_code": "159934.SZ", + "asset_class": "commodity_cn", + "name": "\u9ec4\u91d1ETF\u6613\u65b9\u8fbe" + }, + { + "ts_code": "161226.SZ", + "asset_class": "commodity_cn", + "name": "\u56fd\u6295\u767d\u94f6LOF" + }, + { + "ts_code": "515220.SH", + "asset_class": "commodity_cn", + "name": "\u7164\u70adETF" + } + ], + "constraints": { + "max_positions": 4, + "must_include": { + "equity": 1, + "rates": 1, + "commodity": 0 + }, + "risk_proxy": "510300.SH", + "rates_fallback": "511010.SH", + "backtest_default_start": "20200101", + "backtest_default_end": "20251231" + } +} diff --git a/configs/tushare.env.example b/configs/tushare.env.example new file mode 100644 index 0000000..b55ed12 --- /dev/null +++ b/configs/tushare.env.example @@ -0,0 +1,3 @@ +# Copy to .env (not committed) and fill in. +TUSHARE_TOKEN= +TUSHARE_TIMEOUT=30 diff --git a/data/etf_trend_equity_2020_2025_daily.parquet b/data/etf_trend_equity_2020_2025_daily.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c2e616780b6417f29be2730c0cc1e1c10bfad6e9 GIT binary patch literal 5513 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v10_full_universe_proxybest_trades.parquet b/data/etf_trend_equity_2020_2025_v10_full_universe_proxybest_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6bf428599e75aa34692ca09ed68a7ccbc2fd54e5 GIT binary patch literal 30710 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 Cmaf+T literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v11_industry_event_trades.parquet b/data/etf_trend_equity_2020_2025_v11_industry_event_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a5dcf6ea9af650915d91ac2989295c8d2ba1cf7d GIT binary patch literal 11973 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v11_industry_event_weights.parquet b/data/etf_trend_equity_2020_2025_v11_industry_event_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e72fcb7127bf3983dfcd8b7cbe64ce1f1b2ef8d0 GIT binary patch literal 44398 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 Y5&j26_}>u!fBZ*YUq?v3WugB60>Oa)c>n+a literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v12_industry_event_v2.parquet b/data/etf_trend_equity_2020_2025_v12_industry_event_v2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..23e880bfb91280f44f7304c3843dfa78e8fc52b4 GIT binary patch literal 14700 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 UcNToKKL3aAyCIYa|7Yp{0QHOhumAu6 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v12_industry_event_v2_weights.parquet b/data/etf_trend_equity_2020_2025_v12_industry_event_v2_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6530a5cc9a8557492bccfedf691814d2ea6cfe58 GIT binary patch literal 44022 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v13_industry_event_defaults.parquet b/data/etf_trend_equity_2020_2025_v13_industry_event_defaults.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3244db66eafbfe11870b7a54dbe8716eeab8b346 GIT binary patch literal 13507 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v13_industry_event_defaults_trades.parquet b/data/etf_trend_equity_2020_2025_v13_industry_event_defaults_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..549a609c4d54f5e2b208e896fe12645488dfe374 GIT binary patch literal 8157 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v14_profiled_best.parquet b/data/etf_trend_equity_2020_2025_v14_profiled_best.parquet new file mode 100644 index 0000000000000000000000000000000000000000..40cc73a15221dc9d8ef2566bd1974d0d522b475a GIT binary patch literal 14134 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v14_profiled_best_trades.parquet b/data/etf_trend_equity_2020_2025_v14_profiled_best_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5477fe7a1087f7db3fa5f25c68351348d7d4a82 GIT binary patch literal 8475 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v14_profiled_best_weights.parquet b/data/etf_trend_equity_2020_2025_v14_profiled_best_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d8945a9ddae6f449d9e8706737e88d3db790a5a GIT binary patch literal 43823 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 HORPd>l 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 Ang9R* literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v15_best_confirm2_trades.parquet b/data/etf_trend_equity_2020_2025_v15_best_confirm2_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9c7add2945be14e8c1fff08ee84ac795126c33de GIT binary patch literal 8630 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ⅈSkR2C`;rTv+GBMyyX zj_?qlrA|v*kTu77Q}Txy%npst%v!s~~@tHM=g~iLVXh~UObW)*CT1D%!6i%9~%%ro#*|h12 zVZf8*TjG{$GgZrTveV3oCPtUGM4MH$JX@+T>asGxhT5c0NHT)$0&RSp1okmHD|50G zuxEaOKEYf$qN^guQew`LrJ9nX)h1n0rY%3gJepslPe^p~vN9z(S!qUnd@K_~xjw6^ ztN`LLR40|^WYK2E_r#*K8YWh4e1>C>)?zm6;?oMo_)e=Jwh_OJqKpu`F`rgR4B1gm z9Tt@-&yrcFk9PPBcIZk&<|uyAd`Z5^!Lwnx8LA zt9J5evpznKsfUrt1LUzxmjHE47*n@uZB|^3PAY#`ZpQHcAN-MNv&=<#326m6mQ0II zmh|vml4h1@rAA4%G|8;BsH%UXpDem~l~Es)^U$1WEmajc*{Ra`&iejGHPruXKhC0$ z&m7751A6{Jau4h=ZJACQCz)UP(7yjw9RE>$EAuVp!iV=-RCQj~d}ogTYd+C><{U#G z!i+GR^e`XttKn=U*x+0M9cm1`3OGMNgWilcn_!ky8=P~c(vTHboo`Xe96ep6HRl)2 zFJbzXISZOXO}QpoUX@tnm`}gV5=&+^oUsZWqcb|OCb>{uu1QZ)!4!;VM&bQF1~h?r zPhrNYV@$?mFi0r_;vMr;!k~`%nG!Q=_G~4*#l|?L9YflIGBRp4vo*?@Z)P4RSz*XC z@`>t%6hIkusT#+mhT+V-I3NR@%)LjXOVTbq;K1;?7~Lz)Dn`?)#IL>QLfH$|!%}9s+-uy1;z^xSo*@|Ji=V zgX3pZMb+eGrI{Hk>ZBUR^&AE;j5tRUolZDWhm<4#`h@ufIa1YfZE8#`BMShoG1j2Xug9fKg-aAt(R-)`$qi7nS5$OUn&5aehgO*m0qYMlNiT X^C}lS4c}SE|3gA#GIzz3c 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v15_best_confirm_weights.parquet b/data/etf_trend_equity_2020_2025_v15_best_confirm_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cf4cc52d9ad6fdf9beb7aae29170653c367e753f GIT binary patch literal 43649 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v2.parquet b/data/etf_trend_equity_2020_2025_v2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..81eba28b3d0661e89d2482752f5b471ed1741403 GIT binary patch literal 19126 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v2_trades.parquet b/data/etf_trend_equity_2020_2025_v2_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a715abe8f59babacfe1f9e624b3429d70948e54f GIT binary patch literal 8750 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≻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 iJRfEBHdIjXxbKksr~_FM>_}r literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v3_universe_expand_trades.parquet b/data/etf_trend_equity_2020_2025_v3_universe_expand_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..74f3339ed1297f52c12365beeef757e5c31f443b GIT binary patch literal 46161 zcmZU*2{@Ha*Z}+-j{VqoA%twnz7*Z|B}=jtqO64|Nkx&PY)M&)QW8bUmVKwgv9HIz zM2I4(cvGoV|D4|U`~UB|e%Ceg%-l0`-!u0%_cPBNHu|>8ym;Qc^Sm`XEqOmO@nT#U zc6+Y^BZgrrN-9dqDk|E71iY#;D}h5}Nzndp#;BsCCL)PxAsos|A_Tz@yo!p54yGbV!mBC?`XdzoJ8hwQ z$p17%VXC@fh_XlsrYuNp$@@3y^59if1t(Bz0;VQXfmcJcP$A>rqEUGiV1A~=CpS3&bs5tPI<&;SkHyO;**t0A(8 z(gaHWn1*W@UPHyn5mnYuio!G$qcB|}rl}i@5+kN5l7!OMf6q1abo-mM5DqPbLrb>- z({k1O_les6!l>|Y48i6wErib13)4m*ZC6K3TXz+eGyZ+*`k->se<=#Vcrb0jB*aq0 zP-Uf1GiqrIW!iK90~1`Mmi$rXM8PX7hc05u4^SiG=HG|*2r6qQpv)-{WrB;0%E~I| zlu)NtYNti&1Fe-R=P2p`6>T4CISEq{*?O?~Uy&C{6Vb&HIP-9XWE&)FW%X4Yp;Qe= zz*KG+p&V(*nO>ZLq8WB(qS;+UQe6xuAgF|pL}@erH&(Dha1m2!q~MTp)E1&rAu1)I zk@hH6V5;ga2(PLGwIz$HO{pc+Tvx0%3@0$CL@l4Iz!9`vYQs>EK$N`Dc%@oL)S|9y zgQ@GT)>@*n24bg%t{6(xC(nOr1PPK<>xKOtQ*EtAMB=Xisj_pjq)O4| z|IH8%6$cqcRV8Hy#Bt>uOtn$(UrC-3K+@bqq;#Y=nUOV4qWWK<`AbMpYz9T9}1eq0-YH9(b{b*osdv#-vk(d~OkKncaa~nOJ(Y;+ zIkl~*r3O(Bscrp>NCVl8hO1?57V4vcltCla29=OuN{=v83#mM4*j=h72}U7th9FTI zp`?YxjanswshzZ39c#T1WicegH6%=;v>J83T1XMJTmvz!)Ddb8`2j80<$q_Zjr4;c zxcFa1mq!}Ug2tC1;i@*?Mg(mT2AqJ1PNgHtqXa9Egwq+RVosu3D+kKHbRyZB$yp*o z%1V_;EFzNHIaJ$}lR@lFZD7-9Nfx6@ohYY=ILJ27EGVg+fGMM86Vx}64A3|gr$S7* zQ5Z=%H01BF!6+&;-RG}}I7y6ZNb+$=;!#MPchS=xc~WUf0*pl*oEf@acLoT#3I>VhHCIUER&sygDMV6XHXGh*acZ5$OOQh^K-AwW7Zh*5_j z-BhEhv52I@e z5z)~Vla@gvscs0N({e3D=1N^Y>a66dCOt=;rR^a!<}9Ztfu(GH=FG)7xw?e9oA zVJe-G+BhWYPU#Zr8mKIDP@{?**$9$j9D;Qs*g1PSufMaXy!{_U{VtL<>MTs{EF$o? z=f4w8PmpUsL(qPvEPa<5b*I)u1(?wK>@gLz>mZ-pC`?s)#G);Bv=sYP1x%f~4o)4E zl&H3fsms++2~t%_KpE+lh}ozcrp{)?-?xa`#c+g!dT4)~M20OQAkoUmsIH{)SBI0d zwGh)u(i9fdEWOExsOCv8vmku`l{fiNd4vi_tl|4>Mye9iR0OJMCseJRMxdmBM@*w( zGyZ6vHqskN{RKlN(N;VYf@m)z9Me?pA&qmOjTKmZY)a02S|Z>xyC zNX8@yl}U(_f^-}|nzJ_A)3tR+CKqv%f?Lx51k}2QT8$>xP-ziSrGnUag_Eg!w$rj) zAwSXpFF7+Vq%Zzd&@?rp$VnoAy35Q28Xq|LZcI~648 z-`F~{g#w$#8fr&mqlIV*a$zDI>dGpr%DfowoFs3zxB~Az5nc{ndR}^A4NL}YMJj)r z1*oOJQ6DEK3IR*FBx%v(o(PUP0>k0raCikA_Jmi$uesL?P0$X|0iH*>zBcgS&VRBMyB$r;%7Bp36+E8P9F0 z)Qsn`x6!BLa|vvw6YxsXrx)@s!5z?|=rf1}&qXqbhO9L+Y!9P5D#LMwQ6f&Mg>grM z9?oaY+vW<>&Wykorkz@I7avP7m{Xt`12S@id-otK@bbO9p$ zQF-Yer`#^ZwPq;jb=y5g@c7*`?Sej8k@P}7ImsqMzB$P;LMIDL+Yy(V>9_e;44P~U zsF-ixcDiAmUO12{1~fNQ;h`>AP+z=F<24kw6{<4_({&FpP#-CM!xJ zUgmLv!G75%cRk`|pJvEbuT|}rdzO>3UoJoIQM_D1VOclITA1Y{ifUfR%NN)D!;B=z zWuZ{ksnVlR-m5~DrGdq+$_bC2UDb0}SQKmKQm!l3EkEi}Y}gpOzPoAjpPt<>wrB`Q zk+>6-S_rBH#BjR=<#qwjzdRtQbc$UisC1$Es&u2tsPs_vpjT}nL3KcfmQ`)gOtnvK z#Kz7_ea!J}pZbK`RV$4te=@7)bnx&E%~v4{H#BFdS}Z;*#mcC)kfd+47JA#xTKmmy z&zstB?|SxYFJ+wV*Iv%Lij*klmi3-@Ik#@^S;>3czvq2nIaQ~It@nPcS?J%p)`}ST zPcI_-nPPZA_sfXg0o|_?o{73&r_ZwQ+nl?4VBhz}TPRz8Jh1QQYB@Xn+890nzcv>V z;rHgk0Q}ja)qm`dM`p()NztR_G(vX6YmZDuFqi|$;&zgOI~!)8UoC7%Kst^TU4MqzW`|X1!g5JhgjL&kk z9yAp>r*9D$j%-vsS~A5<;+h&461u&uxm2nbl5)D&khwk`hxyLzC|lW8N%_(dTMNa; zjUfwfH5n@NEmiu|hAma;h&rS8h_9nwx2!a0f`_fN=Ea@$-c<}+>wFnO>!hwu562s+ zp&)hJ2F-uO#)#9{9(RZ1Hkv>*U1-T|TO@cMgyGGIosF^7sJ*>|cdEl-*K@pw9NnWG z4mqLPA?E;ORW4^naRP2{QV$;u{W5wu;#fG!-J+$^96hd~%#-dnmP)503M=Ohj(f;g0M1 zN$+uFqtS@Mo76i;FTTqiKYHmyCI7Lob!4}=3zEmezrVS2?DF?7{Lh@!h{(v1rAs4i zVl@#ECo-b>;#wlv@$ND1{Q|KfF#;ZO;&jD?ClekC`b&fa^|yER;|Nq;(6{74@z0%nkHevK?=)9BTil$a_mj!v_XDZ~Ph{X$crwGkPM*lZeOf#6 z=mv5Sx#{PpeDktnoc*5Vrrq<)fA-{_UqMmTlwSdI8Yc@Y$DB_VHzLnb+9iG8zkKk} z{ebG3^DhHx=3};PEI5gbZ{#s7JX2vCj9H+PCSm1G>nEBS%hUqc?|@rpUPw z{aa?EP8UQFHxWyx0ypa zRHJOY<5Bxjn;UM zx_AO|rdRY?1!4pq#Yx;W%dRqSBRsk$eUI+DV;pjRPx4;JE0j%mT;El-{D|teUSEG> zAE$)e6!KM6ztoRBt=gEQ=MChD9^cTI@_CHh4|2TGpCad?dzFw+siFFhPS3=BzoU~d z#y7usypjx$_ig%#%uwljzE9GRTlMi2Bc%$ca;K50Lz;BD z>HFLJr(5_=FzTo2$KtzXbEox|GJ=PY{UH^7`rtebiZ0OkQw|;P8jU5d+TY`+AsQtn z1Xfnp*49!|v~%WV#nf3@#ZY{rsf_AoI3X0usG{>6Ry+zbS@9}rysS8DbV#I+SJmPb zBA`ZPMOKX3XpL#%uCV%GN{T)hrX?tZJHn`~rpWY+QC(SGMF_)dX>yVgG7V*Q-XjDp zEhQyhR=l!?NFqAu5%dv2Gtg93QDmhysVH%(Q2`nnnu@GKjLNF2+MJ9U%Bq57VKnaV zyijP>z{T6n^?ySvCUxpy>bwP*{u^)S{5QDDWZHOu|1Z3vix7*$(QrPFbElD&5RkaZ zWF*Yps+5!9X(srTaFt-NAfQLlqE8CKWEY4w?YQiOvwDKGx9y4h^`uf`_AlhA-TW^j zsj=?>|8FPXR>NZ zzU1_(7}bDmcRnHdEZi8z5{aYeWoa)?$@vf+xP-*A=co63=2h71d&{b&8PM{mQ7{XU z5_@erg>z{%9YjwQvoNYf;e3c5@p@#n$e5ERgcEq7VkWg|ADUWeN+2t%X0JiN!eWAt zMU8`{d`pGYv=A*(L)eEVQjEf=cOyB)gMiV~c;bj8JsSevL4Yy8B#YS-g_$&-VuUOc z0h|mykEebliRw{#?LFcfv$(?ar8f1<+3^l@b`kTt9OhJV1Z-Q680#4xQf^B!CCJin zapQT!YZkJ!*qB3H2+DeK)<)JQ4Bkd;-98+*rNv~eY?koZQCxB;7DZU;@wBpZ&Gal1 zHv|k*#LejqJa9Q=J)zi0B{o`p5&A3p3HV1txJVg}IGRX2Jq@jFQY&Vzz`4Bnf2>rnqd}}x^j#qZsbFED4iPmM!-b0A3`-y3 zox^9CSntr^=Vpy*clQ-eqY+X_AkzrNikR>S`CyM28RbeydTwrbHAlS#CHi(IH(~k_ zY(*)HZEw7Cu8eUUoeAyZc_kr=d%_UWPw(**F@`mQ>Bg->D<9#QAuWaMGmZuel4{ll zSEbY@wBn@B-4%+>Zl-7{Jcw%7Ur6zB;`z#~5 zOz?EY#(oXo2Z!GJJ?#BrC4ZuruiGWtOKZF(h@Q@ak(qoXOESiyg&0Yq@hmJ88gd^r zxzE<4E~0VPdpISSaSw;Jg}s4YatcK@;aSv8gKs5)2h3t~11DtP#JqQOd$Y%7=v+l%w%053ys zc7a|Ub8CRMPl<1v@^HLojkcYzMu3(Ep>A2|_>|U7!QhTF0(*mFuO^7c$=A^yMhY}O zuVG`i%y!~l-ADDxeUFZ*?Rm`QFnDU1dPisO#U`#digp0(2FDUUj@Tf zYP+kaY$BS+PPcg9if-z>#G@G+vGQ_6S9QswJB|HQz>Aq3qq>>J+YsB1^ZHrxGXCYB zYA1D93-b1G_jf<#>CKEPo<8oUyuAH=y@Oa#E!h2}_p!jB)5m>->8RBp?^9lg!!ZoJ zNeus&!*qY!1epK7@qal@rrl`4{l{t=K8zM8CW+CJ*=aFpi~&cB{xD&TftC@YC1OGt z9W6$S$zgQOm@1O4Fcw;!H5`WLKmr%Wn9x40gb^@W9&8&e z0W&7yae4?OhDBi{MiRT84#tjJ#Sl^s8%z?TWoPHW=>7w7l4z7TFj`t89yALKqZOml zp;1HhNO+77W3a`rKn%x)G10E+(_$ndCW_J05S1`i9G-|_q)q}x#NxTAW9evVkQy@3 zsF84eXemrIwCL5IY>5}bSP)_ori`Hp3uClgw9*(I4VxIogB}>B$A__?2MKY8gVs_E zVMjAyX-4`itR#kz3uBz?VR#&1XgE$&55tQg5b7j>anfP>;usoXsDu$Y*gN$k5L1aL zqY>l4co9tkk)VWOKp;{u#Hc_Ff$4CFuUu%Zv>2->nkyWsk8qZ}g*<BIC=KT{y$)$Z`qa$O+lm=+z9 zJ_x_B30*pTWe{AgM8-VbI$^}mk*DNS2gE7|#f6=uK%C+FK~~2>@SE}YB2O3uOvZV+ zdAc1;xxJM;TnFH$597?oi!Z=z_qa{Uuf=?LQ&B2rT`73JlgOGXV zHBr5K8nQ*MDg^M%!=q#4=c0l>f%P?$9=?bDa9TD(VNrYxE}z`4d?I8L28iTG7mb_Y z^<30?`rI(wyDfCn{7W~iYcCNa)<$3^;>Ze?H~=&JI1!x)3Up;fJB>5dfhf6Qwq14t zW=cM4R0Z}yI8(;ziTyRO+b{j_mFL5tq|{fQ6h8*+CRQdly!wE&M`zDU2?aDi8(u!9 zR|7ew{j57vCZUXh^2+9NBe?!KbNA?*3OF#G8u_I;7vAZf+|D~s0;}NF^IhQW@m7{aRK6wyItZZM?Em2_XB<^|{QyF+K{;7LW zSqnc8R0IvZt%f_&IE-vl4jwBB(Y`6Qz`?Oe+-$1`oQ!rzi$4YU8(fELTf5*+&8_Q> zMV%m;xYkL??F6r~huY3Z#~@2jyqIC61>SC{4+h?>h0W68ffE_^V7j;JY0r2ATpL;>nW2gH=!#=tx8fjpo02>9oi zo>QeC0vf4(B|+PJz(fBV>kp<*&>Y5%-STdMtYGZh;K&3p4-IvA$9BNnJHN>I4@1DI zZFVIW*8;baVkbXYO@Pd0gGeKvD&TycYQKD<6^@*k`S$Wq0en1G?#6hl1&qbz$4+=x zKokAEYe!`>w4Yd@RpGCIZ-tr$f$`6QGpp*)Lv|8Ozcx@5t8WD}_Gaw5RSO(Br=m4x z(+VreQX+NB#c*#*UR;^A6{K#4981?kdUT+Pj{Qz6Trb$-6?xbR#X`Z6W#wb==0tIz zX6X>Hro=Aazea{?rV@{g_)$>b>*jvOkpiLzFYde7FbE<{YmH*7?XbUQ$LQCkKDe4z zlah0E5X5i%W2;LZfe3r)n`J@mpz3w?$u;vnn14UHIJwybzJ3yU;^Cz*xbopMCkJp$9eI>wr+j6H6e>seW2^Rlqd;$A-$`+;h z+aY3SaDpwV2Yxb9y5cO$KrUNJI(>}->1N{Y+cKu%Uiz0I_!aW;L!-(Nh_hLgY)cyfl3Fg~_LM%T8f93LQ|JZP za0}!9nLglaxccU^@(5hVTi#65CqbIW#x$>ED+Ed0Djwz=hDm-m!SL=0FpLt7juz~L zPs0W)3cX|S*7^IRdgETOWcxZ=YFY)iGal-n?j43>S~6LDRc(W9O|mR> zOGB{vvS8tZ{TSpLZR-Vc$rkX%_Iq^6OoL3w z&o|vuUBG>`KcL^V8qV!|n;K7325O&h$0lq#AfKr%GjWy#D|_$ioeZbI_b<)T5iZk^ zm=cq6-@gs&FI?6B{@^7XVYg=C=_UiuQrh<%HVQDPhTnWX-3pt6*m7(@9}Fq^P1)~j zh4;kXCwr{N!L5AjQ&IH*RCLJfBz|rKuke@qHgESs%yNBUO2H(&dUsXNL#z`JGmTj` zNsv9G&HAdK8WtqK4ikCG;K0d**Bxbjzs0H++=&MmwC0&wa0Hh2n~5y_4r^dx1`eD4;Li3kpxU7PQbly2GSJ z^T^XCIHhpTiE*tP?qUz+T^=?<$aQtYWc@PuG4No^au zl6J-P`as~6XQv}>5)82&7xxtpK_agI`@)%KVB7w|Z%eup0#8TS9gLm;mC=`n-+d+l z=|>D-^p{~MuE{7*4(R~frUp;lk#X<|8s%c_ehs^~IZS;zIR$5Hj`i1WjKMCKy`SUX zOu~M5`EL@=74Y>v&N*bf8m5nk>{!0`0^s4~Grn)-5Kul780c9I6MyE-wXT(eM8s@A z(X#;>Wcb5RDm6fIVrFYQQ#HJ^f$tp0%ORFSP~cH?HE`^AimEwO4VkapCs_;HA?NGx zrjJfLM6nFj^(|IGfbYvEiQQ!|JMjKiz-T$_Fnr zb>vH3shMSP>88Qdg~3j68nDUCNa}`$s9&WmYCTX?#KG%;_N_w$A3R4gJ7H-x{u})2 zhQn{9cbM`~AUC0u;^W*6{#A~4WQ}3CDg82#KfM_^KGl!k+}j4uhC2)XjCDZ>!D+Xg z!Z2hw%RWD(-wbxN1h$bX67ZC5?Tq=^4i%g+*hU=*3iNJ7t!*~L8HV@zdlLH~C+Vc( zvwE~|Y-T-}?rek-skF1JY4sr2JSdc>MndsyU83n$C-l2F(R4{Sf=RvqIoGCU@HTnx zbbV((+=wM_zwbtZ+=H4wJfH=Bn7O`d$m@r1e8%pNda|q?N#fns1fx?R1JENuV08 zGr?56OEaYQGKlTYr~=5PQI)z=02iI+dx!aop>FlU^$$iQyOG%b|ovG*n!m3KSpr$v%5h3i1wSxjnU& zfGJ&h#Tix&E-n*aERK`{>sG=1hlCD@+>0fD;%WyL--PDNjeYQ}XzWh5NEfhcTnWNg zRzTdbeC92KN@(#i@h~f@1Jk9jvQzQZpkiI{I3cnElEuC={_v{<%lBbr!u#rA^2a{) zV2^5exl*_75@!`$?D>?ra;FL6G9}Fw87m>*c2hI6wgGPLjq=z%@*K8%{dN-(eGOzy z+I?;0mtgIjzZvyu2}seuN`JJ^f|xGu=@sEQ81xaJT->${v0KSjET2cA5vS>Nk^T+* z^DUq&9BP0?(CKx3-2fPQ7u(@>4?~iG;;)*E)zHKHcHXm~7`g+!G7IMNp+mUHUL?5( zD20~CiH+UR8I<=}>_!#z+f7M0apgnqe(`plu`>AW^y&Ql;f@KgC0Bjn#Q zn4itD^uX0^;VbsY-$pp62`RLb zQ!wb=B$QY58tNI}9e6!c10;!qYw!0}!>`sA|0r@5`0shARkNoRDw#gCf6Quvg@oq= z1@VZQ}jQJr2_L=V!-zV4#TSJC%yVu8o_GL|WaHKv>4VxK0mC~e?)IHxS#r8D0FOqE4=kv3!}tZ-mWn@}z&b23A zCIQv$oe**1ThxA!VbItcMkhsh1Db~0%H*(YKA&$Fm^y-P7ck;e9YXZhia# za|dV%?@r9%rogfjaRlcTYzWyZChh6d zj|!3g8sDmxKG6=E;-NC4h6B*E-@q|pWDI^?H9x|=djLK;YB`LG|G_VB2|UfySEx??kl^FV#@MQ!k&h!J-RJ(iZ(D()GZe zPWpXWD1OTd?T`AZKmq9k8%}Lv-C(^XtA4zE7&aG$L!6Zc0EX|8xy=T^?MH#%ejgHe z1a0((Mf51(3qQQ`{n?8 z-)kF{Vq_WyBKBF&DTM+JN(?PANbV+moDI@n2Em>u{9^791^$qY^D(91SJ&H%#$`tz>{Oh4qf?v?ep$05`9(PHWHo)VfQBEGjd{E7= zzhuQj0C+p;?u?S{4X5?u!o`WkMtyZ?;TODbsug4 zm;Lwm9zQY&p-YDyx)zat6Jie~ccb|0N&Vhl-)h*Fy172n)&S>@Y|fphZ-W3Pp;Eua z0vM}FES$Yq1wWM7<;-_bpf@EJ~%phpWKqcQa`JBk0{Q{Mp-T@zO_?d#zDQwQIn zy#;WoP1DDxydCtlXKaP|o&)Xqm!5>}b#TpdbwDc`y+4YwSx;@N23zu_q~?=D5N*;Q z%S?I+=i%<1uz^m18LzyHLY;81lQOy?GX{12jiJ7 z>+ybRLe*e!!{R49p%PA+%A}pUUk*$LzYi8O_rSih`xc%*YKGhQrS2G+Hv%7byIhY^ zC;X7R_iS@|9$pn)={h_)2Ol_vayb^;!7OBfONFNmY?{7_AALlEKIbX!@Zm8io_07N z|Dg{$jD14=G$}B5mHRSjfC6_D6|M|Qw8Q4E){bM@J+PNBuNLFi4qmTR(mYMaVST3e zF=I9b{GWP9;{|(w*G=gB+n;S zw?1p-90ZrBhrdaEh5WID;aJ@YWNs+s=X!sFfn9fM@9DPyM^MJk?D2Ns`pjG4=UN8M zh2Kut|3iY{@6nACYHcv!`dg#rH3^Olay|7;>WBSHFIGyCe`ycCvn|kGc7Ur2!cI4+4D*+PBY2z?T&M)M#D)Xg*Gr+VwmtCHDNq8$a~FGYT2s_%li@w|)O$X=D!Ou78E2B7N3hpulZ z9y~BNqxAN0HSlqLeqcc%`fbMzbKdFQ~v zUxkk;uNIV1i0 z3o{K6PZTOHMtrOj80sNCsfQ-^OGhI*TA(@W{LoL2LBP@CR_pI{fZA)9A(8F<@WkKQ z`VNX?&YorBJp3ge(nfcmN@1>ngFe?MPN%oRu@3>o!6;6mlRmyxYK7u{jeUF4zYT%B zqC)$vhpk{tIvi;CehkF&4btj<4+4G3Q0JIrE4Y%wMx}4}KuXnh2EE5<|LG+;;kr8^ zFVe*Fi1i8u)1NblRG?5UfHf_Mbh}1dAG9UxpQt zVfN%wc0y-2Tx^)ae~li76C;l+$R|hOXwbIzf9%@e*Qjn9j9x`xm>9eA*bAmL3#NP_-4OIG z?5=+95Ty5QzRGv%2S>N5{eQl9!K`F-uFJ!AXn1n}k^626SOzOhEsqVt*^e0G=voOJ zs%?IIqr4d!E$e=2S2RJx7rJ<+jA~HZ;s2#5qy+e~3T4ktHG-+wOk?73HRxn<2xO&K zK#%HPlU%(<*lsoPUQw_dX5Hor|9GQ)dHPhRu6!Z<+>Es&%Qk=~w=>7(PX!Rtc`ve% zy%H$F@5El(=R>r9=4Tz_a=_;F-}6qDL)0E|dXeKrke#2d&OTcO4z-yp4+cnZ>e^R7 zp2+?&PNoZuM}$`lN1_CK)!LMIB-tX$BL47ygOp{L#8GbCVODSKoGj zk^AuCD7cioVY6510rRYnm6Da+K%PkXrsh2eAAZw3VS73Z{9ebz>6*%+KqR?E!4Ab2 z+N@2fo3$WraOTLD=On<}kL0aB&j-bo?dz&bwIG2#(9!BC2dVS*-Gw>NA+>y4Z~ogd zsCVreoop_Gok^D`53Lu$x0cUs@3{tHLs7k4XsiWf`QGapp*SH-XzRsd@FZBwMvGOy zZ3g(!uJciw0^$ujm_IMI13_!CsNv{K_{ks@e`#AiytW%|sTnK-oM&Fy(&G-e5?3>m zymuH9oqQ4&t2*H4!rRqWbWT`5@z6Wnd>nWa(>K1zRzUHEqS=n57HHIe+^74z7aY?? z6W@RAM}E#Bv1zUruIRdsOzp3S(dJL&q$?F56=PK2<5L7Q>Q3K{*GeHy?Lmm0Q!DaA zzXcYN{)b(*sdAWYhKOF;E9J=VNBS2OME#zJ#g-qgozI#;WvxbfmsJVak@EWt(RY}M zY@u6O79=pc<;S|ycpj>Idt-ajN`PsbhsSgDoq?z3YCiXYCV=(Wf;;SU5ck+;_VrXT z>NPnWo%*a0vEOngX z-`=D1)<)f@2fMRiSIaz0*P&KO3jaRt=-2>Hcycn2o_Ps%&*Fc}7&L=ZTpdHbNIQh? znD7|W&jO7pz4a1Tqy1P4wT#LSm?>3Y z{Dt{6(?2EPwrFxiBe)#iUO4`$TBH) zYIXTqc$OM`{oQ+XzVekttM619?CW~?%*D3`a7GV&M(0X_kkH`cveX2PYNOfDe7m8s zH|Dp*=SEOg=b>R#XoOED-1$4+*1-D!|2VoE;~*upkTaM%1RpPy49U!lf;Zq4vo5%HXud1_&n&o}{-@8y zg#@!P=N{JV=>)TY=JN6H{cxewgX`D%A*d;{KIPw71A3E`Iv0&sz^dW>^!39DuzdQf zt4ym6UTnN8+G*Vd-{;;3{PVgFrrM)gd5}M`);#(uYl{r_^S;vtqaA>wZz&<#*229% zU(89g$gX;i$|&*Iz^zxK?N#Y*pkI-TuhZ-Ui6ajqtlBA{zjP!e9DQe#5`APmaAy>z zKdoMABej5PPxbcogDr4PW#_}ZJjI9!b6WTGH{A?m$N=zJ^mJaB%-#?uH+_vhc{ zC-%UBdudy2*Iz)6ZS9`zYRwSjFeNAOlMJ%EXU%`S>xLoEa{g0&O>k5-61T4m#o@Z? z>hhgrAUqPvbEv+;^_O?`?COLhjg3ysg90k6uY28@2VvXC z=H)PQ7f1{xJUNcesj?bPoSn5hVZRxjl<=`JaOS^zhNqD>|N2~O*9=2vylt_)ebD7`q5h@d z1iT-;yY(Qk4HlX|o-2QjzF)oz{kEb00z&1Ui?VEVfLY-4^P0WwaKG~4bM4Y5xNIwb z?On#wkD&}ej68@Tg^jJ{V7KPwTcs-1wQk5|*bB7JM;{B6Zr z*9J^Zk6jAUxsklycCXsVagdbFbxa6)0o&iO2G*hYHZ>7npZl%^mJdm^?t4=OkJGmI z*qY@-vw(GOmr*e&>O4ID;_Wz`N*Npf{$d!eeKL`#wQd8QvwdzOo@B`O#48&ub%D%m zNUA?=D}1%Azu>6R0{8jLWAC(fK$G>B!eK%e{JGl1yLYS&&Z-+)m^zc8SV6GA3VkOK zk6xJa4I)Fr>PKPyV_hKNSVg2M8GzT1IF^~hhT*aOvzP4`TH#Hlnp1*xJIs$;oj%6V z18WXUw`4@eA*V>Zo3W<{o~gE3QVx#;qgRCvmtrR*{=B*r`E&$=eD3_7_94Tb$3|tM zr%>F}aoqIR%~_z^&DNVH*b56$t_E*cS|Ca$|FqWGVb~$`ZGPzGFhup6_qz6>bFCzy z0M<+B94O&Qn0NyT?Qf`-W9Lg~yRX_ubVTQX);D8#*U@*2 zlHprrr#hhfkoZ4VvQyxud(eaX@etg2M|0B?`E!fIzBq60K?usAWBzoG42E6)F2RaZ z5EozPjiK+oE(AAoKXe|6<7uwQLi(CRuRb0eHVFxq-uAfN=$^`jctZWF5s*+wm-_yG z9DL&sopPaT0lTOM6NcPr*kY!kTsqYaUuyQaX<4HE{@|GWd|Dq&7rj_*c|8bsHKk|A z-Fne^X3GsX@j+;aZ9;cN27tRN?*&1x8{Uc+*kZf7U^x%^p69oLB<1T^z{xR?J=wtZ z#;p(5?SD6`8%;oUAq&_2++Kivdk^!RX@fmHSAV^}IRM`emOOY@Hx6&sUFBnFd*Opa z(|z){R*>7NdOIzB4BA#-+KO(H;m4WRiZ;7?VgJ$m7XfMAF!&)2}DCc#bh6Om2)#30Jy{DeF!I<^CyWsG34cmy)YN$z`ac3dd!gZ^Rhj|X1=*+rzRlqN51lY+yp3w+t;t(Xn}irf6n|u zdSOy+DnA|30-Ys;_Yc|ELt(ks`lq*p@M`_({5y|P2z86wytUp88bw^Y?r2RwuKei$ z!BfqE+f$lc6+i-S?-M`okmkUYY1+|vq8Sd|zONJI&wo@7Qw@;yA=|Fan~wNBl6F4P5f7{5%`l^3uw z-)CR`y#-A7?LDcX(FE0BSmmcUJHhUOXnC}93;Kdo!tNW@4*98g@oVTFOro6`=AkhF zTo!*m1n+DC$#cxhpD(n-ZZF%@j{J|oX{J`2y|@bA&IMi;H7f>jpYStgZFA7Ln@;5P zxmPg0x*TfWI0dcp+k4ACpmTwW^-EVIUO@^R6Bbu#0?N-u*_b#Ayqyl`;}|AE%k_r~ z7F-ixcWPI8ThR*;J3Xw(&CvwLBJ8<*Boh2Qf6L`y6?%V>e>9L&LV`P&>ih0lc0#J= zzR)hsCWu+Los%nSfC)E)O#7-~@M*Fy;Xr&l@js%Q|O2k!u0l zZ6k+Aabxgkz2zTUDH8md8ogzL;(&tZdoZ5|FMx}irBVx>Z)(?=op}9~1nA;wg$!?# z%>TN$DnR|GB7ZM~{7(rZ@}b|J{{NwWZ?oRxk^Jv2D+~3vr)xSKM0A%E-O(gbFHzF) zkT3>4JsO@8>djP)HIRC}Gm;V0qv6IdIytvU7B>tNq>$*fFd|#X94$_N<0!hYiE%{f z;dhAXGhuF5xUv(jC6&sW{yrNE|P#L(F%=Vm_`kb4NIaG!Q2>hmLu6OV|Wa& z&uEBYoR|%MhcJ%G+=d2ABSlGT%`@4=(O@}BbaM7M>`)E5b(=)D3v**}S*F1nFyd|^ zqRDtwpk0q1yWLDUfnh>JS@c+8Bx^t*dD|QZ1J>!z7Myoggvx_y96Q!|RrD(=u4S`h zYvk=1C!;>PAsQuv#|Sv0p_l|`JVufb7-TfX<~WluJxNI%(cI<{S6U4oQ%YvC^1s6U z03+_)hhxT~Xs|~Dbh7C7sqNj@Jb6_7Nz4u?FL0y7oadRb1{%K7q&5W~9MKs;t7_=5 zz+@IzRIHyf-W`S`9>aDBw4iE?eu9Uo`StTF{+t3%*V)3Xc)uP^W9l7 zY))vRlV03y?MwjXwrzSjMiX0OMb}}4Ukjim9%MU<%?V?Arh7(8+0J8GXtl(>uW*SW zot~mtmZ|RQ8TK$tZ2ON12KX`0j*xA~nBw&44U(=Pn)KR?23+VCt&EpA!8gtjTjRj= z@E9kKXe3R8#oM<^;Lfj|!2&rGyo`2i!(pa-Xt2aEJSN6;%?wlG!jf_%rL~#%BZ{~4 z@R+>2xrGZ2@eWB+8cXW3^s(i>KaJmsbzZYR-*PJxBkcslx+^qTHs&T{BpZ(|-4Y** zNy%b1-L`jWh)=ZM$l6>(7q`VypW)7LTw=&##_~N<3ouOH2}e9s)xwKmS@PIg_hAwj z9~MW4MR+3dciQrmXP^t+dKS(jXdQ)gn7{A!BM5UfNlFntT;9@Pbt7$xSPje3e`v7A z)#%;f>*zlC8b4aSQY2@u8zU|8uOzey=mImb71L9`j>9~KXt53*dMxQ$f|oQc)@|Re zatDVUSNVU+I}@;`u5IzJgcCRk2_ykRh=2hBK}7)tp;dE083jZ{8EO>}6qFz;Dq36P z3@QqaI8<>)D;2G_=*RHWqfG;5%dILy`0P|zI!gWi>C%CJudA2}u(g^tf-`pE(;$B9J!MayiyZCr0t3wh zZzK3}L3k#neH6Ovt*;MXnOU;d22v)y{oSKgv$0XnH9ZG`*c8qWwS{#T20i4!+-tjR z;o!2tkh1!{+XmZP%Z#7_wNo>yJ8sP$(sF9V2T<4@o-R{C&FcA}>kb?x1L8^z9fcdl zX)yAOSZID!32sHcCUbGGH4ZEPAU`M&FX@%E!#KftC{$u-iJi$z8f;&Pv;ELUaWQ0$7n~4vHV0VUQp)pR3soZZ09CFGgNi=7Y8;Et45Km16^SDT{Ru;ea6OQTFxkIkXicI|Mw;6k?QCeZ(JeHBJE-3?22i(r(&zW=&}mP>b66u4M>l`+Wd;KfJ1mR=xb*bUu`Iheq5YszYft+ka{|(gK&!7&s_F zkivkqcmW^BK9n$qUX{pA1J%R%6h9J2c~K#cli@3zCCT00 zpzUEXdIw>Cw*P>;IK`ZG;4(Q7V-E#Y!+H+E$v4{`3p(c#d3gDl&+TQO6rFROE`fI` zjpY|KxGf#I668IsI1vF*P`5HAbeG}=4PKv0AbnmBsFnvp*|b%e6l24Qzwq{53Cy|P z0~;5JwOai?rRmNAjf(4$2jcrmer(WCZZ$iEHh<^PlT#Ty0>}1tYz1Q#GIEs^cK6xiG9u?<)Bz;6VjLlcuNiZqetpSGM@aG+ z4wXkXphQy z29Kg1zIF3v_-tH1Oel%=YsBBo(K61iUgUccSvn$d@32pmITnST|MAy5o~We5~Qpcw+oya|#aP>en-^M4JJ(T8IQG@}p4 z5NL+LF$9+R{{@mEaEv|_L*SW>KSMM6a14QF2qZ(G7y`=>D26~Y1ePI?41r+?EJGj} z0?qtYkc>VYL!cP~$>_r|1ezgGj6N(w;1~kS{8>nbz%c}hASW#hQKid zmigZT$q*<;AC~C~k|A&mfn^8`Lm(Lf%@A1TzYEFy1CIF_mLX6Kfn*3YLm(M_IEFwo z|0*Oypcn$d=tDF5und7@x`JZ}JVT%ueOTtrkj$z5jS~CcQZj^&A+(G>B}3>KLd)pW zF@&1=Pf;@ZbPS|C8JNr5NbxB zlF_GP^r;zrN`_D|gpwiD454HQ9YbiDKT63EI)+d&gqk6=%pav>^r;wqYNjhnMxTx$ z)C{3u^l2GF!RS*n`m_w8VDxDjLci!!GlY)Or)CHpLueU&N`}xegqHcUlnkL`2rWZs z7(&5xMa>Xe=HE@p=+iNTn$f3Y2sQKXqGa^x7(&hH(=mjaA(V_h9Yd&@KTF9FI)>0P z|7l8wP%v+zW&Tr?454EPEz=bxL+BVn%jnZFgqr!IlnkL_2qiJ&@%tqDH%e= z5K4wnGk=znAv8=^v<#tS^r;wqYNjhnhEOnXqGbpjLui@*EtCwQVBSQ_{8>t-D>{bI zGym5p8A8VpDuz%qgqG2#V+b|#zm<|9bPST7F@&D!ijE=l%pav>x}swU zJwvD%Ldy^uhEOy5w9K0*8A8VpT82RG)!02%pav>x}swUJwqrNLdOsqhEOtuo*}eMSCkB) zVhAlms2D=c5L!l`k|A^qp<)OnL+F_|Q8I*vA+!vkV)UsQLdg(1hR`zllnkL`2rcvP zqGa^x7(&hbSxQEqiqWTL{wO6w=omu75Nd`{G5XX@!KV`^SRmzjv|7G;Li8zB|En8M zTtu1+cD%m108b@Eie`CFi*-HUMA7V~y2NPCnKho}JK%Os8OPwH1BZ9M-HBuL>{+`t z$LRL+76pgb-rkGDYrf^o;k{^)bNIJjZ`&^B7;n4x!^^2iy0m}s!*g>^x7#Cbe9->I z`1$Y8YkT!t$>E)BaNrnR7ISzVcXLmQIR@j*IY#ZzUt$s4=FfjE;~3Seo=Z9WArI!a z*m4X$aN~$>x6J=~{s<{1d)khl+a5NefM+e~Un@Aq?eh;k|G}DL@YspNyYkW;t2JN7 zhPHn(PRTw6ag3Y4JpQu9nj?|cwmyHJ^}|a{+-}d2yxRN4^H1krnrV+R@IThXqWy;( zFIT_c@KW^!RLfF$40&Wq27;Ua7BSSXn(EX@UJ|7T{i^FL(&Ks z+~TX@hzr5MP0JDI0gsO72val$wo0IfAzoCd0V;xHJQh!CFVh%$X&10~k&<3O2QUkz zGy_gzEk7cUYjKc)J}C=~$H5|b83X+b7r^BBMct~EMsHPdOy^cF>JE0apPVb92vW50 zpGeU{^S#WHUNLtBF=Y#7pK6!%rM1S~R<8WCa;ZD55hjZ@R#%iTV7IS`8)MMzR`t?> zT00X2Gi)Bm8*%7r6RvisZKF~%Smz7xi#6TbmB`Hai5DpsgCHThgCmNedMNH>2Qv23 zH3gJouY{c8@qVyLta0)>l@m^D&9;ld+0SnI$UHyTBi6WtFIXN$GZr7kF9E7j5Y56v zh+`$W8^_UwGK7cvPTyh7dAiW@@49pSG!kKgaFP6++j;jqJIz0cA-hgus4&3u;51QM z(ojI)WZ;QAxl=Vg5EEL~feF#o)-^%P-umX$s#&N>+@L<_uAM38@*>-&k_&@%`KIsF z@!en5EQ42drW$IP(!egrS2$ga?>Vp&#Abv1ns^yqZO7FF4WpD2PUvELi^FC9loC4F zpgTc)eiXR-3xMppkgJZ8){_wcFYgizN`%fT<`!f*KdcP;bUmmg4Z{1G$ zkIq5C%Of|OUe`$hEsxskXTga&*DLx|$QY_{eR0N~-s9Sq0|gsOXr>QWzJdjRI0ZlU zNs%yd*N@0Pr3+ot=NON@YY)dSFX_ug^*v6s#LnuQRlWimk64~;JlBugY8=n)QE-aZ zxGizNoFHB+=g>&|NMHh0DM#AJBR~Igl5-Eu#h3utcxokd&^`e$|HHb=lNd9_)v-fi zmt9zDXb;U-g-)IaVntKp?rpxoGCrGfA*F}r7OnMS8K2Bgx^Z-S2cB#bWi0Hm^^SO- z_jw1%dbbNVdv;ijybvCZJanxH`VYDf6YgEMTNCI!N+nw0Kj)da%JJ0s@5YUmEUAmA$S zl~qwn1Aa9_hvY4koh>x^Uo0geSiP z;o&p>y%R^S7~5zsKNl3hEs*3+c7Sf*(}CQw{8f}vV^dcYIOK&SZy{1~bbQdTUTgAK zIe>#>aPaWN$hBJ=9i07xLqR?f z-9>OHPr zs{I^C!`!bgjcYj_eX{XbKaTFB@$D}xwOl7yAX*vEbuKt%vb2QdZ-i3{z`7Yprap<% zE%I}y-{pL5qUD*G^HkyC+-ad;(@=GRk$G^k(~=y_nDWqB9_#jmCik8Ydx@$(vhh@( zi5^?5Dke|-WXqjU@cHWIm8@_2Z|5_hGT00YosRC{Yf|R>n`y4DT6%Oh26H2BT`Txz zz`ntv$s^4)*C{toPDJtKF@M_(B~F@ysp=_XpKQKy((u!g97Jt;Z@Ecjcpc>{)!c}0 zZ&iKc_1WJ=>C@J3fd>Jfo#1QJXPE8SOm z&i&(QtKPG|Z{PEH`N)r_Z}^+_1CO4-NlBlv^~qKk)Z)WIl7=h(zJ_An;;g%pxo_x) z5V`Nf*L=;);u+sRiN~~O!)I{|Y-%U>gm1qOhtf+QKAUynZ@1f?&DNSRy2U*;cO-|h z&cAJ2k4n4mGIh>nGp1o{%OJ#O;F_7Xu_$`*lXp$uyZP1a=F%I3pTBQ9?~d6It!2?e zI0et=ahdTiu75V9`Pi55KR44rwWX>JwbQU`{OhN)Rj>HU`7gfh{u71AJ-#;8aOpxY zat5xTP-8eq$u+~bxb)3iAj+&ZuyfYXArWAgy?YM&F6qXyvrYnS&WOc{=6jrh6Pmw#^wFL0arU`Blc%j1`*f$}7tS3-%mjxC zRux$R1NM&0oq{iq`L-s2^SNXdH+z@$!=MXq-5LqA&rY!A6#G8W9Ax2n=^du1ElAw_CS`4X55SV zjam#{=yEwh`bh!T?SXr~3ve7pZMuY^1vf({4H*TMEB6lIxrI$0^VMd{8)qka@d_){ z(?8jA8&jO*U&&ZL3htSM&!yBWGj{g>@bTDvP=&mCkz6g%R*+h*I_u0I^o z=A!xFMZM$85eo%{g@zVdUr8^`;$E3MxMCRE?Q!KYMEE4@YlgYRjpW2cf#tcB z09?GWKloZ0-F}WmSyHIQHj9q8!n8&Wy0>S`S!GGRD#the$4dJKJZGlp+qM^~w|^Ls zyD^>1yl4J#;GMbks?Rgm%BeAps+(6@M%{C?V2*tFeBb%uuSN1~F7s{M2a`X~tW)VQ zWMIxus%Gc0t4}v^m`@vCU(b4E#58h@LY}kB{iwAUeZNc z3&xLkT=-fQI*@bGp^E7Bgm++U|t%}B|wou}e5k)^gvo{V(&hB{aD zE+S`&W_VxFXCw^26lfPW`jUj<%o5&nlrk<#;JV5k8dUYy!mwBYrU+_KJ)5WU9QT$b zvq*b!hrgGUnQ1rQ*~EaciAzG&HmK~z4R9XIXMB#9%{sZgQB^*RbBDHM&T(4k{00?I zLk(>Zl~7G8UJE^3hJq>2M#P~TTq>zOO|GqUqv|MUgtMYS)g9|tYHPr_cncd<^C$aq zq0zO9u2;qI=1^S5ajLkoUe!9vH-xEI*`a>&Ya6jvCxV6C1`+LGz))jMT#tOnW&B6b z=8Y=8SXiezP{(P*0zw>Js5%vI5>S#tA&;rJ%;EH@S1njS6!p}g+PsN_Z&PyBLW9VS zGGrWA3rp)&hCCO_fZ=CTJjU*dxNMdIQ{dZ^zQ|+zd(v(7D*yTPU<1Z+ggCcBwbS4C zfFuSCTuNZLL<@!@XD|p8(+w*2?MH@T&QyacxI}2ctUm1`qKs#zeJQmX{73Snqr3e=KvK}LP;6l4Z>?-hD>l3 zmjAxvbO$LDbZ0J_HRc~d^=}F*1jAq*td}rohK`Qz&?xd28Zu8u+Jy)kRJ$|m?1dEb zYQNnMY^X~Cg^K)!?!Ams7eIqr3oT)C+K>sb3#76d_%-y$6q8yA&93p7*w>JLzOP=b z!-_fv($K7ORMKWPOb&yk-`K@jfco`)=A66HkU51W@@Yd;a0%sT;|kb#|Ecsm6NcXk zv|5Q)u%It}rG<7$5gxN)ER*M8J0_x@OoHWfGnU7;pVMqUvebrYzrJ7xn1ne4?HUBN zE|o%^4HM=2kXE7&3(#yebcGF*@PY7q2MovnN)&{r0NCuOsZ=Syh%UEbl1+ur8&o~^ z_|Q_Oo4+qm9o6AS(9cv>$u8KaAAOA6I04a)<*s05y=vr$J^?K!caX(m#lG3B^H6F-K!Z!1EwnK@;GZlF0g9=h|z^j0%we+@L{%7Le5 zsAfD&56p5~fww<`+GAFnCkYbjRD}w=kx*BW0p_k{sPZK@=q1lpJI>Rdx4VaxQ7x)d ztLVW3bF?{>q@}tuk7z8&zm)1}?jojc^3=}I6UDyAMzM} z0T{aGIT$ftqF>z8P08%}fpVqQHPDtCA)IN>e09o__IaT?w~-1`R(JzlQAL?E347^` z!G`=G>RY8qObZz4f?(>LIYt}0W}`*bzzcN@ZO&Xuh^AljnA9N5QV!4(>`b*OMLNt7 zkz5XqwS~~KKZ`o66va>i=8-qms&c7>#;_`Atw_O!@oMNTN+x+e<)m~)pA{AZ%@q;Q zP*H}yuu{0CSv8ecj<*HC52K+qHyf3X`P&rPc&ET4GM>8R(Qf9<9wX`wFHA>0RprpY z&#go;!KGlXMt_V#%BxUY=mGf^rFfBA1ho~VIG*JosL)W)RQwG5kVepypGAcj%_mq% z>DXEd!nE+L*x6M}ZPB?FI0%>`cIxoesUEq3MXu7F?Wu&@!p}3Gt7P7M%7WQ*fl8}G zqc+4&e6BKa;tSvY;kjx_20hh+N!~||trN9^P9djR^C|_4;=-#sc&>AjDp*;8!qhP+YJXW+9_6o8dxLpx1g7k{BvmM2eym(@7^|B~ zW62r;D2szYS1ZTldkU#(%35#Am^tSyT&q*f@t*_DwL$p+#$lys>*u6$J}6yF&{>pM zh2_x`4ViKs7}mx^i;I>z-I7}XM(8{0YHOfHktINb(xM!xDWBesttq0)o&}e{=KKg~ z5qVQa%p(R2b7P9DpkG}n7}b`5NK^zOS2?s|pSHTK z=wL8W$G{8Ls$MEUfU`y!yp+Yz)LNrrIo7NcX` zo7M`Z6@XgHLcdrEPg7~y9qY>oz^FouT@@)Ur?El%GvKK!T99iIG%CbGs#YZ{qp=y4 zP^->j8yGK;WI$uC4w`Bs*jSAajP{pN6JMZ)YSo2cotp(sB5$xp8w82E%vNp;yz(+? zrbNw_?;lNtJyy4(r;Grb+ze<^fC)S zyFmFr#)>splz1d8e}+lnx2LgK|@$J)VY@0db4Vf z_7qZe&rqK&3VcPQE-VEaQnRVmJhTT&_)Hd0LzyDmm|Dv#7Q@qu8qnoB1C^TxFQh;4 zX(5+Jjp@Q7;FTx{Yn_4fQZ+orQE!CPAQ;ICjA_qTDt<7$Qdh$xSDJdIl4Xg(L{Tcj zE|*mb@UoDPHj&MmrO7i>y3!uU1Uwd1fk|#Pw5U^1r2x-FmGDYYL}Nq{^;#v9o1&B= zjAGCqRzqE|n0j948Ue41E+k6I7w(1PQkT~q+=tT08P2!2vTNWfI)ETY21 zic(W7vdomS5{t^9O-+NCt$Ce`hUzBXpFyn>W3Ru+O@W`Vhs25uA$A;_CIf9GIEGp& z&ecGDZ~+x0#^zxMcw=0)07cZ$l$eouo1nXtY9!Q&whCwXNt6W-vFUZ#jcsfZ4@ERO zyK)*sir_K7hT2q%v&BOkz;y~V?>g+2!-eoz(JF!mig+>9qeAP7v)~cV9@BJ(%fJY` zh*jnzMUXKV#XWA*!;>36VN&L;3orZJz!UTb4;473>T1zoSa(y;PocIy#!0JQfwJq_{Pm(d%8HT6O`rj7 zt4@|-OnqjBilG(GG)|g;HdRKMSt+Vbu~VystO%_c4m>3^g#mhkDtum$r3m4vtB#g1 zpGz|=u-pP;)-^ywu`|@Ne!sp}jN@1=kl^$zYZX!n5=A_X(kahoeibzVqf9YzsV$bQ z!`Y-oCDVzZ-ZjHki2=E-(1IScC9DYji_Fa&YJ=UVZyV49H;J^k>fBW4T4|eMYRlHQ zRt}B9@o>dfYzD3BAZS#3W9BjxUSfjk1Y>woT!QUGE! zZn`)dGgKX}!9LVr;njTB{NysAbJ-58;p6mGL@nXq=%pEHrI;GWRX9r}mB2+$O&yn@ zM{0E~#4i8~1eAnvDMkA%z>X@{P>tviWx&m0CNhLfej8z(Gv5q76mg2`IVfX*qRBBeN#8p;bPW2p?i-$@CYwxksvi1Oe; zm=?G$&Q!8g;cbr1EWm8)Qg~QiM8!%K1wwd$M$DC!iKzk7@@&dNirw=d*A4$?VQ{4x z^@yv`3UM&TP)X0#SQgHZ&x%X1Np8ky2ReAB$e{5f$nQ7WU3NyC)3I&;kLOe?BIu-di~ryT{ZTblOE>9v>^i?iC+~BiIW|K$^uW$-7Q#cE3@wK$C6fwro zEGrXIOU=~T@Cu!Eb1*|KHbcd?1!qtzUZMRry9Qx~c-l6`0)Lm7!gJR$G;Z|16)BP` zFvD5!SxyEu;x(IAEypy~5?p;ouvO70peYw?$JgK!x;Hh)B1c2npdiPa zs2^^mH1SKR z-hxME^c_AUE3`!CuEAwjp@iCCfrh^RCs!pdeckYndfuiKPo_{xY`ra^B}_@-+m6N7 z_^eSvg~)KdX6tNin_+|P3KCF%iyWnp4mpJ_YiG7%%gQ;eEji}1F9 z)wEVjJrkp?y|7e>rRWiGru#~UPDoN-K+UksjX>Gx0dq6pS*iva(a`{Ug=c&XwawDC z62d4isxajxOp)1s;Lb#Cn?hF7cGVT!wRIlMbCus$3lbj~>b4rY&Oua#_5B zx-VBaOTbc5+8r#zs=x}@4fjPFMYW7NZmB52Gj(KnG}Vv&R_PvEpd~7!m0iGc6qS6; zRV`IySW){pII!|taD2Z|XuE+u@$A`*`Z8)6d3b`$=ue1V%&Xigx zFJ|C%c{UiLy8upVDRo>f(y>*;WeE;}r?pB{aEhs<24@LI4ps`WB`9#T;wL30V3Q-tsX{%GhJ#5FliUPQYexy+WW^g~Z z(l*5s>Wjsw87;KQfKMG$;QIJ}aUOJ26q&$1brsxG$kB}|s*TaTXz>eSMZ6qdx)#|+ zn8HgmNo&^S>lE4MD5nNLWGNEL#u_K?m#A!fQML?z3eH14$J^3=wv1G+q@rvU&U~;{ z)2NghD*Y8&s>If{v?7D*-6CVe)LXXuv#BNbinB&~*Zx&WT!vfn9| zm*Mk?H+BlHbZbPE#)f^Wu_-Qu*Vu46$C*lMb19{sqEH%#oEuJIB@$>6<-zMzXX=#= zTJmcVc8V25m1NYKEI9iry#wm0UH!-gPmGep+Qr2QUpniFE;Gh&7i4lPXs@O7b&X@yfHx}R*c0?N^7P}a#F;U@ZX}{@(Vt<6m@4nC z$m@>oN@rW3P-yI^EL!GG!*g4)1lJd>*whHrDb8#>MXL#PXZw_krcPJn!7Fre9GT9X zGT|x;aTaokp%RoLEjsiV8Ja6iQ?}d+XPnzhL5V|#^2hI<@u9hjZMh=LifVe5Q$ua! zvP(m*qRJ8s(22DxDy3j2i;+^}?JJz~v(VTp!JuPiQOARUI?vV{{RZ|ZS3%3CX|TsA zA45?L{Df02Rg8=8&Pk|BV9Pk+_@H5gZIBQIib7K?y2c79Tml;?bofLo%jUyeTW2M_ zL<<&(Qrru$t!|c>A`b^#sT3YzaeVY!yj*7-pw-=Q?T_X~DXIkUvbG4Gpvy5Rj({3j zo-#+bVDk{y5c z>QWTr%nnF)p&H7Q8CPCx=HRRA3LBjoTG@X!?pgV+WdP#qaaBoNfR8gJ{{W(0d2=VB~b?Uo-Bg z*n?<)8~XD>w2f8*Jirb%+i-A$2#w#OFdDAB8t5PmSEkh%dRKGA*&51;Ss;k1=E{G) zD`bEhSGrD1^<;bnQ6*g2Q7x~Z##flc9yF^p9H{j*$t*FjZPXg|YvqU+Di_;nHMGCm zX-Qrl<=AHdKP=<4S)rKc61qSzy5zJ)37#&SW@kLM)X(yB9nWp?4sN2{z-ncLVgIch zQL22A;v4N!o1>>hQ#Bmxd151<%L`0qmYlKi)+`%TlVCcpW>NQc$Y$t7@nYx2b|wq5 zhdC!oR;DcOVav%03QCl&D_ZQ>cR@~QN}}1;n#FjI?DB~0MDyLwOI*US_PhNoK8pA6 zJ=QlTT5B&mQowVaoUr1ZYJ1BQRlI(4@2u!JF;;HqzC2;&1Z5Aai$!NW3a$z#4Kh$% z%{xD!XryS$Sc7giE6;nCUKLH9XJCCt9O!x8*Cb-y8S96gXT!#q+_R|7xbQaBc{Xfg z(XzqM7Ob9EGlAXop=#&kX%_pEO&^OLhS?b>1PvV$LE#yG_LBUvVa}0~6=SI$rDfRx zUZ?X{W!>+=o&p=-w`NU&gR-Y@a7fe<>4u{YmVM{&Llf=SZmQhvFVO?iX%27G!VF9`SnHo+>@--*?82;qN}3Zs}X?*l+Gl z2Y2ksq*xencQG3J3sLHWvwUT3UU4cptl zd&lmM&7s*72kdsqO$}eP`Fhbr&x5JCQ^px=sVbZ3b##BOI(^ZW?`kFvEb$dioqKP~ z50L1jy)!&xaewQ(<`=x@U+@i|PVd^P>Jw;rIrZo59h2U=zJJxsj~9LTH07c2+dJX2 zKX0(XKVO^Ny?Qpw+izP<)XqT>gOxHmUnsRZhI>{xAn-# zHR~4VJG!UZIo2@$*#EJ!bN@$z%kVhCl?|oW9s9k{4^5D+-FSZ3UXM+wPPINA`#-8X z_J4e}g*~iw4(|V`5BTuFgne(j(e0Y{%uJ zxqc(dBbNC^?KD5;?CHN?WX!cuyR4g>gZv-+x8`5p?L69L_-J-lh&c>MUKAF#+HZ>&1;Ho6jBUIJULNMkDS9F}rP~ zZY$$|ka%H)H6Dy}U$@3qu@)y&Hi z+8>|2fICRSYnh}TJz~p4y^6+vC`=CY^Sc-|YoS%~%H;VIQ#PHsuQb^B_k#krT`QD{ z8~XO_bC&P1C6<>mX7T2mX+{IjY&un$@ktcy9OCnpRp$AU{@a=^PYP(=#W;F^|r=}cAG7_U!~UEL=QedkvC-cOJ5veoJ*7T{WWs)%~n* z{`UJ`15Y$fk`5}`^1b!w4S#z-m&&@d<#wNApB3ner+(1;n;*c^`;;g-V~5??JHpQv zow4gX&3e>#cjY&{FAO%BJ^{~obqYLwu{bxmV>`+~OV3nxJIYv3+>TP2qeA{{B|zjg?;&(=+#vdiT(n8=EGVq8ja(Z}=XMWIk5SpPF^H_qMuK`_{B&K5#4>zO8=ukwFhUznt^s zqH&G82M&Hb`pdaDo)|SB+4uL_1v&47Q%oHJ>OmYVCoz&J_y0e&-c+9zX(>Eif0 zd*@RZLv{Y<2Mc-qvQG&oXDs60ufFnDL0{v!m3T@%O&cZe6Mqo0`19aG%8Vzf%gtNt zxOD@+f5z$CJKUUHo_;9kv1C1a25kQHJH`p}Gve5!NRO>{qA4k7y4`hK=5Xzf$%JzZ zyUnGw?vCk#6sK~x;k55rVdi3Ii~B-%^@JMPz3iA_J#JNJzdiJB&f~TCVxMW*!;|dg zn`_P{1V70+w{T~YpV;3eT;jLUKsL1~#@{pcu;V+?XA@<|O3$Td#t~4z+roc)ou+oy!$+R$p8b;Q4WWt~zs3Y&3FDtk32kN1hFOKfH=wA7ec^=+{!adG`vFmSEEMK>)Px2?B zb3&r_dc4Dp`muATjC8}{bwBn=jUE2ZZRtkbn7VZO{!8!57H|A}V{*|4{7`$t{_mW& zc5+`4?1o3f3d=$tyuZBg@^RO-o1RSG+kbm%|GRw*H=kebv~;sFtTt@z=C3acEPt9* zF(tA8mX+5Zc>OKN@SAC$Y*|*vo)UYg$Z}55lt!dlW<0-MP+eT;%qY4ciYnBTpS1z(2utV^!bH|>Uoiy&5DRSx= za&>uJ<4$=+QNX~9S69t#+?9}J9W=DpHQbXo+41$};1SEOtvispr;mDnt@6ifK_{aY zyXEc=owVG3^9T7t&tv;j)0bcEbCJ zzv%~;U-bbI`zwp+l={sjj_m#=j?>B822PD9xW6y9OMKvW0;IM9bRO@z65mh8fs72{Ys; zjo!0Q#cs;Nk(D-6oj$|9cyY@j+hGXZ@-0?J6AnU?l`ALTD( zcDjP!5%|xDzfKzKWPU4(g#LAMI(^q~CH*t}uaosFr}$fuzlqk9JTYx*LZ;UMHsh~5 z?-vpORR{jk|8^<8!#lIFf3ffmPybt~{|NpI#Ia*2Av1G&YU0eyj`8yz+OPct?8(fj z)6t^e!^hmj=?T;4up=mAPQvu*Q)ja^nw30#M(WgbHq@hkU$?&Q_H4eNEA)%VpW{F- z^o@)h5&c%@3@UFm>Bs(f`Ud#=`i{i^?9Xst-vPdUli09HzC$NL!S zh>^oO@A0#vl#cjdU*Fljm=Axmg$xVBTlU`9H*^4|_Zt|jPMaAQIA%bMNBFG7pfQ<= z>0zlOQvDKRM$MiSto}JH%_k#K9hsIKIA(6}=1GBtFlZ)#%tn9K=5X}^r0n-mn>85cdq zEjBtbB`MIKZNto@=&TtNu^q{CLT1KByQi^r4^EGq%eFNxaCAqWICWZDVqoONU)9~+ z2ix{@z0>_tuGTp z8w1>8S-k{$x+ex^`GgK-_5M#iOz=pX@^kyu3DIL_#0B{LqQ2o7q^=VJ1F)|G=En4o z^qhe8XLXq95i%_*C-je;(;4TUmJ}Gk_D2e<2h`(?#31a)pkMXd zoVe(KxrrVFy3)VEP5t0_C_L=iv z*poUj&?hBnSZtR%i&JOKij5iR5#HIqf2a?W{vkg=ofJ6cXPy6!&HrAy-?g#08HpYN zZsC)=w0pgF{GtAxJwcr|xocbVo0AY7-l^mNu{yaYvEvx+5Pd{iY7+W~33G641ZCp5 zz;NtijGKky2gA@d1JhE`m&{4-^eeNIqXXtlQ2X@nu<7);veTjO^92{e_64^3`2G0$h>^n1TREQ6H!9dm(5?ou|DZi)>&O=xqwqI~Q!0RM7{lI_7 zAN~97XN&Tin-CqD#!B%Gnafr^mi=HO0y>n~S&7cej#M4`PYMd380+CPC2r&}e>Odq zkIJ0H&W9M^(GMd#JAuvP-zgs(#oly$c6?05PrqNyL!I#?>)^p4S7szkpEff&({(~d hhHJ-!uKanzR(4M1R`c*#_P77Q5dRz*;T!4x{{SqCfdK#j literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v3_universe_expand_weights.parquet b/data/etf_trend_equity_2020_2025_v3_universe_expand_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..178c5d52d1ef21356a090f13843a9637cb714982 GIT binary patch literal 45783 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 Y$BXbLAH3D~zxYp>PJ#22#oqk?2N6{sYXATM literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v4_vol25.parquet b/data/etf_trend_equity_2020_2025_v4_vol25.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4385555f9a1adc45cf1a5b1de83a64deadf7060b GIT binary patch literal 23202 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 BvSk1O literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v4_vol25_weights.parquet b/data/etf_trend_equity_2020_2025_v4_vol25_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..255c9b72d7079c5fc2b38acd5557266c9d6fb592 GIT binary patch literal 45382 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

U_NU@*S%g$Xi)?M;p}tcio>-cStc% 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 QL?ipkz^i&Qvt~86P zr!Bn;XVHs44*&k6<$&axsCs(R5lGL>3hB%B^66_EO6KAm120XHv6%}FcbHrT4&!_{X|0fn2_GM>N>QPPw6 z%OsVvwu{`9cEM|F1E@MW2Xpb4^aRqmWXxGsL5ih0tlKG9jyw*fxjC?vWcKeYa?CBrr#mBRUBpUnx26s zL6bI3h$rZg45WK06>nuEF!7odj@9?0;cb@$PK*RWyE_Yq85nH9--h?h37Sqgj>R=@ z;DPhbMTU-joESO0hU?|`M=tmGz6_jhGJ%16&F`c9tKM^QeP<*X<6VsW{5i$oHmE~J zesmmSjGNfl&juH(iMLE}e>CxP`MoxRE7jp(6QOLdVem||DM51#9kiCDBOOka>X^g_ zh7dG^c-P(1rnvcW4dw<$P<3^_b`rF=9ymr5hn?pf&Mu@Ymv}IdPZ!r+1k&YHGOk3t zg6mz^1SiuqVDRZ_>o~d-G_gc{u2y&%fjf4BG1Air<-=LvuI{Lh&)h~j7l*5I!sJX1 z>X-nROC z+XbgE#NE>ncU?o=*9~!QhPYcB$xR|7MPC6N{d;v|K5hoSgm|QPiHS>Q^Kl{+y*LZw zjiSg{&L0_@@%_D&NT~ZAPW>Hb;>Y^E2SHn#gjbK{8IO-C z6%UF5WTGg_M<}nIr8cZ_PX;b1%(EMC9K5$a#td%Xn73+9Y zIFQdfgVVN6xO(yQb;(2HCMSU|E>edy zIH|!nr}8{BcHwo&Uc7$(3y$Gz8Q9@2#90WN(RN4R!=&SWqNBZx*!ALFfk!qRXX7~4W5GVE~ctB{5Tn>+w0&;)!BeQ zR(OV1<(!M$E=OmAu7j&YM-%U%CpUr5jnj2;?C`s zf-l~#Q%x1ZX>a0Vl2%q_3gNVd_wsQUl~oNF!toNw&@3EZFl0F+LiGcu5GH4bB%JwL zcU4?%bQ5FF05i}wx|hUhL%bg{D3Qha;R`~S4URD07=w%hP5(+|yfF!n28OD#IH7Ek zg%_Lzik$N0l+73gUW789-i^)bR9$fGmBip2Im5w9)kYkbYATLP9aYs9$EWPC>d()q zP8%F1x68~&e%D)i!%!rm#}eW`NB9b_jgJ^ z^m_|e<4s}C$>A7jhmrt|o5DCd-L?97x;vt;es4DWSWXkrNkFH@%z{73N;i89QYh@kR`GF(_p zg2E#@%Pz?rFKM#IUIVOS6dYmBWLN}I`Ne11Ww{W+Ji@ZZ{u2Y`!Mq|2V*Uop5I!+Q zs|bcgMF{^iRlIL<&~d@(S{sNJrYC69x*qH#i%QNez7rGN9)u1-)mK~;PS@e&r@S;~ z)++7=Nw$f`-b2(=66*G;cFC5iaOY3c8XRNw<;>--AJ$?8vd4*+7_Knm?>avPcXrhVFv!;ZFMCLBvmz~#F*S1`me_&#yE$8IQ znQ-LiBte~J$FK-iaFxx7P*{lTZ=T8?_b_o4`&64YPPG~A=*)<`y7-*D8LmJ3RN~>p z`6y-2c3hDfj@j-n+S8WB>w31QF6l^Le$mi-2$!I?^0H|lm!t-+>8pz(6&)LJ*tHeO zOV4YZ*Ko{qxaC%TO7e!&?M)>?oLYCj>t2sfwEO1ToNdi1)~BWBtUH>!<3aY;#_n6| z^Y#o@9G|^LYh&Sl+$N{j-1+P5$EIifZYmoSy zwl>?n0oUjKT@SKV7}_;A*XnI=Ni;jmBeYJR$kxBO=#0$09bK7@Is0EdG$7PaBT+@) z{qX+oNB4Ityq;Bf@cpyqM|pdnlm;q%rs0~bP>I&$v{l$N-1hn2!zx464JHa6`g#Xm z_Z9ezvXd9a;e%B1rsbX8IG>PW9RB=T&Xm(-73yt@{ojo=Uo_e)Z+7UzXjjhm)_yaE zNAVrkR$f^U`2EwXM|tNqmmT@>?c@8;Z=L{?;Kn@{cb_1tpp3o;d#emX(H1wh<#B=O z#B1bgaoTD@2%k<$RhY!=b;Y4NSMiA$5LXyVwP)q#@Bc8`rcl9vBa>g=D&an;@Is|g zV)0q!B~i)>OxsxfgW@Vnah;^wUbjzMiu+jhE``U+adS792HA{)d;0L+&Ys(cH>ntk&UVgnttLLpjyq>_y32YC ziuShV3pn}s+FXye^yP%D?7f{2?)!~(-%@!(!?VF2VliLCrDY051YLW5&+Uyx`(O2! z;8xjqTvqwC5iaY{$Cr;A6(rTKQ}1jhd_;eI|NLh2u^Bc}n*N-T#XsF}SMS7N-%&R1*VYEqwp1d+<{_@r^yOC;otfu{hod7tk_+60nnnA6d@~sDy}PA0 zb`J4FC6w>t{#Q#Lphp(2)V)uLpjo)n`8>xXH*e2l;sY^8eOzquLAL0?8+=aRKM@bm z6XJoWu&lq=pv4cyf`Bjh$it@1wb-OQTysuo@#PH#@19yq@f8>NsJ}q6#7(>8#piH$ z^?lKCZ8biCLcg(|JDbZ?;;6lMEu{Gl?|-FoUt%NfntcV_-rU^O&p)?nh;pi8fx17M zZe1WTf~TyNmsJ$$aYlRlix0jhcB69&qI@s9Zm5Jxd>ns(2aZY(^+_3Fjsg_ijByY9 zIr;U&3(iFV|HDt9soav|T(*+>zaK!`xwQFlu#SO=iLtiU>UEO%YAPhez*ib09lUKr z$cP%~=ox5B3sLcHgAi3$Us8xzfpnxTsCvedGBg~iqa}nmkt>if5hUb+w6#1CGM1Jh z*7KR@Yw=&l*E9oN8ALTU605|S8R{5Fug917AeynUwzi}U=NZt0jt{^{Pgje7y#!t} zG&B+tq8S+K=t*D4sdTj^E%nNVaeCR|Na`tZ@@{*iKp}bl?y(h z-&etG-Vb*ve_sZ|7TF6k zwkB!|^KE5D3D|kcp08OloS}bq>2RvIxg8(%xVa@oS)aL7DMR1f&NCxw5mzQHsR1pM z%yMvLCfr}DyZgL;lZI#f@z|vv%Ex(hcN=$fd!^6OZ?fD%3zm{`QPDTIR5}wGtKo4y zsK%cAOd8t`3F)&mcr_h`jkz`bV!3!_U6=%ykSmf&l5mxgxg9o0mATEY-{-+qpvv|V z5;AJCY|$JEUmvc+L+3liog_f9kmL!{pi!&M?ZS_X(giiMSX^7ik5fAYGghU7~f$Vbc z_P7;^bLBoqU0kVRbY)%rtr7a_+UDzLm(||&mEF>8{a{04c0t`XcRfQRmEC)mKD0~B zR`E^QHTzP&!#wZnAvJdVa_Q}^8gj90SAP6uF`RF>V&QOpNR4;Biv9-6N}&<@LXRwF zjVp1clD^7A)~b_n>UepDariOZT*FjtVag8VN4GmER~>I3qgX{3I@#t$zd@Xl5tmU* z_NLF%JX6_jta&D+W{F2)IoriU_C$?qutIE&tEVhajcZbPfGE5>PF6-t)DMjbojQ=^tIDc45mLw)5>0^RODA)r*&htQ?X0c0h-Lyv{n7H z<_fCk*y&v~*lM_1epk9_FO7ezp_q{Rrgg)`2HEO+&+ckis&~U-Q`p$z zXgK-Q%W|IP@yZo-XStnj&Q^aE^)5>#*>#mnX6oRs)t7WQa_^>j+XQlgg@Sb((oMEK zG(Ib>e^zgnNbOD6(G=5h>x0HSXEfYSHr=p#mdN%C4XwH3<9aHO)?`=Tah^O?Jy%=w z!j|Ts8d_G|#tzw>TUoWcX5adIvXYlnw8e84=UthIF=qr@IBUj(tI@)ol_IfbrhN^1mpbkT&yU|TuhTbh!=W$Q zcP?BRySzA0AaH=bXw{TTS^^`PLbmKV~2xzJQPU+ZE~&4`(UT33!~URsOx z=cZllb655s5hn!eJT5nIX7Fv2J8UKSepiZK9cTL9x7E#cm+PJ_TLtjO77y1w?pt?x zZrvw{w|rf9Zr$v)Z|^owUvAFkzO8%QamBH@C40I5eZ_JAj-w0wU;F>Az)`M=%)cv; zi;gG+Lm6>bicpXuUZ0Rh6v{kv#7jXGmNsrA?uFW{U}eN>kI*y*l0f`iT)0%)#Dpl~ zCa6p#g#@_}(nd`ysfbG+M_W=+DxqCMNBEgJsT1GC-Nl;9Rb8(ArT|QMEJ-MrP7wh z$pr6-4>f`d;VteVE(YQp7D8N7hywbYtPmYZ653ga&s+$ZBXgDzLR11VMQ7o{MRoA| zT11sa++0i=Qxz{n&5=C9RY9RKSgm}b1mYFtoHGSyOQW$FzcbWFyj+OM#bhcXZh;`g zr;JMxP(-|yTr9+gccjJ7-wm8)fshdK;Tpr=^v$QV z-JReA#-`N%VoA?oypl@1b1tIGqJo zP8-3hV{LG%`og|0>2?ram3c~8rUN$F(wCh#VS)6afywXgjj-js<#)}cIbgcW;KXIa zA?PZVaAw<-!*TkJMx}cr5YG;hD&=i}II*;kk1q5;x!~fs(qtZL!lHgHHojb>{mnpp0J$zbMfMp|=M6&bd^= z8ZoX*k84^XkSE~~-BiG=Ty%}J9VsW=qWjho^9Pr;MUk54fyoa_NZ-a9QFQ3h{YlSnCMvwOjw84#6 z_ZQy#(F?VcVox4^?gDe!{Mu&{Y`A8<^33J)Juu_)m&`+sy)Y~#KYDHX^*OcBAb7vDiMR-Fn=O)pS69J&m7cHWXPclX!uuiPYCZ6m z7FwSvc?bsb@@dzO#Y5;lRaqmsBzSVW!&%8a6P}owt}83<1fljrInT%HL0YcLl>c%E z5QjqKPj0G)s~+(q(;l*bu{L2sp%0%|*{+(RLl0q(!V901uexE#-l-<=R5h>_BU9qp z?XYe1=@+$!Enp%Z*CH!g1#VwnUq1OfAJq1owv0R44;f#0M;CNfz@moY9=2yYXbpai z_1c^V(;pbC?YYtiGb0y-k2OX^;7`#dpJ|=Oc?F_CHm6015*9E%MMl+!CJm|UX}^HFegJ{ z-9CwHZJ#9w3AtITl8h!>=PP7RkY_fF7_vg-#|z zXZ?(iM0X}E3N*>JgmT!ZBjV)yq5@1K)8gcw4uBU;A+FuB4({;kxb1#c2K--F%B&A8 z2hp{MmDGc~;g|>e)0wJX*l8_jZ!%U4szNyhXFWQ>ah*fY(zZr$`Y`jv51(#WfBPrV zPtSk>p;*e#+93GUY1MH*J_*u|^-gb>%YoBT0M^bmu<7h-v72Qra8R&fGQV~Z_~(oW zER`$=oogEN+)6vZ@%hrgMX?nSbbCqL?DM^_J0XzUKQ#|TjP@oM9?65J(}F}k58Z+M zeJ@r#z1IODCr)0<_G<^@IgGl!tW1z2PRp#r^TEN7t|zPSv_YBNn#&iGuftxcYYlDt z*x)Lvxz6DFLy%;9QNF*cgQ|V}ckUglfwQAujMo&kz=|D<1SX&3azE!vv-e$uF=|-@ z<7g_(89OrP^7;;t^B7-o)Z;Pi8@FGdBwh~#hNJI%GV0)6`}@vWyboa6&ZD1ii)X>n zB~?2czjVM=R^bZXE8XBDbT7uN=N3edrpL%Qc0-b*gh1~69$+20Gp*}+EsPMek_t!L zAmF%acJJ(Bc=bTw^o~7kusQXE>e+AY&?VP(eZlSsc#?Xuy5MUB;EOr_Hvv3;w{rU@ z2jQb+TC62c9~3eJR2%9lp*Jr3nLMiunkZuR`aGR5BuU+|N#!A2k)GuBOe+C*1$*7? zFYe%WT6}BhLjy=T1n%(7ZU?@iCzEBKy`b}0FXUZo8GL?XY7}|92(C8z9v%%Gf|0bH z>?)gT7;mf|_Mn}GUtLu*zZ%?yr~VSmu;N@0z9zk{cv%Z5ox0Mc!9N6J&x_=*xs}4| zm+w<(#|FW?LiXYGn?>+d;;F>+?aeU1{NRW~U0;&IduErD;5N0dMD z_rYMqeczu;THtNoJab^O;D?vqSRAbh46N0tn?wh|qT)kkmQE#{Q1%EjQNIcsww|#K z4LuLHhW*nzzMqDU^__C1f1jDSF*P~18&?d$G$B%F6?*NI%;v3(076OAo z-I9L44Kgit%nNY8pIbWYCeYdr{IWHf$F>!~!hyMN#Z_!L{cs*TUc4J+`V>gI=U3?G75r&aPxkv3Rr z7Z)G;yc%Y%uvRgZtc4AIO~10ed!ZyrIP3kTR$xclS;t2A!PWx~yA#qoV9%>3&qNI? zpiyIB=Z4M)(CD;TWzn@-P~KF&Y47q{_&A(>&$^QZ`CdA_FP7B;2%Th~_2_~#FT(j{ zzBPk&@4bb)-`9ZmR5EYPfeO#Uk_I0~qHq@(fRD0;glJ zU0|XVw$DHIBB=Ng98h?3uXaH>e7x_}r_R#|x&idliJ4_k(7)IHLG39}Qgz-c!`A|1 zdi!=*f2xCG-J>0@XF4I!+$gN?St~rDC8jv7jsz;L?P&C9JZRUhw?Jl1uw=z$wka_P zS-&&_Xr-<2(O4vDGHV2+&JLFGT<(VXZr5hAmp*}^6`B)q>jps6rAceya5a2V-F7mO2T68{~{WJZggIjWU-`u4n`*Z_MC|juJ3dIJ)t*UmuM9n05G#Z6hem zN}F!)Ru9^fS7jpGO2Eq|O5f{3ISjqJ`LkrO2}A^UO{plDnbi!3cBEdS*Vn`L&0HPdgnB`HyvX-OG*WW|Qa2Ni2v zimD;wZS%-x{>P9_c|L#c8aAwaml7}%QwLv(r_yq{9ndBqwxQ*DD}37&vF7R5MzFlo z+ahe-3VJ0@pmMPl)K|v!pMTo~?|jOhsoFOI;}lPiUvfK)i|maMxY-0KVTq>Ei)u(e z!lb4wZv(X`wYt~m@O}8Dz!Aqh+`bLbtldiG;9$0`c<6CAn1ot~R4l3k7g0s8Yjg2+ zApb(y!3VA2^y$IPIh0oTbeH;dxkxuq=pWVVZ*+l(|Me}5_72#3_pqIIK@FTto3W@i ziv^D*bXM#*(Fu%6nH$a3?U3$sdUw?EY6vpk-hCyy2DEIH7xh1@hqJCxFD(AenN=Voa4-zGkreGhCddmLJwcoa1EzMM9;YbU(&*_l<6 zPzv;|y~o5etHC{dTfwF0ci~R@%6BV|kAS23Q^LRaJhU9r5i05TgyM!5+781_a9+hs zHGY339FFeL7{>Qq8$QHeS2gQ_zO+g9tfD5EQ`S&?a(yM-v|V>c4Bz**q6+?4;|}O~ zKV91@f(I%vFi7YKGjZ)6kewR9sq zU}h1Tt1IBCT<9&GtsM}*LC@m4LIO{*rl9@-DxS@3mvJLHPw37QGF zL(et)-7AJ`;pQoBExp@aV8gR`{nO57xM;NXW3^BNT)n%g=={EH_?4dV^S*dBh<}!N z(qAzQFADt?h_^*x9oA=^BHahAixy@~&MtyC^Y}g-@alyAy8VZ1J{Cakp@-uitvbQ@ zmQUfBDI26HLi$$rwZJtJ{OcOM15U&TAMMa0tH9lo? z)xd<(C4)N-abP+=W9tl!SO_n+JSAij0bdqOCOJH1gV{t@QqJL4xI&F{TRfv3Vnb&+ zO9VH-I{JfcYoimveEi7tJ*9CllrA;VE|mxksyE-oEO`j`KV5M(>1c<<4cp>;>}x4$3dU`nEQ0SuW1U3cD#?~ezs&HiEi7`7;CUX)$IhHpMMBA>JK z;oAkF_w+V4G(?x}V1?(y1M3Hm7<`@JH`24$OtTJp&p6GC|JVnges%D4+z0_dQ9O+1qSey0Lsyh+<*7lBNe<_5oeDY04 zYwtkfX1-&$4j00PL1!JGc`v|I)S~C^yJv9n-H$Emqc`Ec`*z!5seBOBJ~QX6QXamK zt!P>{{UK<6F(~`mRRq}&-u&2h2De{FZOU5R7BE&W%DgnQ5Nyt0tzNRL4<-cWEVCG^ zgD9!`-d3k3;EuJW4&rf{zU-Ufp`R?^&)uPrW>g14N-=}OPUY}u?jfeu*ds_g_AU8a zG=5LAkbC>e^R>|9(>j(h#DWgRi~9W9k3iO5*NYOuhHTvW?J4+qoWXN8I`av9efHF? zcGeIG>*~+*zWoR$-Cn#&2)_fdHU|tYZ@35i8gkax6B=Pp&2lYad>`MsZvTb_z5@`z zD-oIdJ{{hT@xFb1EE*yQQ3`yh1)oCOch|b>;i>Wt@U?1$(=(N&?EN3Wo?CCubyC^z z$!L=u%^tt^NY-)!$u8j1*gD*Jun}Uo7ddG-*MZG*rPwp(J+Q>MN$!Sf1=M|Qzr)My z0O{z5D^2a1pux>u?@C`g%-qx?f5^WUSll(=ZO*pCPoHq_*v0+8q zL*7THFTsx?(|}t?Zot~=6(PBa`QR+1<4CWn2EQnGN0rfJ*!d=b@mBRIOrJeNHhWzp z7#Rv*R5)@ON+L9^Mvf)JeHs5PV&4+MVHbBmkl;NyvrutwcVGm}O?f>t^~ZI1I(x=O zx9@H6ZpW{i`yDIseO_C8QA`t<`b@fo;Oo$%=JC6gyJO+-iRb8ccqSCY6@HhMegx`Q zbL{)@dnljas?Vu%*{5L>O?#okm5 z+ef5!wR1JXLGN=+J2hSUf#2r|-fs0|mcSl|L)uSUqrj|jTBUnKFTD7C=S@>|3nX~(MRB#Z z!f=2>YUhR`c>6{|+~Zs%@b9WPl3a8MYM)ljT==;bb_k{AT0ZZBkyHB^yTf{5UdN1G zg)0i-ocrjbs{w3C5DYQOr?f$Cc=_!!UwhyT&E~T+y%1iA?Q=>#aT!z|$Ca9XyABpK zMs9s=Jp?2s$gdQ{@1eY=<@F2|f$p(LX(@Uq)Gazy(rG|}dE z@ICC;;cij`p{23`Z&3y8U$MTh6yHCbiFqU^wV?+rY}aqBI&=!ETJj%wD3THhSzy1!u0G z7BvAkpm6Kb9{J}d_e>2G44vxoOWy8_XAJB@P^y@Cs*^J zbNqo>@#Pi>pU68gH>@1Y_2$Zk;rsOFD=K3(-!6fIEt{l8M7@OVJLuWYW%ZyX6L}~Rzpr_}vBOikBpXCt zZ+~TIodcFixu3q8WI^hjok>Sh#vvd%CwQVb7IX#H&N}_;Hq7w7Q>lgDBiw#_-GSS7 z81$6ZeN~4lFk>A(TE(b_wc~m7*LqjM0_~Zth*<^Pw5??a@O{XyjMABu{PVEc_zJk( zz5%hXe}z53@5^|OBcn{(IM|Eb4Y$rX56Z0lqdn7Z!NN-3rX{k6Vqp?!v;kZ{j=?O2E(e)|!f-dtmGvG+$pT z8XO6;>r16Gq2-+PK1H5LVlZB!`6$H@TSM-d!k1}T+(EPm|C{wzp4 zD(}>+mIwaRYx-!B_zzJejU0T!6HX!X#CAi3ntys-86p{`PDfc>Kk5>JPl9W{Lp zu+2%}U5;c-;rNmMU*~ow`6xUZluX?LH8;AbPzB36^?RO0+ zgJeP(i7%-IzTCN&H`vtzeal(Cj;a`VK0e&X>UMiC40E(;FbUO4#zqqE?_cmTmfSfr-^Y((y3xz!F{DYouCISk4F>-H%Tw!~Lij-wvzfXq zI5=2ma$oa4I7WWC+}>9Q)0Ca(&fLj{CQmdls$PVjmqXgu#aF|XwG-Mil3PJPzQRXK zqYx-1w2h}5dtk-sjWnU=Dk#|7n&HN(0)J<3%aV|0aPJG4%WcpNxvT5PZ+TWi_Q1D* zWsaRNvfj7#-t0yYD@tFmF(j%>N@3p|hwe@z=w^=MfbzbjXrn)kB6MY<>l`|kou?SE3fZ@=g7LyR}D?Dv22C6m_B|kX<1Tr|79=S zSl^!;m{kYWihA?Z?$klozFl59{EeWdJvuQq)&tDj8+d;)ZvA z?iD+W!M>|g!qPnt62x~8?=GwZ(eSiJHRH#ywtvEV&C_n^Z{O~7O1c;*m&1A8xAuX; z)#B;{+AN6O$4-B}eh5CTr+v91+5!3VQ_@cs-3RHzotKSH;rIXFd$Z=O!|!i2s;*KG z;`iG#jSths+QDtRk?rsV{ypgDmww96QYiZvv1O*}MOZetIyz1_8b24@9J6W)hSP2R zQC|-BK{rEI(Ri{GHeH{XEjwHYG0N&U!)m%<#u+7~U{wY(=dAapd~Jt>zE`ckoZH}% z!Su^f=Ud^s+5w*DZKd!bCcI>2Zae5GPo7(lPz!T3`z^lAs)8+t*2G%s^}vOjCac|? zYawvYd+nAJZD2CZd-$_7es3S;c_-v3zJC8`;P)u2h38eq!_U4vg18;cYHt?Qf>u7y ziecccr`!en(;FqW=L*&U6(ilPl?EG0s9*;5-N5)A+`o~ z?(Fqd*_03J{bT8|XT@G+R*ic*++6~8B6l2G@9=l}zc9_b>FHsH644feqA zsUyG6@A&xiI=oa`9Mv+n6B^f~g^V2NfIgFHU11iv5L&lzgCV{y%$#kzDLi5T0>8bQ zn|7-W7Tgn(R{hR~f=wZMw=Wj~LpE}tt$hHT#)`IR^cR4k_yKO^>_W)fraGtNOgqdK zx>izRIRM@-?mH)=0uXr?@Lt@i7kYSQcW=Fr59{`<-?B~P2Iyw8M|iaRVS3&xpTfP> zV72P=?H31!fG0MA~u(R4@=f=uG#>2^r;P}v^9f%-QMJ$ z!3tQ;8h#=%lLhgEv6H!})o?1*^W8W33W(cHiCO#|-{-BJR^n?h0FPxHwfv_I!a=9a z2Z@j>cvaNw!2hcUl0`q53@>Jb;K`Z;z0?K}a*~Q#IHw#0zrGGAtgD9Z{IKZl8htQ- z{T82_;t$|M*gOgCF*caIasPDZcsp#Wu9bQ1)Cs==7Pdb)p9@j*+bFm2?_b&nnyNh> z;_+tPJ1iKG0~rnKCw?ZpfE7}1dV6f{!gY-U)qC$f1C?=_=TKNacwHJOFx)W;k%d>{ zU4GqzvgIF7F|%I6WK+)2LaTAe5z8+7X_N=kz9{j=J%0%o^}@eYzs!UA`!+riDPrN@ z4@%>r@7xA1yVCkP{C-=hQ`Bbdpf0FbVLiFvb{@RH z#d9b4S07xzW}t9(eKw@L)#uqKSq2{hzu)*MJOmDUH*yyERl?8yn6E>OQt-~RsEFTO z2ELuTX9@g!L(tr@{hfO%VcMD0Ss$cI;mwcTQit$7zv!j($E#+X`#0Igfh7+hY`(iP z75B%-g^o+PqHn^QsB6QJb|oA!x?Irih$o2$iE8%s5g7sV`OwS2p1H{k_G4RY}#Efc;dT=dVS3hSV;MNzGe3aiuV0b z@>!Y-uU^G8uE6v9*mR3gUb!~txwP)e?S!Xb?QJrzer_)8KP_7#6W9RMAPue@g=R>c zi_WObDhBORr~Xg){wQn3Y3^qNgHZo{hO0nd5lH9@==rSX^{A;za`(XCS1=IL42Sg=7{&TFhfK4;Km=Fy}R$ zz>y59B0^Y&Pnd@@sVds#{C0>bk>SFviOdDjK+tp+gGV=>5ZZyzj6SRuaoT-J!EzHx zybHc?+y_;Gc8t$jyFx4?f=XD+BD)Ilcs5mypiP|j=aNWa99Kt70Y}7?yv;nW=|Q0N z1D4a#!11|E1sW2qq}SQ;=p_G9S_m5KcdUMpzG*m}L z`gi$P_*P82g3v5W1p!1{@S=08FLlKbXh0&v=D3Da`6;LTAxXsKMs5nH*AfZ=N!D|a z%jxw9O)p?qYxxt*O<#tlv-nPEBgAwSy-FvPKSc0^6U;3PCFusl(nT!%|6D4ikw1@q ziozLB#FW8DW^mJ6XqWrK8K{@XsBrMiUfe8$qP50#tAr6^$v!tvP@DODcg1KZxkT^=U zQbErA%husa%pXxfOn&617@dHas+Ad>nnS2}MAf)HY{h<@05R3f-qx>V>e3L^dR8T3 z*@fCmT>YJjwJIV?A`Q8y+Y;uh6W>W7a}^B~A%N2HZgy!JP6Yx^C_?fUa+$q>Fke&r zP7?2>dDK;`(YelEDkqV94zfADuDc@E6(!BtbCAQaP(EU4?Mo0uqxRE_`nZvQ{pn4g zD&k5JYcBdC=)y%ob>zj_- z&yE*$-EHwh%uC}Q+voSaID4R!B9B5An+_|iJlNzT{~?w4ceSCU%OA6@nY|`hhY`B+ zrEdFz57*BHz7D=JIl3JtUz|Jolfpn$8}r|ZwHaJQk~z;j(I9c^Z;d7BW*02`fx%~O zV>yk}Jm$#)Yx&Uh3Q?q+nk?jt*@d)nvL~rw^gS%d{CrU zd(aV`2c008uAKZM+QK~?lx94}|49yKwl7r)jfXBqqmk#1P?ZstA6d$XN1k#|RZ>u2 zvUHtzG-nt6`Xwua>|;_nJn6_KF zmN2VJRtmS)yRws_=tIZ>lR_rgFh9+Xv%wF-MfS1u%eo`~c`FGg; z&d5B&Qd$6=v~);8Ng38yt)0OKDf@AjjkN%Z;+(v;`cfjvK9-A>rhQ(0`ECJ}_%i0& z0`5$^zXnCdBI`{11Oar-5^H{r??b54S@OoZrH@RN&GhNQHQ5iTxN+_MCDP_P`$m47uINpadP$yN9;?*51w zx@4D|1WusAgH96zZuG|Z8kD7T)~{*HObV()qPmf1!rfIU%=#54vSY5(5OS7oL~Px- z652Ktn$Wb32VLlD+GbR_wgn~STzY$R`-1P%h>3>^{%1j9vQO}!6v<`}WGvGjg+piU z_Ozv#cO>#KuUX95VNYRoW;hw#*eHaYDdyd|_YH3Q3876CRu4k=v%+@oa-V(iLCcBz zx!3UsbDr_&Aq;Q6nxj8<0CJ&WG5KMEVYF-T#SD_ zH;E*PaUJDdbcl`HyJiR02s7Ns>&GRFb5SQ;Fn1OCw1VNfODaG?Ju{ zB$1p-B1tkyl1P$B{%2|AR1!&2$$u4%BuOMmB>!0&Ns>sCNd6-lNs>sCNdBKjBS{iT z63Krxjhsp%Nh(Rw$Ul)tl1!2maw?IWN+U_?ND|3^qmh4;NRmvFG?FBfB#k5~BuOMm z3Q1B)l1P#iaw?G|=_5%bNfJ4gO8%>9BuOGkBKgnK$Ul)tl1%=u(nyj-PNk3}nIx&? zKT9J?`uLBCBuOGkA~}^rl2r0vO(RJXNfODaB$A|(B#k5~BuOMm3Q1B)l1ToEMv@eA zDv|tWX(UM^Nh0~5rI93o{1cJsCNd9MO zb{a_%$f-1vB$NNA(MXa&P9>5gg(RsYNhJTHG;%71oJuACqcoBvktC5MX(UM^Nh0~b zN+bV7B1tkil|+(M@_&^^{)t4AWbz-;NRmX7MDice$f+cfq>}%LMv^3wB$6bJBuOMm zB>$r{k|dENk^IlnNRmR5M3N+tB$fQ{rjaCp{1cJLY8kW-1|e-(`+NhC=m|5+OO zClX1L$^V~5{(Blpl1P$BP9>2fmHZQlB+2BTXe3D@Nh0~LrjaCxB#GqzZW>9FNRmkY zM`o-sBKfbTktBiq6OsJy zrjb)gBuOPn3OSWX{;O#uNghceNz%tZQAv_Sl4No!jU)-=pNQmtH;p6-B`g8Tk6KV=BsjHCF^j`5b39grm``0t}p zjwloSKfh0wi4y$AhmU@i!6Djs_oGq-_ZOU>R!n1|At+&o?c&E1?bgN}IT4IC5U@K8FzztkmYT9ON**pwrOEH0^B z7B|J8pt&)ErD;qa13FV^4>MSH)P>iSZY~lqL19oW_!crO#lpR)%E}h}%Ump{C2Hfp zxjn#d7aAmyZho9_C>L16vXsizX3p_S7Nks6OlN5`wL@KL?z4iWTbL*GGhBssc?8es zM<ux}MqTqBMiTt})DS6WSXd`BXX#-QvUPbyp#4f z@6<)dXdw)4ojMC1W<(*J^-w1HVROHSFxR>Tnc)#@vcEpdmcADGJE$`-?F4JZ_XgXnd?`|{N6MV66bQ>y?MtctpUwnepj4Pyt zy?N|phh?{;x+Q1#@np$9qq(4F?-rk=X>u=YPtK#z&HZlr$c?*iM-LweA1EBY^oFTs zIwUP}uwl#P_epAI6uZ_#y&dwOi?^eRuyX;=7GC+*yB&QlUwPz1&di_qKPUep?3h%2 z2A5==Ij^N%5KmGPw@!wI@FCFFwDpdE7f^z$Sy`v@>ZzzoPBMl zT_mo$(zehm|F)Mx1B)oERcC#3mE?tz7BBcF77?VJsvyL)vDR&mjEGTInG?2T`M&n( zB#AVFX1;WFiv9VUzABnqmn@_7ipLd>q|H61ZtEt~f$AJo^)B%*_q6Z0z@v=}g_4%< zIW#SiM^w$E*%SF@Mqhdza?SLG=gI&X^DC1d)Xce;+65~*B-8vd2!_V0Q|lzI@~|@q z8f(?LAcs^QJY;Ql*vDkXq-hx-+pSAiQ+g$?@vzlb1`0SN%P{|go5}H%SvWHn{+*~&(dllupQgLYvbBveD2Iowxm{>r zEnCJsH`QRy4#%CSyHM&rPsE(vyHBrw{H{BXCHdP>QfBoa9+%rhqTt3C_C1JWC=13m zPMnG>erA9Ub?ro-3a6L8OS=>J_Qqz)M9*(HDHQHPnH67-3l3J$bQM@nujFBCpERSn zQ9|RZR2SVP9Gcwl7(rSm?h@{{TV@P9*P4FPi4bDAE6$LvU%D-uNThA0*d#PK)nvyO zjBnMRVcx{U$Vq6sxy`Uhx@BKFsU_J#s=3Kxw>%cj$3!wcH%*A?xp2A9!;U1WdxXvI z9S;Aaw=a)t;@tXw0uL|=Nk{?=VSpG=5UQyGwSr4$f-FIe0xCqh$Znzp1EPX@+u#bd zQLODPy>`K>6}-jbQbpe`xYR;hEZX)Kt8L@8DyV_52tiQaGeLXx+TPFm$Nl~C(Kz!g z=bYy(-*YD8JoERT(1$BN=AXYCXSZ{akY%I&|)HHS&&yf<0`Bwb(Wf(M?{)9jB>5yZ3_z3s@z``t%E>zh5uH` ze&GK-nznJgO{ufID28+_<8bzBusG;!ldY z;CaV0Gbfebr~5*m-+J;khdI)7_xs{@H>Q{UC*(H$1AK=QBvUYr_v0>O7d_m5pMIC6 zIq5b%-ti%raX*i8Eq#MzI2*@$?Y~d+oyKe;FLcu`Ze!27G2z6A{%P5_>1dZ@WAD;$ z!y*cGTxQlJ&iPrr^fKKx>l)b4W#wn@QR9BTM=K6;j$tQ;TgmUHH<6t4h|AT9yh-NN zZO#FH7d<-@nw$h`48#}VDTKf%_hvTdT_3FJvI)}totWf$*@l}*;cC>SNQ8l*1i}2w z`I0y#X1K8TW*9?!EoL|`5m$mGf(qoMkdNwtP24n@A}x>Mwy1mPjy3ee7bp8L>l(h= z8T*WcSsu7GROrkEq`?C_b9(5&Tz=^DTqba%*Jtnb(oHKkU4#$wMW6?v^CcjS3lsbvG0;s1cM{W_8JDA><{tX}Sk_=J zOjsFm4wLd{_R#lK9;3pYnTanRPvASb3Y5rMVIq2HcCS=dCae+;$GKca&YDEjBhX>Y z#C}Ogz?I@eV>b2DVZmXeT$x)S=!PW{hFif3sl`WnGdULZH-XoWc>HaR9JwYG<2SIT zm=B6_4V(-b`3udtBd8YL?4gHh0y99;;7u5J>&ws{aVrqh%TbR(jrs+RgewylxR5CB zp}BHCX3TE}ZbN;FVwe&58NYLHH?4=#k89_nKKf3^mxN~kqi=*x7t5$0yXX^O(IY*# zxh8&a0K;?fg^mO{xLIAHDj5qIE`e?<8j(dl-Lpey= z{0)c0x)HxQfXM}=cGIe}{GUhl(iwjZZCrsFh$09jF1IR_D`UQe2;8#+Og0Jex0SKV zQX|3;iUP{Z2)%>}PA8fIn2cxn<~Loz5d6*_dgO)^goN>nO@dXV^UHf^-`I8#Ge=8& zBw<`U@H;px9or?EO2iek5goLhvsH8&Gv|UhNyx^vVIxlvi8^a^xI|`1M_5os*yz7z zOu~aaO(gE5%PmM&9?4(e$pi*30C_h2id(pPCH^`>33gO|jH;?Z8*GJL^B&)}Q46;j+o z2Y-(1Je!p;Ty@4P@45?9MFl1x*RU$WPtI&ON+<{>5O&Bf8c3+d%e@i^td`djtmez` z9lE9wc^Rr%%jvLDZic;oYvp)=F3lx&e&MAl6Bvn$az<}Qyjmp;Dm_Es6nBLZ_tOao zr2Ja-BfjgRspoq!hZ}dQP=8o89*{R%h&yy*jtb=Ewxa$78~#MDsX)905m7uq#~vke zduhFm-%q!P1b&5jHR;G+Yh+2n(>n=mI7F_fLWH6X_0<|7ctVLjdZ|l0>d{x>?RIl3 z<}!Oe!W#yx709lLM7JQ;lwQn+m+@s6jS=6X!)%CaP6U!t zR)L7%G4&_A$X3||iOAbfj9fvg zE(&(1@1z0XI?UDBo7poO=XEI{&=hshEEE#_DZh5oIW5Fe=w$Dr~2lOh`Z`62$ZYI?ROntX0U3 zTPZ3RFn@asB5HsVaj_c{CWR2xA)&y82CQ{xKmeC)1_m^3_~HaaXnQN)PG4;)Z9;Ae zCF(QSp)ITd-C=bukivXP9YGuyG6|JvP*DjuBPTpWj6_Y~XGK;!8Zg_%b;v`Z!ye4l z`*_TNRf#;zb;JPurD_sR_h@cGc56CxHZjOfH4rc~5qW@z2^oC@y475{EgixsIXI!9 z3fT-sbjwqpFx=q!)7Z_21!UQUT9!(W;scl7)+N!Q< z)JMtP(QRuP1Q)4u$6_Y-W$fQUIS$(^&<%r5T!Gq~BSDZF22@!O2B=9#wi+d|rU#O( zJL;fJ?%;xCl{>O2>QN7+y`hh#}Z_+W>A_TMQyqA`eOq%$n86&c-EG z$%pB39)wdXkS$lTMpL4@f-*#y<+zJ(Dux+40^LI;Rc0h#;WcC=&svk~ViN5DD70v3>v=x+kbc_Y|ONQQ@Qa9i=KB7+g~g`|Rq)gr2z zAa2kxu{CHwAwu_?C?6biWpM2zLh+>A-x#{X*hw|Mli-h_iasrKtjUl9X}r zi#Ie%e4VbThw~;2x?UR@4$3l@f$g>E8pKammaAFvYx|{7lvjsd!t3a6F zZ56?@Jr>k%wjeh%0y!Z$Sv757!E_;VD<|-7U#gXdeVL|6Ag0ER9hzz+vW9~5TMZ)A z4vC_js%QN@5p|o@s1xdi=R{@@lmd6}Ad!fe4MkU2K`5xPOH;kA0^Mxa5d$`d|JiEP z__hd4h;P6q;;0KybcC29xabDeAY_%M7NVOP0*)kZJlxRDhGSa|c+XAn)|<6zblnWI z*w!1ch;FV9zjp)BqMH(lVWmdYZD>TkV4@yDy0{gLPjK;3UvM$Pssv{T+jK$N^Mn=h z!RU!RunQRp3el87c|+C-(QQbG1XELuZfUeg4Ep3!k?>d>8A{;S#RAwFp0e?f*c^#^ zY7?PS7%lAN;k0f=9THQOB9K6edVqVsArkdM1m6S?HTNqTAT5&he9#{Q`A38=_GlW> z?J#&H-GO39F!F$0z0Bs()rxu(BGFlyT!if47c31sAWpwQ2f;3>5a88fPP2l-5|nTalftBk=oTsv4dOwl;*rbZZ&vA?18@C|nM6$yNf1ARh1zqE>wXG{c%u zMCn9`fH|@TcPwJ`juRm)r5fgwYIoc#rYa<`V?M<8Ry)8-FHLGiNTP2cMoAbF6f?lB zLgT4)0g9E0yv~`RfG6985S@vrS5So{8WF@xE0p5pl5{ULV2~oBwgO2gAVNSC_SQ&= zWC>FP+H6Y4?h;bTBR&IJtAvOk!5v<_Ca6c(YQc>_aT2oL6X!?_a&%o2iJYvBs0Z@p z0tuDwj;@)d$SF*TCrH4jyk)H(s1sb(30$=UL~&|vMcohycJP+xBosX1EFp~o;spu2 z;$DLe4Ukd+9xb7aLJ(JrddyJUf|>^mRnW!oh>ft=HZL|RbHxPxu>^c+z}g^_i(x6? z4!sIUU*#gaT~eElhMM8k2$YVGJQY%zoeP*KnIysOeISdcrUDIx8S#2gh^T?ED!h59 zwtMlTK7c__vRaJWJGgClVqZc7F1p=p0n}_k zeVTNb5h-MA3&;*qHh;89fRe=>^zS5KaEZ6365STq&cPcR6m=N3UUCy)%}}kjpb`CM zwV*+T7CBKZ;Nt=v8Unv{qN)XuvMnOqI3xi0Foa?OL#7ilfQLQr{1?3mn;EnDz zRpXz$x%F5~wkz>cl1%604pCSnzT-ny3-NcPRR@8iXg-VB_ORvM`0Wgu%6?k6~ z>ekoeaXplh3t_`}f>T4W1t`;_2!$vv1I7#&=GE~ama9Z~U3X0*@i7p#`O55`5DzZ> zIPVH&L_9btLpBHvbY9j7 zkG*p3c)B=A+4-j4H!tdIzxAi`pqHBqLO0Drp&o-C`8;tf{}mFS)T$~;)pEfDky zzyJzp)}mV^;frK-d9pa2xRcetjh#3ZRPpAY?;@ z=ze)6W@JF}K$)z{1Ks9E;xz#^#duo)i@vNDx+uoi5n$a^od{$w@v#@Uk^mvIjTM0p zKGNt>P=W4QMG(kpFT{hA5Z%*&m%swMAT&BDNU%IAQ53F&5p6uUFp31zwgL^-{9T4B zN=M>qDI~r-RxRSxFt}L+D)yxkxiHS;4J<(5I|2Zq8icQjtVYO9b)G~S6#IL9aj>r< z5)B%P;pd%dEQ2KO(PhM420ig;$G^&xW0g?|@ERj`kQLm;RQ7m9z6EJYl z08g${A^|0*@ZM`?3%rk|0?M;cPcUVq2M+dUQOpUHJP07>FKA&a@yZdX&)OOepvD3) z2HO1wxXhuHBam~G6laZ~%KS8TjNAl960Yp4;UXjyNThopCo{q3=xQJ23^hIO38au0_%#9fw#p12EBT3}OKg}9_$fDaF8bg;Sxs6pXkX{g&cVkw$YFn@8xud0krKnd*Il964RW4reXv1JuO|VUBCv0D9lr7D%9xy_7DT8` zPGp10HPXTnm6>n|Q_9m?oTQB=*Jm0^g~b+UIZ;Z)F>582796TB<)t*NCF?CN%Cb^^ zF0+nmwYWw$mI_xitdrR-ZcLdTwt z_C9f6P_dRg(y-xabi#chnl3%9bdB)e${bkQ7q2b{G27o=Xk5jxK)=oFGM4yC#A08uVlRH*vy9b zBBD~YDL3+pZ%f(62_LA;i?vs%*2ay`964dmD>~)(D~gXi&Dl^;vCIEjq}$~4JGU&a z+ZE7J>^7B2TwmOnCF`x;G_9j_>zdusBL*$;^iY?F3CGBt1Jx>ip=kZ6m_YZ82iw-f z1bOaM$BuP+Wpnzdk<()|;^g*s?Z1s?xUVE`?Dl-$>xJD3wP{(7h?*l`E*r+@zSXhZPRh1{>6x)%NB z@z$$Pf88+i#omKHpY?t*?q$xb^!@V66QU248#$*kMB6K03Oys*oG~kIs73naRM&`Y z+rG&To$LGc^RDCHI`>U(Ki26tRo{9TQ1bLYw zcU)-s;F%-GnzN1D{eJEp75qO<0>=%^dgsU!;C)K&v|*MX9RLlGjIBeN_p8;_x%ag z3Y~hb*I~J9`Cip81ug63UV$zOb@Yw5L>s=J3r4#hed|Qx#tDZ5`$J2o*Mui-n%WyE z+MtdZ8I)8$Yu@{wJ40hpqF9(RAt=7CI`-*R;#Y^nBgKtvvE$!Q0?!%ge^nhH)GFS( z>bG4ZIAQ8!QLh>q>g_r`r$3ks7%fFTmKw2|5EA5Ics0r{{E;v-~p57A3Xm? zTPbWWqo4Wwjo03cu>~v7HB8BH+Fn^vVG7??GfNWj-CHfMhfMU&(Bv)NzT+3XH?m1T z8@>Nsz>Vy^Q!aAT#-QpxvKQ;i-6Mf(yrI-T0tU0NLzwm9k4wVGZ2 z^ULFtT#~oF_WkbPR5dde?3?uF$$1}K+Et?|*f;mxJ6_e%KR73uUzxXOhAMy7@~6fm zIz5x2b=sF4>o$Mq4dU(qV%oKXFMRsV+|{N`;+xEnLvJ0}m^<;%h34uFhu-#$UexuI z@3)7482{egya>jfGXFFZZkSpFW5>L9Zp+5QyEmxyGqcjZd%N%OJ;oZFb5f8OF=2Cc zg2H+36z$pSzKV78n-`~^O8dv*+>dJuYL~n?n6{*YbEM9!&dVD4+=XveJac%D#;_!7 z$Fo0O^E=87o0PEH@6tcXpkvME{N;x({`~g(qo1@}4FwncetkB5KkVh?_OkQy7X0JE zLjL}z*N=JovT#%V4_;fAme2go)9YyDnUb1G$HZWvQR=q@Bf$GvDnlJUaDq z_(vsYSHF9@%4b@;X6vdS#$WpRZ`q%I{QS7N`jfw;9lRdk*j{GLYyI{8(`*~q?PW&1 zd^-8ro_CgpJGPhk^4Y_%y-er2g+rOapAUSxRoJ^Z32w6j2#8sFXWT?&Q>a#8#|C;ogD#5tc>l2O3v_&WKlQR5$ zM)6$7SDz4sY*-i2YjIOaPmU`$t{*jaCwETSNiW{a4P!p^cYm(!q|Zs^#)!8A1)t8Z z{^Ez0jgwAi2$$DSm-V%5svQUvtqVOJC^=9TH#JDIy*lQHvD?ZuMei56_QZt7CA~6t zccyo3aqI`_;hWPg1^N6>+ZW@aiB~hcvJRY4pNaTe*Q>f&yC~J+xca&S=KM7y{pWjr z`E8PF%d*{9yvC=-Px(c>wfC!$-}TnVKihY1>&rM>?h>VrCJ#n#oH~lVQOth4vG1!B zVfU+LS-KoUhPM!T^MjqFyrRO4?3{(!8AUn4Xcp}AHQel0v}|G4((K3D@G|}54X%Yb z8OxUDKb*${a)OmP`bD~;g_$|IOAB+5H`~U4(3X)~lv6m|iRmgd=ZwMN{m)(!{3QL;=l+DgLrKHL-^JuU9I{&za%~n% z{IPeBK1uN(bN^W22TC3$`Jo$G?-ugcU}>8NrBhELYhe_Cb#A-`c? zBX7L!0&W{ZkPUBP0=! zeL4Tu>Ns5;l%HY9f#E^_iq#;Pn5)mp%U<}$eZx!_7L^zs6PIQ#&dDlbC*?0U7)yR{ zUshDeHX3q@G5`TGfJgrFyu81Rl|RCB7zqA=;lDcmd)!!vd6Lz`*8d)#VdQ#})4$sP zd%PZl#3xxk(fx0nbMuyF6g@M6o%p!%9_jc`27DBK|CGA}o7vv~GIIycKgsp?=Klga zHij~aiVF3a%ZnWGvl{$2C<`oEw6qXBdUa5qKC>{Ru!M~uV@XC~;nJ0?L@RO%m+6=0 zv#k;1pH@B{9>mUjAkZV75BiXluS!mylR9}ge@gAbaqMTJDo&+RCBa|zGgGCSpo(6^ zwk=XkU*u?uj()6vCEFPLdw*h5%rz@hKCu5wllhs#A(G^ELW8`shsU+?9(G3=i7!qKuh_TS1wDK zK4WoaL~(d#>cru;@yqm?hPa}%xe3oepEAo3w=Rc6G5Khw=){r?~28K0J#m!F|d&Rt+gF=URP@#nr2kz!1X&?&VM zGxE|5Q6>MupA4DtQM&Ay1%IluG(+)<1=^&D*~9kzKiM$*cm8pP?D&)iI{yQo|D$n# z=woTiG9%)YvlsuV-~Zb>{!jK@nPtdZ{O7(FU6PSHdsxT+&twYEX5$$A5HKQ7pAGns zRRXc0E`qp#cCaz@t$_G}Ht@~(JUw7ZNzO2?tjtM`E6FlMjd%ETep+5u{%j-buWT%6 z7HgJkrcWqN$amn=zp%uRQUWoyB9o;#Jz>?X#j53+xig{w1>;#LeCWq;sAkU-Sy*+z zWXyc_pn&~~ci^d#J#^q_V$7Iv<09cKHfDIV1Ed{?>=>1bof{QiW>by{HRn5U^2Vz1uPf%B&hTcHUc{*c9=gbial|BJHD2}cl2XQbN4P41S`3GSS*r-~S9R9zsE%5jN literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v5_concentrated_weights.parquet b/data/etf_trend_equity_2020_2025_v5_concentrated_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ff4c19b28dacff6f7cf07f7e9f83e887ce63995f GIT binary patch literal 41278 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v6_more_concentrated.parquet b/data/etf_trend_equity_2020_2025_v6_more_concentrated.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ba165040a590c84f800ddc7e7b73f84263b8a305 GIT binary patch literal 23194 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v6_more_concentrated_trades.parquet b/data/etf_trend_equity_2020_2025_v6_more_concentrated_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7c490bb05c791c8dc100926096838a0ec2df2f76 GIT binary patch literal 37645 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%0D#3?vdyey1|MTF??$mS72ta4<7=PKE9ZUA$D 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 Zfh92{*KPENX0 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v7_swing_trailing_anomaly_weights.parquet b/data/etf_trend_equity_2020_2025_v7_swing_trailing_anomaly_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1d865dc819147b29ad13c239ff84603be85eb9cd GIT binary patch literal 33729 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 Sm+yb^M<|bg-}o0e^Zp;sWtQat literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v8_big_universe_macro.parquet b/data/etf_trend_equity_2020_2025_v8_big_universe_macro.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3d3faaa3b771608c0eabc06fe3d639cd84846201 GIT binary patch literal 23186 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v8_big_universe_macro_trades.parquet b/data/etf_trend_equity_2020_2025_v8_big_universe_macro_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3d7b5fffb330b0d6fe7906e4753cf6975127202e GIT binary patch literal 25960 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v8_big_universe_macro_weights.parquet b/data/etf_trend_equity_2020_2025_v8_big_universe_macro_weights.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b81e7fd6163a4db10b6c8b7666a5cf2b81eb7e09 GIT binary patch literal 64354 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v9_gridbest_nomacro.parquet b/data/etf_trend_equity_2020_2025_v9_gridbest_nomacro.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d8ec67935ece5270b9cd4e6838544cba7e29d31e GIT binary patch literal 23202 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 |RRG?BS$6ZK`hMNOQ#LV4=T^=0>X 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 literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2020_2025_v9_gridbest_nomacro_trades.parquet b/data/etf_trend_equity_2020_2025_v9_gridbest_nomacro_trades.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c3218e974d900c21d2cfb76e01004dbd35936d7b GIT binary patch literal 52142 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 H{1f(H=e`Cr literal 0 HcmV?d00001 diff --git a/data/etf_trend_equity_2024_daily.parquet b/data/etf_trend_equity_2024_daily.parquet new file mode 100644 index 0000000000000000000000000000000000000000..45ca0de142ac3c394158c0d20e17f21bb0ae45ff GIT binary patch literal 5513 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

7@%tmD?jo%DMgvuz@ZBCJ10L0i}%}t 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 literal 0 HcmV?d00001 diff --git a/data/experiments.sqlite b/data/experiments.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..223cb4c52a55ea33e1b1eb39499781bdcf286fae GIT binary patch literal 77824 zcmeHw2V4|a*FJ4!0Re05hFD@>w-=(hV^?foNun{XD=doA++9QkQNSdY*fo|ITM}bz zF~veO4zVCb5yc*(MC{ST6l00ye`aQ9XPKFucNZq#@Be)-`~KcFJ2P8&&biNd&bjB_ z85%Vp&SnmaO|m4IY+)*|T3$XrURYR|mzS3W{$CgVPe0njfB4Za;9qa2|917C5--{O z$HBqnUcS;kUeZ3ni$jWCU0Qv-8i8sAsu8G0pc;W{1pb#HFt?Ale}hJiyqCq%4 z?=>Q<+wft7`wfB*7}#sju#T+vSW*&=@V;Ta-WnD*XfXVL_<#ZIYiw3yiY;3Bn&_k$ zvvIQ7VvS2mB(G$DNOV$SY}`0wvdK1{_q^3+veNFsbHy&VJ4f!n2-{0qu%d$X-u{x#l|@wO^r*0pJ2aiY@EqzG*59{ zK)$YU1sEpUoCrU_2BtG6C#9OHukRQZos<+${4vHD(^RYd^Way;SKRwoBinf0Obu=L^(Kyy(HpPIekVXijj$5Nm@n)kX z&N|VU6dUU}HHG;xPRA_fAJlx)A6{GsGm#+Vb65{$9&NlEm_TN6yi zSd*28fOu(*cQ_AVk!*}lvRa*f5De3CW}C6XKmbC5L23l9GAE9+jW<#N+rOUpTjP@w z$2q+uea+b`iEFIm0U4)@D&Ui9v?!Ev`&oG5{NEbpu$H={U8GNq1|2$hk05!}Iw>Bq zGo#f!Da8yxvR?XDU{==2wuz<$b4Pe*I|wDe{4Wb9mHoL{oqhcqv}@-*s}Tv`ShE$( zZL!70nxbviim&Qc0I%XXB09Mnk(?q7LDqb+A}PgY1PjL5raFQIafos?YlUMJnK};f zP=Az`cLTJp}&XT4ZRt9HT0*@ z^P#1o#i0eEheHog7gW|N)$glDpc;W{1ga6JMxYvjY6Pkgs79a~focS*5vWF>8i7h9 zP&>0Gyth`S4?KrXfv1o}cnXezrnz}0@VooZ$zMuk8eBg zip>o^LEgTNe5gJ=ucbu(ALw1rD`aM{Bq%#DK$__vBKg3tw$F!f@W1qtH6u{()pcNl z=w{7)yuJO2hd1>=OfFX%G^&x%x?_%k zgT(Ppa#bhtOt?xNE;q=uTD?lE?;w|l%jJnlo?})Xt*%oU|NsJ>}63s^Fh)aR) zq^VT1T)a6(Ms#n$=gH*?IW!h2H43Fl;Z;~uitwQwTBmX&z$@2!V=oWPr6;Q`~(cNRj zRzi z=xglXnKdPVV*xwl1kU1EKrd6P6ksQ@ED$6`yQ~eGlyxjY#pB!TJm~ibFAbULoz*`N zon2D+ZNWnW7O|YNfKLeh7gvP-7Ybh*9tL_}bb&&Qf!@z0^z|_NG9CI$XuH+(a|e1U z2YMmr2XlDt{3@ANp;PGOVnH7uMY+vG3I_ZpMfr~!EbEun7%y1Aw{5TdR_NO2<><4k zcd#yJDCimIKN{FI`IB>j&K8h3oc|DI3C03GG>Gn4pt%nRdUw2jhCds6JM-}KP9>pN zXw_=HK`iJ4rReMLr*Cg_e?2<3^FW*A`>XNN^Vtu=+n-0LZ`_)@|AVivUiC@nX|JUJ zdtKN+lZe`%2O7 zlXu%@ADfBt`}PW6duaq-TtEG-&G;v zF`@tEV;zR}OWCx~qj_A807)fDXNE5ec|uT<$n%Z>&q+rSt})0ITCG7mx#=fG-!%I> zuW?y2I{H%WlY>_t#fuvLvwQy_DY`ggamz+0H(*^z)*tTH5b$#h0S*W8Siq(9sU!zw zP4Qt{fW+UfY&deWQWnt3lv<@iJl~f{(U#4lFO}~ILr0$mJbO4|1b*tykBQ3+i_ppZ z?7MUQWtg5KAwMDC_o?B4p2I$Z^j~I|_4bJC8(Jy)&zkP-fS%wP+Vx#UT;jZExfVFT zR;JVF39JbyHP?7*S&htoQuGhaV1>K?xl>&8Kzn`%iM zz;jr~mn$|Isq-hrQFNx|TaO-Lm7#qy|A+M#6pj8;OV!2vl$ZS@1>Xec+1{Jkl@cY=8y5RW%`-ZHa znvTjBoew?S^DI5e9bVwb?(IpnQ-Z^|oI7LPwaYbkd>Ng%)5*OXiZ5$MUA7$r+17JA zXv39CnOv^bC^TZ(p@9_bjOyUMA*BQrD$aF2+hrGC@=1qJ6)*lkrN91ScsXbl7CCnd zJhnQqEqBa=)^k~2@$p3KRV~L)t;4c_L+de$1H?GIsAPdl8?G?Oq&RNp@eceELUemWSn^7GT552oXsV2&?!o$mNDD%-WlbB(+k zDSo!3HVb*NIS7!~%QPyTLaq`E`8rZ`@NnkkzOtF<#AjJeW<`F0pX}Rh?X(Gj=<1V> zE!#xcuz~eSvBxz4mxBbd9SL^?xa1&7mBL=Oq}IQ02aQal(?G5-mL2LsESTQp-sj`a zqoVAa-hDRe@cdd6=8yWq3zc_j7W*q6N>{nuu>+IzaAE_q;+fg8hQh z1OAattMNjT>if4(iq}1=!1I6TIa|`4<87jbJhc+$_GM~=LZcRKTDh$ht*kRQ^zj`G z9q&9KrRlWa@se|a%94i}=)0Kb@AdXui1o93n_Ugis(`Q5%@kTWqh7+DV`d^BOZ8Pv zeP?AfW7~nQ0Ejc{)$(waPNq}pL{#5xq-fQ##{>4{=Ay$1B1&ucm*#mtLD=l=fnrP00#n1;+kojY7S%0GGX9@lk%P?rX9 zL;Gb*ny?K(Yd`TufCiL@POlcN2KK5H?Vq!5wdqe#8q?!~igcavliU3t*Lc4U`svS< zwU4%yVtsSTaN&SPK>INoynsCrc$mng{_w3@Epkd@mK}I1VNUs{$1^_!6M-F+dZ@^V zRR?GVjYfaXlC6D&q2k78n(VzAgO?l`n=($@7oB_Kt!96IHl&wZ;#(jM<(YS8sE8#% z_$J-l7y?-tjablAp;)w;AAnwIkih^@=|$_cctwi7dszO4WsVmrPR6D_e=!g**=pV# zw|6(XG&1ygtFq?U;5%F3vDK-|PKbjzzR!a^!$GVdAkbvzP8~j@;lFDD70ibiWKe|H zi`VS(GSuNqt|!#3wH_ThZmKEYvlB1e*#G32h)3whj%%Lw&%TCrCGf9c0B#f(nDq2y zz8MVQDhj(X0#8M~oWc3Sau+%K8PoA zf-zwSkfUm?h|~YgAP9Wcbnu9K(11~6XU6PuKRka|&A{|nIl5eL-N|1H6|TI@FC3kTs(|3wcKj5UKnN$U_-ku2mUC)1ghI=uq1mOTx!U zQL!#!Q2yeFc*&pT^Y5SCgsw%*F#362z@jK2>NFL|jR8)zuN3kdkW8$p2T z|A)N;rqp~6{r}$5_x$}NvwZ*YneEQ@{**8LZ+^~}v}JpsxE!q3hHF$Zl^psHMeDiM zLn@k9^jqT|GtsfA--DxWyui<1dML?@Jb?BW&A7Syj~uL5E@>5-0vHbFIwBJbIW<_G zmRp8{%P6}$F+l+3$Cc?r$x3d+vI98-BpwH=)r1{%3WH9(Hc%ZTL~9e9>&A~k$GcB! zSofD>c1%fFJ1O_rwYU5KI|$?mF6F^YrM*W+%Xp|4*3$0 zD`lWPG;*C-xsOJQ)(z1t{;^&z%6seWkqJN5!_Uq>KfTed8z?VfWY@2!EXTBG$SMHs z^2|ICZ|g1H`^@ou9v#S}K#%R7?r45;0$r*~fiqMjo4jik5!)XzJX_*pTIvA?&n3L&R5>6wrYZ zCI&JC;dVv*1!h9sQX#Ea_zM>SJe~<9@K?wTuse^u)K6uoI==*XS zdEOu()Ojmd0b@ZgPzrX-`CG7{2mM1<<3;MgfH@Jh1_G~KuM|xH$)xzlOJ^NMtV*Hd> zJhFi2HAvC|(3GlFi`JLg5$Z5OTgpw*>(TLT_x5i}^21N>9ibR-e=<5bFn*-Z^yXN< zT($*x0x;76kV8?r^K{4s>JSqE7z;e6PSN6%Z|Q|Q&Yv2_hMw?x5mhHZuZESr&;uh{ z{@EFrzwhXM_k!f8Amf$s^MBulpKcsI?DB^-(1n!zj<@{-vA*@m$V-S%ZtY8;1(k<( z7|6LXw+ebcTkq-XnVkD->UwomhTu;(8}v*Ur82zeABK5 zyKgr|7YF^QdT}kv^+GFd#ADQ60Y#t;-3m^Avgwv*v5z}+o1tJEfFxVd3ax4|02I7o z!a+Q((Nl`QGb!W2OFO*K507qSZj8K-mv%jv+o{t=e6Du*k>W#I$GpGLXlF7UcSbwI zx@FV=qyrs{c2}(H#%RyVkh2Wn$aI)Y(`mZX^Gt^{fJUVdv|iN=kX@rQ z%K&26T)+U3YC^Z0TC}i-Nztbtyt?_=uU_crw#@GpH(KGR_jyMwd}Ays%4-`DuxvjT zLCv|*zDe7IPkuOwZcfdGM|3lBkHtY%Gep)58OIRfrad}h*|}V)60z|-9A=;6PUJs| z2}37_%xt^($uj&z&sFa)W>mqda(qg8dLP6c`Jz zxyW_S?^ZDAQRA=B%W(0?md`LQc3Lb?;NOul<2I@;?-{IKhv;73kBSFVAk zuxpFG4z#%W6V_!W+X7rJVkX}>Lx86V%(Ver=bdgDpyU6D0Tc?AMzr2r*l}q0htEdM zJunj$H~HZ0lMSKh()FE*SK8*I^FC7-YO*$BQ5Cs}xAww}08TXKS%&8_8dtIIn9+e{ z0I{Pni~wjqSL>AGEjxb=nx7@zW43seq2dR9W-q*P0YCk1$TsV_mFSB9jR!|t#fH=5 zL;uUiLCmBRhk|$-|CtfMipEteJ7%g*z2pmhk|Cb z;}}5PC=9c&Pz8W8fKId+V34Bq#~1X@ub+#K7pAoRVxba0wc~o=-PGOaV9hyCGJac$ z^|Q}>*qeiRDG18Hbn!7~74cZjMM+D3#9fuPa&R z*UD$TcVjY+{ntKa`*zWL8OU7#$x1j-16`p47j<(FI@qO8qo#HN)H&|~NbE^O)CyF@ z7IY$crax>1wd|e#F*)6!73b%PoX~=C#Lmf~AI;?ifuZ|n=AVp@P|C_kZ(4W4v^Chw@FI^+Z3dS+@Jh?>}SO_9XA~cOx+qLOiIKtH=jm zIe;xhszx&DItS_$$q+O`)*?j-x8xpZa)Uyl6{!USBmg>aq+!dFq!LunsejVGgv)r* zquf^mr#wRC^KYjeJiM`~Bl0;Yo?8oW+HscyKTl2m-{SZTEk}uS;IB##l134(&_OS{ zMlRlJi~&+~c$D?;fx~X0;|q8FdS`qxe(LR_FW>w0Il2*O+0*&ub=Xk561T@%CMD%D zgn;1jVf^29Ww=TUakHjqSOyUGf8HP~wCOZq0BD7VoiN1P{Iwq#pw{Fi+dIrg#UJ&a zUs4uFV~)(X}U$w+f=Z>`e~=26=9{b!tN53;~{M0Am3b164NOPExa>r>CWO zsi#uV!^U6=jaIxa^avpRqyF8mpMgbSvN{E3)C@n_F5r*aO-`W;+NQSF3%7J~inTnL z3#6Ys@}9w*rEw&c%lxw?Di-EM7$xbRxAejrWQE)vrUDfTnO3LN>qJsHUWL73BP3(* z_gk-l)n8?r*hP~Q@DhEob;z=cHdb5;BC0tWL|B-uwX!UZ@wt)7p4}1S7 z)cLy0Te;{&ttqvOhFrr>End3evpY*rS?90cIHqce4Z=t}(kv{L_%q2*!7Ae6RF~o* zV@8jZQJz94KUJ$sWu^CG8$pnhdHF%m2vB`dC_%1^RG9Uz2aOujMqk})O-4tGw>4}r z_Zz$@_y?cX@ww=7%}*zEUhxjrJ(q;YX;~0Y4#dn2ao`t}gY3$9mDG5)Pfs@dp3}21 z{0f;uZ_pb=S{dLEJ41cnEO>j_hMlNr^@`_{HeSb%CFk5e@!~WpEAuMKt#bg2tUsK1 za1{yH3QS`t#|S(H0A>t4rbdio3{*`Lru5(#0R##BkG~GUt4oB9Ky6MWS_KkzM%(b{ z?!kExUg+@Zy-U*@YVngd`+SmFPl<|de~_X0Vm#J`NJN+u7-`!4Jx%@ka z$|NhL8`}zk5x`ULR}uAhgG#SdiBK21X(+2k?je zxbkNxygzSs9v#2$_cSwm16~pu`1#eR-=RC5^#O;*&%`3nkkrp#|8nX`%AwF@%8oor zoB^C2a(TKU-Es7E#0H#>weF{%f^{3%Pd*9g;x$@5xJzJ(|VKsmv;#gGY8G7w(~TEF>LP!{Ow?*8*`44^ZykF)n{p(ZM6THjKKVMxm6nl+| zvQ9k1L-T?{Um(gprUr>a!$>sUmDRQP5;X`Gb$v_1=CZO*ZNlO zUOCymgITycYBRjC(o?e5hO1%4x&dy@C>HK5p<(g!I~~W2g&PMXspGvK)WJ&%x7_jn zZ3_A^A$Uek@7CCmT@~1ZfuBbk3M8gH#Tl2evTBQlveE~!tsrX1ggxvbWGZ0uI1!ZsaN!0ih`9{ACn{I|&w7d8r!_Gb?rg2YpU{iBK~d|5Il5Y zgdw6>8t6RG4f0ixup#Ivw#+kv7U210IdYFSBeF6m=vuo|6o9;)-zF&OqJwc zejYFBXcm z2jrjsk0{C#IxVjdRmMn1~0yJxYL#%QESX-K9 z`2Ad9rb%!CI>*oHuc13B9c5m3+&#Sy3wL2f@434J?n*t}aaXMTzmXJu*gf>#w!X0Y z+K#2IzrH*gKfiR+hw^XcqP=Ij{-bMvE6I^-7p6PjHSHCJ3 zWU2hWy;sO=$p7aB)`b24UXrZzYwYupcY8`TRX=LbFMh;G#i_kZWTiI~o=Ll{Qp%5TQ` zIXXmeaV`t}s^<7_{@du2`x1$^BcQ(=3XH{G8=AqUq{lyh^Q+!FQt*=IAI-jQ-VJlm z+q%`%w#A~BlS#hdtOOGdIp}+ogpSSwyS zOYv#je$?NIg4DBKP|5xL2l&~%h>Gdi$xIXFabjHsxJ{NtbwV)iv=LxtB{45bDP}X(B3R&sHJhFnPUaun* z4%`q1W;H~zLI+^{Bh6kNUIx1X?8@)?u8_cY+boD$p)L!nTr#Oecp{m?c}n>;S?jWASH zt8ws;_n!0m1#FhAHqgo zkb*pSexQ6c%xH+U9i4wWxDEXnY39HJFO=8*%;eV5QTUm~=Fd~Ro=0a?XEHZhlN?(i z2dp9|I5{8YRZE4u>chuy!Ga=ltC=Whe$ zmp5)cStnhD3Qn94(GNKUcL6--*ZlW2=+bXP7JhT}NOM7<1B+g02j&U60&_`hz^ilv zBr5-}P0jz$3#=zy=wDm1+ONLPhu*cRy!XHCIol_O<%o`Y6tDF2kcAa;;-0Kp2!W!p zFzk=EweG_@{tt7}k(8-{L%(Q(7scJ{Zu@RFIxSzYZNb)QSobq-OA$ZE9a%X_M34q( zUv|v-RE>K^P(UnBr`4rZ}^G#k$qMXH z=Z+e;nK(ueF$aY)AlJ&|aBnn)SP}7cDf%Ji=R40Jz zeBs!a7ZVp>#ZO*%|A&~?Ytgl+5xeAtA7eu)748H(SA`48kqZ>PFhxfJ{YOiE+O&?@ zAU9-SwvUm6zP+zb4Cax;qEJGGtK|lGx~pU6P9uj>v?haFy6{xS{1frSHtQT zvD%C}0ptJhivPoM4CU{%!#pCu2 z+i>%LSN9-wBj8f`f0S3q;^0?;z6w-IzxCHhj`$7oDe;c_FU$PJ`E#?<6WRVOYU)bf zP(-PK`$>y6brc1&)>~^Y|8m_UbV9qhZBOet{KWbnUjF2MPjsuti6xy{w!{XuCl!ov zJ&Wnz;zUoL>N&$BtmrAQZ-6^Ao|eFdUoePzNaG46At2>yok1y98id1FuL+ON4o zFJcm642j>SPSN$6Dt5{wO!NqL&z&Cbs$tN>U3A52)qtJ5 z3WHOgB;?#eC6b%1ljqLCi|0+;=4E???)YB1zdyGYHjonR{|R;u*YM;?jAUfP&NEZz z4#}iXVB<}b46kPK6mLbi611X0t<;G%UEKqe`ZtA^GTnNVKd{ls=0UJINw*ny-u^?1 z&JCVvvyKYJ^aRB-St=tLxfL3xeHz_S>k?8o5YZF^< z*oU87T68O)1Su;a_Fu*u>H;c_N-kPe25wk2?vr;Tzh2>m4h`G5DXvE%er|dD z@e8!M_|ip}=6+(y!1Oc8WQV^MjB#@g%kbo-Ol&Qq5-3{INO&ZqJMI-W@1=RzKSj$V#8W z@=U__$mE7M@OjF-urHt*?p>!b=*6nfj)L~M*Ea>e-X#(p`poiA(2lq8g4D(r>i6?Q z_x3Cwa(KpL44omF*HJljY*frsC}es>Im94X9xtN+bT}*zF}Op->8Wh^Y1PLIzo*0i z@Iz04QZE;4zfk|TrRa0@JJL^@jX_86)Y|^^@80;C(v+0=yHa$b=B2wMFMo$=DEOUJ zAFuA9mxFQwpeMLjZ8|#JXEGap+WSQj-6Z_5_C+BV%lk*du9!C?r?qP}6BX$7kC(jO z2QRv)sMmPHesrzt!Url{Ypm-`(lu%CX9_D^?afS5@MN4E?d_VaUC+$96CBf1*hUa_ z48YEG8sa|nI)g|z?DBsL?!*vY`fT{!WK@*@dyQ}Q?4fJ$GabLl%A0-|O+PWX?uJ!;u&4RAZHuSO+7B~FWd&V!dVhr<-ZA|_A9+tyZl3*B z+rrhD)-G@ua_7;P0=k|j;dkxsm2G=TV&g70%gALKrADO@s{vpbq*Z@C+qmY(d~`hH zNuRvG&*H@+W?x;r_B^__=yBAA4STVng>04)Qj{E)@vP60mam+KJ2xZ^mH&723Yi1> z|I)xF(hvP#mVDvY-e;?KM^YPCKRFP{O3UvL?tbjOCidGnY zj0!w}p@PyT+B#Xucxl$d#9dcDMEj3!y|^-@z|oz^Py|hnc&uh}PX>OLE~(-izjelcM&Bv-^tAk?30Fa5i%J9gp^GF3&5-&peR*St z6_MzK=J}OIYcJzxYv1fT=dHWwqJC4GAKDi5bO(JV_2j5RUj}uCbIK^bcBsLsW&E}b z7V1FwqWV14d<_Nz^e2jhdJHT}jJz_l#j~BLunWGxYkU-b+`m?qwZmWNQqrZr8$UH* zhM6Qp{GAny805lDck(l^yL9%dO>$=YOlQL`GSxt!)#%kK(Q3V8VG`&=ee+p&%TTel z-={Bin~0x!*Z-$RZ=OXZ-6=!N;<~~ zVkSi7Ms!-0&LCPxbhH%Z1zwS)V`ETZqf6`4n{LBP+8g3_{<94IQbSRz_Op9f-!m1A z0O6Lac3{6tfn8oN5Pa`U_)J2?rXHSz$eloIOJn0MD(9%f)p{B1Jfaq@yT}9$7Hf)Y zZJU#eN|YCBdcEd{pZUNts&ktRbg^I0cUzwO5*tL}?uv70$IYR@b(WX*n9IjGkEyGj zs6N1c#Gd8SgjLTScTbmB$TC94@Xb7-4l1d_U!)t z;7Gi1UpFkRAKdr#_OB7!&vnGqL>jtft5a>AC;w;Kiaeuy+GzBW-zrAhsciTKb1P5F zFY0h5Y)KFQG^f-}ynj0Z%ZtAx`HLIyJg{mW(`QXaWRA=)ln z$)E!L{~lCF0tx5*7ysBIw&Nw~jW%tWya=80JA9yz@AudMQhzvZLdTeahnShpHy$%w zph6vATx3y0)h7O->=Nk847_>2r_2o7Lcv6YR;|~GwHtsHc4*E2{jHN1pabsfQy&(_ zF2T>#vy`k$+ldZl9%)*(X$97^q8VsE<&%Sq6{-{-E8Faxk{Q5)-%)lEWnO~Zl}oQ6 z?vyJM8ChT+=*^Dx?sme^p?i()wr{1z3pCH3Hq_NZWy3q1kcM}Em1ZF!+?_Va$)S9m zk%fYh@iBEZEek6<`J9$1WdTpc0FWiTe($Lu1mK|)5p=j{I{{3B6`{r#laKqng^n%h zvnp+rH(u}z>wNOmHgxsPzzt&;^u~saAp^RTAmrvh%#De899}?3C`KxOp2>pQB4ngCCqR z{l~RLw4&zV&eQ1Zy7W>xB?y4m__qNk_Fhmz>#ayclL)sPjo!QXmDOWVQPE;`yVyYd z)ULN~KWUhY4of=xa8Q?wMKF0MSLZM*7VTcm5RBlo2Fua;+AG}9H(BYK5*FaX%VC z_!)h}WgjNV;?TX|Qe8So&|OAV>L?}he}Bm)$p3?Vg3<$?N#FIa2`{T3)d*B0P>nz} z0{>qikTo{5uHH+f@``TO41N#@LE^!lhvuLCPfE5Ktu~X*Y#eL0!hcRpj8@8(+D>v+ zC%HBZ_Q%n{PJpWDq{P^`an{aeTdXl9F>bQiVl^A%5@S-VHp^6FvLz`tF5Vm?n_x{! zgm=s33MgL6l^WPgT7gb2OB-`_f)^@jp8iwn**bV(r|jWfgV&=!CcSZA`_XtTYCQ=e zR~d3kUhYlyGpSD*`N_;3=c~8{RAwEvBB5ImMJcra)^IN(Eo?$8mLSgnLH=Gw%~Oq% zQU0yP+Irh-z}~N0EK|xO(PcyP=&5@O=ym;089!Hw2rcO6(IO1~tWry5TW@WdwOs+v zTWaw%*VhvZE1=0jX%K7jXNDAQxtB0!j1Be;`D;;R`N7usX?#YjWsm+q#}D>C)uGwf zSa(VaIswn;@AOPFClTUF`I$tBtpRybe)lqX_N2FbD-s=> z+qZvy&S&_E&u+GFYE+{#^X@yh?rE_8^~nhi!DTMY#D+U%0EYBgl!XygHNt1gi6@P5 zvO+_p{N!g^5|pxJlVwth+2-*Zjj86iapP^)%71{(Vu~?4-tVenKvxRVT9^_OjTW;l z#gf<}JWMWA8ssY2FI=IA%vrD3Dm#XeS4>Wdr%r1WddR9_%P_S8_D>;BCzz%fV=SiB zn50zVBRaunz@|Si8Kc%g*A?7`S*M1ptm93VWHX#s$P^l-RwsvT`PCrR6b3zoDVHF&MKQGQ=jxjop8x!J)Z&vW1GflC-&te{H ziZ>-jn~i2Dx=gjd!(vX3H^DJ$bdtqv9A`>~*AajeB`im{D{>*av4;}l^RW30s#O`ago zrru(WHpQEbmN@G~V^VA^d6M|{v2i9V^W&9{L*^-Q#7_b15+4ozV6=`;vJi*p*YQb- z5Iu{2n>+6N$gf;R@t85aWd! z<)l-YtX4AxtbzP`@XtgT4ur#lho_neFrbtL=aK<#V};Mt62I7HvWzp^jKnyGljJv( za3q>jjpT2rH~6I?nyGdMGdk4sfB z_pSIBxwNuOSXCx9vWPUNMc03pn--zt?Scb0e6j~WwXAFB3LO{CRCT1}+Y JMCzJI{~vZOC_w-K literal 0 HcmV?d00001 diff --git a/data/experiments.sqlite-shm b/data/experiments.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..e1b3b8b3134d6fc77b0d3212c94bd696cc98d3a6 GIT binary patch literal 32768 zcmeHQXLwXq5IxyYZ6F$npn!rR5DAJ3s3=lY6ckWVR6s>zTY{oQv0-mu$KHFd*n2~< zWA6>Yj$*}*XI`@Ld4JuP@7-_qeVO^blif3S?#%4j_alFHrhMMo5UV6gfYvSfr-tum zSLEl+Ei0?eFRp4ezh|y;QB8j4f~m8HmnV#u++wB7yCi0{-v9pc7&(a}+7K%eWyDHE zTcVs;nP^9}CsrZicUC3u;P`}hBsw{M;j0m=JAUDvi7t*`_!`8Tj$e3JVlBrnyc^M- z=;53RuOLMAc>ltC5_R80y%xfI5$h1~c;V|3y@~alGvVtK8#sR9eTcq9Kj%#NhQvmW zU--sEe_|6tz8`sw_ab~#Vu0fpz8Nu)7(~cjd5zx{KA0Hd_=RsyY(Z@4oCzOFY~}cc zZ%qs%hC64%w;{H5{K7{NBZ*PYnegq1?H#}H9f;Ayj?S6zorp1xU--_%E{=a!^0CCY zI=^TWM~+-{lk@S!ZbV!^;ky%iIDX+1h&>&@@V$ttI)6OZ-t_H5>|1wMs4aXyVt>ak zJWot?{KBh=NseFm0mOmCWamuyLBzq1U-%TFhA=Y)OaW8C6fgx$0aL&fFa=BjQ@|83 z1xx``z!WeAOaW8C6fgx$0aL&fFa=BjQ@|831xx``z!WeAOaW8C6fgx$0aL&fFa=Bj zQ@|831xx``z!WeAOaW8C6fgx$0aL&fFa=D3f&yRTyTV(Q*FMp2(^X0*EP7kQ__V{D zr=2iZzC(g#_DfuX<*)+hN_6CWhaQ}<(3i6f26L{!NdB&W9Dh4Mk-tel0>|PMoPqOj z39iPCxC8g%VLXYa@HA%Q8N7(s@D4u0$5?=G@I8LOV*G<9^27QRO=d7;!*0hc)ka&W zR!>s=&?LbDVsmK4IVfw?Ui>auc%@OI=UE| z@ao}L{NWWBDritN11ePZH1j@~X0it4TDk#ubgmqO6LbnEuKH)<8|hwhm_k~ zM!CL!`4jy^l_URBu0J%I$&0p7efDdoYbWno_Z~t#ib|7fl=x9>BW(U5t=lTW)ij%Dm*|3?}XtM~qlnn{luvhV>YNH*Z z4JN8Bcoshw7kWlE_AuE8k_~%Hxy{bX_5I6Vk(H|KI?TO#MOl#SR?SCy zQHx)T`S?<`N!e+4^6w C1I(WQ literal 0 HcmV?d00001 diff --git a/data/experiments.sqlite-wal b/data/experiments.sqlite-wal new file mode 100644 index 0000000000000000000000000000000000000000..676dbac8dbcd9a2575632e3fa5e6659d62135383 GIT binary patch literal 1091832 zcmeEP2VfKB`|fT^OM}RiRRN)_aLHXJ;|qI3i%c0Iv?&z2ND5_%BvnL2MSmzmK@da) zMMPz|0>~`1O-`Zcz#HT(==|A3#?_bc(Yt6#$cM6cbeUj1A^u%K6fpjY)b zqw`!Hh9AQSU<5D%7y*m`M&Lh)z=B?Z;dSfR4_us_sU4r9%hV@pQw+>LsN3KkU550C z8PcU|{~j^SV==MSVoGhvi7|Z!4(ZXW$KaT_!F>jF89XwkUyqS7U4{-B)Mp^P!GInE zhqUFqMn5%81Fsv>W5ke{frH@R(Ek0o$7C8bQ!^9XACr)tsMAc-=?%&0Y1SjTZ<3In zmXtg}lcCL==<<0(rdFTn@)=zkbAH@+H0X5pFU)<;iV%wi_sL1=;|*m!r%g-K=yjP> z^=UDHxDyog)6>#ZTt1hoovumLYqJv5vs}N}Fj1?|(7AkVre2$eQ4>=JobJH5vN!q~wy1W+kV=DcBAhpR6@#bkpqzSpP0{1Q3&;OM?^0 z1nM*y=~+7FAt7CF zBQqvVm!+}3Rmp=K57Ji#OGrk#K9jzLG^I#jNYrG~C#Fl&0N1wj)$7JxlCe=wwYbIPXn!QpjVwF-Q(z7@XlIs?$H&rD9zCS)2) z|Mg@k@Jc^NM<-7sQi%vdJ8M_5B7JJ61{h4voM8_V^h3<0W+?R-<4o-jxp3*Fu3q>+ zm#*8DPo~c{}kR5 zUK3svo)!Ki{83mW%o83I?h$@3+%DWA{6x4;xJtNOxLEkQa6a=A`ek^-2w(&-0vG{| z07d{KfDyn5U<5D%7y*m`M!+Kk8W@w{xTlPxVPD@k820syyj}Gvj<6F*U>6<>yRgQv z3#|pakZQ0ChJW_DfHvXvrK2VVg;j^gf`q>W2=BlSZx{iL07d{KfDyn5U<5D%7y*m` zMgSv#5x@xi7ZIo#6x=GX^kj&j$iU$GLCn0pfSd58YSLefoi9)?JoQ_}CyNAhU7%WE zgMjFn)q^5uNBkprDLg84T}Y##HSpm7?=3sTSVs}iYe3zEMvX!Qf#I;hE|C5&FamxP z1V+Gb)<44|;0gMOK-lO5C4@vqkc4aqp^%Ej)N?QuNSDYyNdIg{knOBbtE3W@SRoP< z3W-e8h9Fb~k(NFoIg^=?VrZ|+OwvqEOQz>J>NGITZYoT9n!(J#OVK5Y=qVxaegq*V zV78J(DwdGqKGh0g3wlyK_ z&uFy2TBnRP$E(#+2QH(x<)Oi$=qhR5P!aPp7+pI|Z@JTh(Fx|L#^@mPOUDqjX?y(D zml|(JcbKEm;+bc9ZK^dZw3a%8IR;snYYLrXj;Iw9S_|#4J$IUUYx^;__ccv3*0%G& zz{{{uiU%MFp0n~mv*aBQa*yU<%XP^HTUCeb7AqoZ{Pp! z20B|myVK>{Th-5A*#O(d5OkNp#uX6)bjb!>5d&NaA{+z=>;&AiL24r)xK@xIRTlZ+ zM)$yyWSlE4l{W`ZfgHmW;wq3bDxVg^V zpF(emvq2vwv>F46m&&tLLGqxR6E9h$++zWgCxpFT-p?3db zbGja0cY=>;^8xmPm~3`%Sc;(;3-O^qzH+UCkGS$f&gu}p8CqTOf@?E`=YpW zyPq*1F~87!@!i`fcX!XiHjTEZySC;6@9KJI{kjwGLCyg-%aI#xby0KlWAx(^b$7v%~L{>$u1)9X^N? zbHNAMMsnU{mS9Qr!~uI<;K@<%eUKvk=}&82AmF`#=xI^cBgaM@5%de&9g2cK3wj0~ z^z#P8l96H#4&cAtK?`+9lhtIuH}Vu^9>R?Dnexpk|>j90TK6}8w8 zapJ>+;AVQk*oec2d&_W{RCvgT3{ne{$J${eBzgCTUs$w#KFXVYqZ@TeU_QLH^_DRs zMx*n8-8a2IOF^^1Hb;N0dHTqYVj=NF!2*P+IS917^7NI3^L9#TNc zC{oT-dPkc?H39nK>uK*^KR*ubd8b`L(wa@?g98_wo?br_{k&oN{rHGHbth}0F_gVZ zgQAi1Fel8OU^``aZf$`ZCCW}QJg@}_*A1MAplK*qg6$Cza*bsuXWX{`E(0a(b9nl#>daFZ!d>5*?FZHcO>3<=$Ws&I|-OOu{K#hq8Av9O2rLb#t9k*@=@UOhg*%+nJy%E!NGA zNzlRER+4lSULI`{z=TXBClqoSj~T20Eh@fSv(^uD(Vju)!Z+65ZZ7&~`Om_d-O<-e zhSfgu**&%DC_{wP9VTZF8td8Vpe^B1ba)x9 zB`OIaBIQ!4lt(&(1?a%gnIF76WD&|c{@{Gg$qmhizn@h5!0q$sG733-t!8a?Txr8# zLxwB+aMT2BscXqXuz;96sC>{5;9V!;G;`d{lsom8v9Sxc5Lv`Aj_;2+-GK1OL@*sDbts1=ou{KG6Kb zc~#BUZw8>Vv+~V9y!*1cQ)xb2CxH&jaFGPsCP=tq;vPd1TO$beEeQ-Yw&XBD=M}vB zCSZbqBv3Bnb6oV40DaTq%V|V-49a`<#;!p(SDTOgu>Z@($G%0UKm4ud!QftTY)0lV z3Fk7VBi(ROB5;##aEO3AKoK@-xaprKCQ;qkfc(oCc#4FuA1p)cogJ3 zJaWX0JEV2v$uh!>&o~iMAwEj16iMW8hm=P`>OnsKZ__XxaS0uMIkv@_hE2@*_v?jS z*|Qy86C7zwjvANt(=;fRgc3+ztuzMmcIG-w0MndEK5wqngo3hcOZ=&iGf>XMFCv@N>u=7_ITQDLvx(@Zv%{~qdAgChzuG>i zbK#8~*t^JGPcQ&G;(`Nvt~YW~L-xQ8!I{xo1@^kY^H=|RHf4C`N~SJwfu1jLCo(zW zx?ob+Z=or{w}a9HE?B=!RoFo^q_`IzdrOJWXb3Y`q#~(;kcfHAOJX5W%xd=g!;j~p z+<#}ho_p(|x#-Za#oLA!qq85hy3wZXoAx@PEljx{JGm)Oxs8U!%oV`ezK?4HUNDm7 zV!}%oAXkxM5v<{mD|oEfwh@@$+`Hze{&EaDEZfriZHvrYRQCnhspZAyFJoo17KZj! z_uFYjiw%arg!9;`M26_(gi9_;VB1KS)||0- z43nIo4|O5dXwVl9cm!@wWg_#{PS2^*7^C?$(f) zz`x%xA6ax}N#@`4kmb3D2V<8i>=Ss|tKU^Et;FO4r!eTk4LO+LrXVhERCo{uO<6{Q zOM&ynZ_P;DOx=BSHZF&y86twB;GPkGC4*;R(SY)7`m=3Tp}ejGz8aMAr@8Rng2^v_ zcOU)u#y=lFvHxSr^;Pev*6d*NjFJPP6U;-7tKZ>pIH`xvuD?A8div%l@7W(fFBZv3 znMA_VngMz`L38jsv#)L59U6cR>S+qk>l#;24NRTpeGJ!x>3ZT0PyFZ0+~tz2{^2x5%V|%Y9>IR>=yp~ z>W|~l0rjDt6S5P{mbJrn{gl-l72YizbD&f0`tGqW-@ILi6>zW*c7eSIo(FQ!b{y>K zOTX;P-^*epU=MRH<#H*Xt5Tc7n!KgQ>QDG+F3S7h`l!geVzWg!Yz`EY(%h({pwfXJTU7Q?|^YjgO3&&jCtai*7;3o$KV`#&rpn{Bn zfI_iYO7b`$YYfIPaHYD_XRA=|(KSn+JNmWR^6#bfibX5Y@#_r-8V5UFMTJBm<}dT>C_o358}9#femly`*cI4f=?SwX zZhhj`K3C9{7qh3{=^3Mr|H^9ibOPwI_{3goPI*Up9Iv&iJgAV4$ZZ+=NX)d_5`ux$a)}taqvj#0b&SKAoKA^za z<2u%(ALQoX<(a?eZT3;!*wKlB3dlZ`Dp)wG5K|I9Cuk|50yZmT*k57baI?F9wR&(f zv*qBiP0g1Cp|iiYYVprEVs+2Atye#r0J`;N^0j(P z)V*6jIs%q206GRk>=4Snh}up&cM^dI0T5=ntGGlsPa^QW9Hyk>f>bV-NR|A>1yX?a z9SVGDp7AEi>+r{G^;1OV{C~Q%_^0Usbg4H`iUILRQ~vM#GS=D`37N;66h5lnc7Na4~VysVBvoRElM!k?Jru|7b-1gH2h*-ZqS zQT`JnK0e?4FLTkw&mN{Ke@CYp%nzRyytR$nCB2TZsV6?kkqbI8;9L^+1p4Vl1s8fY zJ_85N6KTAJUZEmM5h)Wxi001*#IUHk`uVBy;DWf#nc(c)nCly!1j3H-Az##3duRxyDy7*83+{gWiO>*2_TP` zeLI*<_D5FF@qcVa`(CQK=j6jv=G=D8yUbgcg3kTavu9T5TWa~yQjytpdg>_4J5k_b z#;fD<=TP9Apg?wYqs)nk3doVHOo(C1jFQJW$8BL%?3tKP6^Gi_xLnjvvhXXM)*st~cjNVGjI(E1vZb4!FtG1>OjV&WI|G)J2>Y z3evVo@sr`~M>aIJjc$UZ=oQ>5n;n3+qaZ$>1TqvxC zvrDmjS~v~Pvlo{L=QO&+5Z`+uC=n%-!Z+PDmqJF-V_)26@8g>!c9 zdg7g7=%{J+=IMsD>fY8UX1}}RaGoxTEpD8rivgyCkb8_#vk3(h_IyaEL0O<@S%mOw z8K9Cw5ekKb$D7UFA(~w{)_qjG0_C?5ZqJ|s&6eH&v+OW;MCT?6yMDQ8sCw`!t7Whd zu|Hi^zZ{wyI~ar=w?ADZc#iCX<4N7D8t@>;22a(aTzq(wV_Q9ym;_G+x88WnvAaP9 zX2GEX$vYV+Z~9BCBrTpZ7iD)CvuR8wI-Anw-vN|JJxI;)5n;QC?UU7=4aAMZa$z53 z--z>W3IG^J_i_>8wWp%TnUHVuxsax-0PXpD$A`^Uz$Eohxq63uqPgIwAF@03{~KNW zWO9dh-(IR7JjvrUuY41v9geElO0_3CUY-v?mf7(cPrX8yiv2wr$6oG$;hXCvm_l1+_SkowkGLQ?1oZU7Y-3nj&VbTm$8DN z=V?$d>=E-wgc|(BJ>kmxMp%2;VwEj=8o-P ztiX}Rx~R#NX&7#X6&~;bk-t72{n@&}UuR;5iC_Ef52h}#Eg(88>etB05oZMPVaG#z z2LBM$C14wqEj*TcsJ;$%y1ZgQptzw0=UEDI$c;Us;^~USiY@qhvixETqfM! z5cM+Vkt)#Eh4~o@J{R*25ugw5G~AkyIu{)(NUYf)H1*1~07`B~O_d9Bh2W-N}{&Y1j!=XOtWCw5Q4}(z{$=su(lvQ)2@oAfl9GyfEYtLd=x_>diOybx_ANcJ`oQLG=KMZ22IRig z7M=X!djGyN=Bd$KYl6!1!2Wc_M~RucPK3C<Q&y=*MBg9;aPehSyBM zLK>Npg83T!Sw>$NqQ1TV*t{BQw7>4W?N95W?F?!`t?qaLooaUDkLVG9H*y=N-PDd< zD5E-Tp_mzd*rS4%lQpUv`*NVKp!f{XOJuNqmB%7}Z%9%%?a<%pwiD%ay&3gK%EvaR zv<~h2p-}op$m?9Exw~L%sF}e8m<}fExOe5=4a+9@2UG(gT&Ah zO@N%^vt#m%3vXoO##Nl=n1q|T8Xgb<=Jgb9Vr*UD?7&eG%MMuTGj)Mg^g4nER^7p| zpgY(tcuNowu!=t3-y5VEqq!GQMWh*0dioV9hE)MPI#Vr#wOOY=+PO0h?H{>w?~M5? z%z3L{eWhu$Z_$Y%@6LF0%lGzGiB9!C=i73Q5s*_Ez^!ZL7_^%*fG5Fij&T&157wX^ zX-0{J+slFsrIJcTlo-mdJl0<|0`&Rfx!;{^Ye9KmbsIIKZ!7cB>}emKs(%9&#{YOA zYtw4=vs0}W?be`6EY2!o2A+;eU$84n<|cY&OGkNN$uI_ej>`aR5e^1?cc~OD(LgEW z3JH&6&@nKj=BvGhWH$>sykuIpZDBBRVAl4T^+RB0db@*N|9Z+eDwgv%~kVhmPY*D}kAx^Q*K?w5^CGS{AETgyOtVRU8 z_}Y`krZ5y5!6AfBv3al3So_#eO1Ndsz%uB4-ta8l7%WXgR1qI%nE?XLm!&K6ikH6h{jdqCaggB>DC8D^Cy!-_1eJXMSFWgTV%4MP=5-F0_ypmJ&qD%g&1S8!Q>~NUe6;S0Hz#Qt zqT>I}IXq(Z&+2EtDwRk%;Jh+(GcR=N`@w``HnNi& za)Eu>H@3X1m_cgSfKKn&y1;wwJ3QAcai5B*3v8v=5&RlCI^v{YIMfCD1|JAQ0bA+g zAI}XY@g{MuB<4CQYmK6pqf@yG6uguQ3BhMuf+;XMU3D|C_0wvUH)__PCVzcyKKg7s z;rQ);qQbYE8f3dBsk^ndhBvntlw*dRlP$Zb`#Eg+9^--83aoGCCLlt`C4%*>jzOyL zWda%PTjgR($!7<{WSBJiq9If*CQx4c$h5+1P__}DT6aqwht8PJe!i#n59+vaRs&!& zaW>y@C20q%cG)23R4s5B+Jyov5J8G0uHpq#g!|6BfKHFLq>b@7P_uyj=a!tNB?`sY-w=y z_2QWmQPKR+x(S5_HDY`cYXYukZ#d@0Iokj`w0BTYc91K31-l1>ADBQhp2Gwr8E*0n zFQbE1;!8#;DL&=ZCJ4;SgQaIOK<4D|*e{+qJ3Q8WdPBDb4~g04?}qnXy6uI%tyyp6 zdKQ^unt&4pE^1{C3b=8h?A{z66a;_*Etdkfsh-yqK!65~Z(i5%P8OiO2Rj5rjEqHj zNB2xz6}i@YxTCz=kpA7#ukYT9KeR5lLy5@joMo3N0XU_4E^0Ck3W}L*iw(_grp$Ok z!5rf_4h8OWBrmgVXx#*>c0uNm;BnwN2^Km%T%MMrtcUW~59{>KpUcgb(F2Zta6^yI zil>bI_~1PC;A%{c9R2Mj<&&~O;2kou%l1vf=WF^HP* zc$Yc}y0NKu-MdBXM28cVcZYTP#eAee%>UjRsz>{O@3wvHikx<=A7Vp-%dE(8SJa6D z7w*UrlsWFm$3=f(#<3hGAWP*xB1q{rW?}*y5|1O#1OeLka=qQ3CdHsbi?`Q|zJJnO zc#Qh|uf@Yq{!Q`i3C}FH&lj-OC(DY>Y|Y+du zV!~Dfa9ND;GB5xWQcxTuC435xj~Ac?-!$3t`-d>S_{PzK{lpD(Ve_4dy^e1|o8F(D zd~D^j>b^%y6=U3)hGPniCxN<5KHOM_2Yf)pX-NNL>jLp3=N3PxK4BSC7x*Y3Iz8%o zteY_=t&8kHsD?r;N(DoD?bw6mtj(#pn2Q7ObxBvvNh)&zsTyujej2 z+gxh?;hN!!q{mHk>Er*!y==%)%jg*AsB=3mC+DogQQLDeZx^cv%1%1U&ig#LoFMN@ z=kmd>nB#L01PVq9krY}_@i|X-jsTgT%X{v;5hi9m_%>Q}VuN|#Guzrt-3YC~mMm&? z@B4;o1v3nFE$>|-?>or2Q%9NG1qEeVw3|wR2NXa_CXGu08|(P=uvQT%8QgD>@pxBs zwgA1mCiU6K+0ZWhk87#lUALHzb-&YP2lXr3o%w}w(T!)h^9CT+IZujnjDdD=iEtt5 z>L7wsl7T5SwutKGJ-AdZ5fw28QdkQDN(I~&-xN8B8AHYYZCl=B?;VvQ%ZPE z|7Hl#hJ%yClx>UAzP;lveMi`p%xC-nW@Sg0Q0dCKG{7`t#zCz#0Ls8%}oC}whBd!4525s?Q~ z0x*eWE*}+f=lS zT66p0{)MYnp+f;*H{UV-RddnO`ZFfytVH|QoJ@GTS4*nIvNCt$22X~ej&TF0EZ}As z>VXl!+{y_Y2JB9W&j=08u;j4H40N%1ELNt&WY_ff2mQEyGdgs5!V?So^*3AU?v9oH zSO*=SH{$+;_r&T!t!b~ckqr-ynx%8@T4KJElUH(aW7iR=xn8O4dng_d0yY~++bvrc zusnQq$EF7#E_yb;e{!ZSCMjK?s?Cfc18M{W1qG;MV&Kql_}3Wzv0H2S#WvmD`jGYg z*eA>Q86F^d?Oyfj=K_KSy#fTis=pbXSH_X}VT=Gq03(1AzzARj{%Z&<=oJ`Vw|@P= z#mSl4@hQ4YeX=&i!0dy%4errpNROByUAp$~5yLzd6I(5&)RvqW(`Vq29=&=Dj)@!G zXF!+1BV+pY7#Y)L=#W8u2ErQ*=rM3eTh43rQ`0o?x*uQ2-=BL-ra?0` zGr|2a3F(PC%`~0fker@oJ(Bw-3F&D`$rCgg+RTYApEqP`^_ec8(WNox$9+eGPG|qZ z+~=$av1o9goRmJ^P}XzWv^0%gmpN6R76XVoK|wz~Ej`8MbE(?tnnb-eD=|IG^@|M? zwfYR5%hzV=wTU`|CPSy!%+P7|)?-RB)iy?(sn?`VP03_lZ~s%1p-)drF8OFyavGe1 z?XdC5T7yP6-F|@e?@~tqF$uafIDt%{PLq+IrDHz6ZA?OXdJ6qzG>O_72HX3=Stjds ziEx}DnSOym17ExB=aOwm#H46v&M5glsoDg6y2kqMNqTL9?H!m$QP1+pkuM4 zKXziWAv0ZH`b_DE0fiD@QiGi*m&Pt^L6iMq7( zR83M!dOG{|hE%O4No!ysp#LaMydf{rAwQT zIZ?v^Z2NfnyQZY4O(^lF^;#==Rno^8CIT`g4l0FDmPRj@5VmLGkCMMj9S_TxLt4cJ zh1G4-CUB(Hj~b?=!01e4&`p`D10Xqn2AA@zoF`+`w5htb@XA&YORoOc;)$2%Yib`H zUbj`Nz!&RV;Tx|r0Nwh`kqr)Fw^!Q{*t z_8>t V5IQjamt)c%kQmtN}Xg%5P;x?TBX`s^~adTpvfGs$3!bk*pKBZvl@tqYho zj9c1k_Sp|Y;j#L{Y4lT#g%5;(3U3Lo2`>uI3V#y*C@d1@2@eYQ2)`F@7j6-LB3vh2 zC0s6CEPP!!UuY7}W?n|W6mJ*-i~vReBY+XW2w(&-0vG{|07d{KfDyn5xJ00laV9+8 z(3k=H2F4`VKV=*Z`})Sgu&-zA4g0#r&akgzq+nm$NZ*&QWsHG+O=BI{KVgi5eGMZ$ zt`|;+U341kswcuO>N(g&#=)*yPuN9tgq=VFyYN`ph0%BWLuELxNsmKZMGI zKMi_1;PuJ}B3o#jsR-ydpl(8=Mj`Zi6YEy4Wr^}3gapJtspnw!jV@6vmrE3s5|nWz zghbYkAlni20kA4jMSy;qSjJnM_T-HV)(gYX2lwu^e}C*wbl|zy;;OCQVm`VwCghE% zOX$FFicyQjHPpS!S{3JF0g6LX+LIMQj%9J&HCbi%-t}Y|yTCYuLrHnXb3CU+0#YG_ zoUirMG$qx;(3jzV|s@;!HH2n7co@Pt)QAM8@CZW^)0+uDbdb>WmqM7{}jhq)} zxsw!dv3|Pj#Xx1RWcOe(5C|Df=WtGcLrSFsKj_(4CX7MWZwqf-v-T z&nwG5G|feph*szBbj&p$%Xp=?_{}Zor2N-x>BuhX_;FUJmkG)~j!+m2wW_aOtQn+m?auV17FEHpg^3wGhI!z!%n zs>>35^qdQsNFkAtd^KvPxd;zKpA|N*7WrZ^+J9HJ`@uD_`AE*5wPT(chmLkyw?8lw zL^l~RBiCvtj>XeXQNo31Dtq0iPm8Cs1B_F-9I$!TS8<)Po&`r$Q4C&wyV3<#g-LfgUF5F8!Com`TOMbu>m2`~HLLGqO8 z#DPsvz@<;3V+U<0u+iBO0hhH$$&*;25<@#Su|z82N$G^RnGRZs3Vd@WJ6;tdY zKpwQyDv?6Dh!Q85z~NANa4>R@d5V=72zDU?=?N7Aqux#hbJ5daTf+kH)Mld-9NW+ci&0o!izyeo=IMaeppqs;<`MK^dxC2(W=uaTDXvb zEOSf&Dg!L#w#FFp4nI@R*j&mXt@P~Ek*RiKQegayl$MwUYx)k%57ZT#k#MW}ae zg(2OhXAd-H>jK7o-@WtHYpuJ{b%9X9Aee&yb%7+%9UNp$%<&E*fDyn5U<5D%7y*oc zrwC++8(-jNeAax=b7e2j#->o%my#lAIz`HO5@Dw^z9+-b*0}n!O=lOO{ptnNtFQgS zocn6{i4DVFL_dF3f5p%h>1vg&M&po_avqdA>H|*6ce&~VWfze>NxlWfIb15(QVp*I zA%+Suw8A5JEECiWLvu3c3%0!s;*Vn&3LEZgWj+>>HCZ}y5n7#FIO=i+QV+5v-?kBo zOJ!OZ2(dLwr&^7RfskV~%D!sx%rm_<)tVLR(?AF`2cPG1;cON>6!hu)T~g>)LnxFy zDdN*+Q6miP(IijFJ-8I*oql*N=F6VuBdVX5iog99U1;*c?TokfvrX|zDBn3(@*OI{ zPE-Ur3IguNq7k+d0e39w$vu@o<7_7izz*O)Yi&#r7{OYHZ`EU(0!kzy6(q%zP%}+I zbQt=!#sgLQ<`|Th({IJwy(7&9x{JSA`j1CHwdu3&*w2ybUTUkCE<^ay(dFF5@bd(N ztAhlG9dL%9&?Ci{f3Vg1v6Tc*3IdM)WlrYcqCug95#|%@J)PYML3$7+ z;A~6j4z>)Mxxdagdkfv@4hrBkG4PMwywM#LVBJ9$KKv6SfDyn5U<5D%RSp5HJ80L6 zDygT4bq4_rtUH(vf_hkYkk-PC!McN3cd+83AJ!dY^k%)+9sFml@wE=hFC?_?U<2VK znyQ%c>kbMtn3q-@)A*e+0vG{|07d{KfDyn5U<5D%7y*m`MgSx5pF^ODiJqR{*hJ5` zcuaK%M=d>Y@0oiezrebK|GBFRpD;!MBY+XW2w(&-0vG{|07d{KfDyn5U<9}bJVJLc z@JV<9tuJ8L9jt45YWk1A*K5n@4o)tiFA%mhv{7(&;J*QrxgX-=-`PS_h$3KeX;DGj z3Ll3y(IXdGNfl!Ga~fJ>F(n;lXF22rr4or!3Y|#PGYlm~21ym@43bh zx^i0g<5E7Ym|?-L!qQl6dw2G|%OwC3XbR>~VqMNdFS@E&O2jIP5)n#?LQ3)_2(q{r zNEiKZEoFA#HZ`);c#!z>Z+Fc{yWcsx`O}%`-0?A*V8hL>uC==yE8pCaQ1%j^#_C|w zx_L!H9a9j81Q#kS6=4^!MprD7%jHr^$sY-zkaIXZAx1sp0LtIjapjbr$ZR<}Z9__G z61t`uuA93oQXPMV(X?Z)+`nn_IGpRfc{tW2I-5sWl6CWnncAj6J2SLBST|-(Vg;Iq zL?uUhy+D)~@#{xQPf)EqX z=3OEcOGq)jpc?B7c)P9|>kH7yggxHd7H?-`eF0mF>XhOJA*?Upkx#0c`T|Yp)PmI= z92&6ygE||Ot?9ZzMBv7N=+vm9NM*$Pf~YWk$dAFD;UT;|UI;*4rMf*Crj>(e#SSMG z&k7hniV5i707@!y9@Xg=_kvCVdBq*JWqxn~SvtS<3HALgbK&S=4RQ|zpc~2kFAQw6 zsi(c|awN=Zm0{0-^B@9nMPV{d>PaWO%YDaR7&AqMvDk46>`vx=Fgi!lYu?G#xK7zXgbQj_0O*j zmgbp{5z*BbeRdO_kLx9zs@S29=dEz>&RBd4Fajq^DkJ6-GPs>0k|@PWIgd4C=tz^l zwCDUwso=&Mk2qTR-U)MV^6N#p%PI8R=$y&tzgVY^%VFFY>-&8U{qCyyQA~NwK88HU z44pjERIg(S_YX5ty7hoeB9TjYbYsvJrOLRmI;JrHFhi-tO30JNQU#wyW2hQ`Ipc-& z4fPL-3+&fz2zcS%^grpkKv>wz0ntfOha=Sy>jY21A9%wEU<5D%7y*nx_%@ELD+|h>{Y7j5jg$#l1k+{=Yw$Okk?XrG&nPS>ZKLF{PqlNGeeh za^5u67x#ku&-<2axjOl21+r9M9{==%FU^+0*NZw7bVk3v_?CWd(aEEOPT_t8kNuT}PY@%35x@vw1TX>^ z0gM1f03(1AzzARjFanQ4;8FbuTEZK|&~L)(3#5LZJY#O;KbM()1no=d3xwPV9v!$l zpgny&XM=U1b)6Q9lzY)3NlD7;DL^Snmpuh2sfv<`Bx12t&YME_$|WFR|9Gqe^=<7= z9Vbf4EluPNC6r1^i6k;otl(|!;mRenoc+uv-aFTFDYCSE_}9hImu=ESZPB&XCt}C{ z6|IhI&8*#Fm!kQ+cE{bSDt3X8H|yP^O||XJuyXd5Vl0%35Q}8cXF$Q5j@Qa1VJNrW zDc$|m(CnesRvytMT`&qH!6ye+NN4|M!eRs_r_MBD~eJC zibQf5Z|mG>Myik^5!M%AVr?yT;4*pxU3<^kq_|Tg^2K{$eSv^-bK%Z!`4;1`zQExM zYgyx)m0*2=@_H<+FYxG&9E*EleF3YsI^A22APM;pXjW40R&-*lFTf-d=rp)b7i~Hq z=b+~^*y{qTYTW=sw7oMDfZcpn+dydZ-1OVmQor(PGdWW=IvO6cJKF$)8f!$|WF$zvsqh z;j8ZmkR?JV{HDVWTZ_Sk==|BqyQqnu_NpkQ8y{3Vz&x68NbsT`fj1;b=rWmHN{|ZP zM2S}}0oD6GA%dM77uG}hzja*q((_|%{RnQL^U({YEjiji9ao#tgJP3hpY@>JjcVA! zk2f`$I;O_{VMa`AtIH@kCF9X?J#MP^zAz&+HR3X34JhU6jp~ifh*bn35)-6M$zvT8 zRPXn0zy5a3Lg+_O|H@l09cpFMvs0rBZ~u9C;mOIYI#h`7%{wY;*eNtM^baM3iU6Hx zP`wxPruw*Y38>y5?0IQ+gTb*V|Lo{yFE zhH}(dX{OJ1qWp`dZK=;rwd-+S8M5L5ifdzUlFF7(eAZTX=f>C%@h;}q_YX626-kH` z1j(x#1G)Pu#7sT^Fe6iu3K1!nNF==VLtnWBTGa3RKJUQ?)gVtUrXqsZk1<=&!<}Q~ zSJ1CVUl_SE`Zaa@B<2U+Z3;&%A0JZ&bx%V1(%CT8H7p|DybMc zdlAramA~pgv>w>I_3E&8C;`6=cBJKLyyBhCC7w(Su@xe3w)Ps(emb>?P zsN=4@=?gPL(=$%YRK}DushpO(CzVkC=doe~jR^Ky=B|19fEwlhSS@X5zf^Pnw9`|^ ztgnGCTrD1^sS|FWb7lkWF`RQ&$JE@3lFFE$36#*P_fiQV=CLjS9SHWfj;r4xY7xp` z_S1(Q0&3Zf<>FLP?$iyJ?Ue8~#&KsX?1y;g#+vzu85vzmQ%EFY1&^aom@iO;YH3aV z!;I8gOA{-gaWsDc2Ko^cE}k{+?4$r_w>tZ$tYbAxbd4T%Q}*seb^I!8+QeU{2zPUA zd2E>dDD-e8tz9>0zv#MMgSv#5x@vw1gaJS zxE}%TM}Yegq-#=>(=_AtI&EU+M4JGAsy0E7`w`%N1azB@wlP__A3;S1KHQJM*M0=u zQ;t6OhGwCJ?nlr>IG84@x%d4Dgd>=@s7TK7dt(GJ0vG{|07d{KfDyn5U<5D%7y*m` zM&L0+pqYt;Giqw0@1+07`VmYyog!)SQ)V07kKi%8rts-t1TX>^0gM1f03(1AzzARj zFaj6>i~vTU{0Ka%AAua+lGYcn>kf7uKKa{j`6&(Px+3$b1{fQ%H3$d!@x(`L@^5EZ^P5#u#>O-kn zWeqp$K&zq4HtEeDNb44it{tYg-04A$(Lv_9j*ewI?9q#7p6Ruz)~w*h>L})LEzLa>!qMzC@PpgBDyEbjy6`PP-b5 z2dzT4)=E?Vnr5-WUbCEe7iglwa=N z;k}%VB*NzXyzyRjOjuul_Bzq5?=N>F0(VQMePIUc3wTY5JEbmPLOs?OVDhAjF&5vL z!TJKgO>V_7!)6rT1sJR^;9G#HpwJH|)r>wdR(J5JMIYWA*gSd;Qx{kf5SoySI|e}&94YR9e}hCYP{|S;l-dv3@r#1A|-r9bBgIHu4x@b_+GZ$>p-GT6~BA>0637rLHv;^y#qtE$z}uM@!tCob+O!ZuSz*%~M~rfA!WM>Ue7* zV5ldxGdDKlvP8pgC7_Op@DDR$S}s~nDR^uWxrTxk5mlzDS;y4gKgYw9J)C+Nb};Z?^z8e+ z*jN$F+_P2A_$fHoF}3p#GoaN;H;fRI3f|-g*HF+fA}8#g=KcQbp{+`-J&PB1wpW}l z|D4kG-KZROe2g`N@{t*r835ll)7D?i5E7AGE|n;G^k&d7;!uZ|`kc)Ln|blT?wGtf z_T22sxE1OnJJ;}Z_spd?<2P#-n%Z!fffje=?QZAAc!mIBNChyXP{??^dj@R@a@yT~ zv-9zK$dbD1{9Dux8#4sD`~n)#r@E$#C&uC?U3Qt2@k$ApG_4`noUIGA`Xx!3c79nF zT^9(6Sjx^9SPFmQ4I_XNzzARjFaj6>i~vT!4+y|50XZjy_M!u>7b&zD`V@ldy-W_X z2l-O)UPD2AAZFav!GNhoiM2_=uiPH5gy zg-SJ)f0&V}D2a$9#bQFtpUprIkE$|l6GB_5egq@iiW+}bcx$Dbegu*5nieHOqBs2r zB5^;05(wg7F#;F?i~vReBT%&v!2JktKLXs30QVzE(`YmGwoVLs-FR(^HZ4J?8L!3t z2yj1wN{D#4AAzs^2tLXAr)Es8MoDx(f~SQ&Y0g^s){j8gpLv@~pdWt(MgSv#5x@vw z1TX>^0gM1f03(1AzzARj{Dr_XrXKLo%}pI){~zv05PTuxiZpRidwLx~knooP;T_oF z4I_XNzzARjFaj6>i~vReBY+XW2w(&-0vLh+A_9-h%?_Mm zbO#;!0^twCl0ps#O9HXdfM2fzSYOzYhZQ*zQX+BPdO%JQgeFy+pieK|dO!kerIaGM zQX-~!leJl|0ErHZ?3&>3)F@=x^!1pR&cACu{My4m-+!_#`t2#=FUgUM>cO51+X>KB zo4C{dYMnCH9IxhRJx~eaDRoR8{KE{al~Ra+HkpFrYpv9JMKCZkV_$TKqC{j_H#>g& zgd_(u8=hEkH6scY~=5Y@u}r>3#(31W$&|2>B(r zN8lFvXuLgs2xJRQJ?yC*)1<%~QP1+Ha-@{jy`jWPDW9VskixfYnEArmYj=^Q+pu?f zA9%%_ckAnn^Wh=rrf&MlmN$ewJsb91VyHq+T?#9uRM4G6i8mrqUQh!4BPkInl_*Hw zx)ZEdfChe1i|DTFYeCl?uqas0zfH~%mL z{Ud2@Vu?h?n@H4pMI;!@@tIp{_Dw;Sln)2qy}8?*E9|P2jCv8>oLKYokG3`St~_}9yop4uS3q|HUWcS?@b^cpKxpd1VWyG-jF>L3DJVJA zr1>j+(%lLE^8rR^Qu~V%Xn!N4#8Q&CCM)X|(3YUEs7C(15fEU;cj_!%Sk2y+;P!ZN zXmNUtULMALTj9n(kp*!msic@ssKincNl7FMC4W`|{Rncmq&-}%gnk5r+8y{ZbFkU6 zso_)izUYmvH|;uOS>&i~tV^z}%;Pe#r_bXoE+IC=w=e@HnagZS^WMU7(JsuV0uUp$#4>A}FXb z^O&!Jwt7LEeQ%6EG6Y%X5AODh@JaK*_qwlpD|kM-xsouR9&A#_Pb$ZJ0k)v&pR!pW z|1bk>@Wdjz4X%{O!3}7u=P%S;fA4!WDhQAG>B%>sK_My*J{tHQy8dBk)7@u|s^h*Y z$J{5DnH_$amDbxo%*a(zrAVoeC}lj(N&{{6{D}>-*Y1i%mSz2p&D(w3KKbcJPhstb zZRV;6S1X6ju#=zsQ4pwO>g6wH2$;z!mXS&x3z|YG2vnV!oIU-+3^XW&x~5dh>+EM} zxL#Fk2GYAy{Rlov3q8;|P4udpegskQn%EL)p*Q^qqHsTg5(wg7F#;F?i~vReBT%&v z!2JktKLXs30QV!n{RpO|r)aX0(-PCOY;75`G``7^j1G&va3BW6gKuKjz&aGs1!)28a$!Yf-rq`6wP zqD`6K2KOWIwI9LMb2BftochHox*tI^p^8R2*7tq{LN)VNWfF&i~vRe zBY+XW2w(&-0vG{|z<&>cmZsrw(k)B_VP8f15&YA9^#e=y-j{Jdg8$y-h|d@!fDyn5 zU<5D%7y*m`MgSv#5x@vw1TX>|1Rm9oKm*6q`T};{!H-5)&(!9{ZE)&G0Qv$Uhj2dv z4!)KCC#=aG==+KsDFK>vuKN)vL8{KV9|6dB%V_ZwrJNw-ysiBFd@E?HSD7`rwM_%; z%y_M>?hP|i6-kPe5~V`So0Q$>TVWAfRcRDa+tlAqjMv)g-Vj64i>0CShf>U&5)@5L zl@Wr%`T|V+aIN6YuE_O=#30reaK{Y0iXH0LOz6` zybu}2`T~ra1Uh|~-g1$JFJ>kH73xQ;WdH}jA31J)NPn;A9(@B=e&QZ4Bd zV|51~%42`e$~`lisSB(Ph)%WkBY0mB8m15VF}QQ!TKZ_bJq`$fzZ-5J@Gu<+yioJ> zV!$J&R0Ji0VW?EhV~v0oRc}h}?YwRrDv12|o%z{I%msb>cAC`sUv#6-(|uy=zNd~a zPyaR6s{ErtG|WHDkSei6BooVdR8;$XD~PJ+UdSD>KR|&j*Pk4CoKo4Dxz??kY~`sW zb=)eeMU+o2+CR(;^$#-=l>`)UNvVwDO@rw3tstsiWpulQrXd_=ypW6b#+!*%Bq35r zNs8pHHQwi2tBAJxvm8n)DZmgaiV#WV3Q8vDOI!W(t)Q)5pl+P^+vnquCGnftg1O6W zT{~8xo5z}ToipZ;I=*i?q|{h#b^nwH2K$8>LaCAxB8gN2%8>jq69xgMeR{ZgmIYac z|8H`OQQPgR_t*X>=>FEv=hg8vF&j2|7+{$6%ukIZ9(5xo|g^P?6H`MxHBeiILx{lxbN%h&0KP0IXZGjaZ6hLDS7a+!kU z(VNjNzWHod%r;;3!ypt|sSV;VQ#qlZkkdUplrjbU&!0D=TYUf5JKcZ-r8NX&*}A~o zBY{IMb=rHJt_ui)psQzcrGk+1n5b1PZS_(9VMb1O_7Y1a5;>2|fVO(xmiAADd^jChE~JdJ zOdoEmINwCqpU~?A=8n z%hZ3HuGWk<=Z#p?cEG0@=+?0g2{-TdSI2)<4rbVbfPY#?j`R;RQWYf^Nfi{O;L&EF zgLjpgV_U~G!avMVbn9CJdU`5&4E@l^yQ&nPVSrPrA3?u2X1DvOC}E$Qegt&MpiPN^ zkvIJas^fkHB@o2FVgxV(7y*m`MxbgTfcp{PegwE50q#eD`w`%N1b&QcxF3P9{Rr}J zZGG^>oi{$A`w_GdTH6t};in&gkP?cRH}vBLf4S`|`I!TJJ> zak!SgWfvLxM|BA63((v=e#~Hf0aih~mO7A;)(#C8AXW&kBa9%uS~VtS|6rZ{~+|8BVGdePV1~ zAbjwzzppzsZ8g)6;KP9E2~oL`WW+K-SePN?L@)~ckUko3j|Bpta+ho`4|v^>z>D$# zMW{$nSfxn0gf}g-t)1WXYC|z8h6&J~%J#8`bzB==N(Drf84-rH;=j zhbl4KfW<$F^+dlgLn>92R3r!eLH<g zu|%v;^60;4RrTXDx76&Lf-ET?4!nDFx2=1}i|FRWnxB8Pt!eo>5wK-WKMZmpPaf|d zW+)X2diMk=k@9FW(A+zJV#DmUyJC@LS-)fRcHcHzt~Nnezf+?dJ%zO!wwbFQT&)~= zGJChiA7#$kCas+rubX>&P^bO9c(pCk=x3q4cy)Iy0H2KxF&oAi8 z)CJxtIbR?#Bqx{%eCM$k5&u6u32<;8IN;oKwCX`OWMQL%Js-HsNI1tGY8vS zdR=eYb;h#DW9oQs6ukYB6x1=L`-d6peH;+*CgeOa1KR3UsGDb+f0zNCXqkvqDxo64 zU-1m?eO48nXvhFk{lyIQCI$g-ir}r`&5<Q)@#1g5J;PX}h zXscJDTLF{(!;C~FRzg2-Ld;)-!Xs(W&%4Up3aDe6i~vReBY+XW z2=IsiR5=a)sS7}hVwp%xDJ2AtQ*5BEcU7s_0Li8L6uzRn`O3>LW&i4?Phm8?rd^4P z!<#;Z(YQ}x2?X)47y*m`MgSv#5vW=S;68=8Pa*D8i2D@cK83hXp&ug~?o;S%pTdTn zhGYvS{ckwkr!ZF7kmj--pM462O_?|K<3)l$8Y6%azzARjFaj6>i~vReBY+XW2w(&- z0-hq!Hai#&ZDX1R`~Mex3g^0gM1f z03(1Azz96H2t2A!;mdI5w7!5{cknyqySFCxzW9PwcQBwMtvk4~+D{P;!bgTK3f>^U+09yIlM^3SDgZ-E7D>$?k z+VO}sBArb$xkP#)5$+9zp;{Kf<6)}_eOciQG@a)UWH`SqgQ<+12`?8)sr^gYyZ9F4vTC6c{bEH)!8 zk16&rP4^R#(0fE8k`oGr!f!-^YWd-I&1(hUo{lV$GiSeVm~76gz4fEhuPe~CdJl3J zKHR5{Uu6Z=ZjrzH>QmiWWLT1Q^U5MSo3fmVgdhq31=5Plg1`v)4VurwV-ex>p58H0 zl#X@;X^nN|4~}%J5<&zt5~WnID%B!E&NY>OniLrWjJOd5tg5w3BJ7gF#jXy;5vY zPU~t)D1}5;QoXTK84N>*!rnXCc(?`SU&`)0v|zkBfAYC!au-iWSD!Mz`Olanb-Yc@ z-ggrWag)~gLST1Orh`DQ8+Ch;){t@)$ZtYRA&R6*2%}aqfrWq0?lZrzBPc^2e`)?j zxjCm@_Rvn%=cC)_|Hv@tcd6q``%rY(YLI2LDE4H4;f_aNf+5xys7Pjf2y$>*ZRt~E zbq5;pI|73DYYpPk{ zNvIV1=t@LTE}=>ZOIND@1cC7Xegy219pua)J&362B$NVa7D6PG$z}daVL(Xy@CToD zAAb+T_nSXYpt^Nz1A7Wx)Bc|G?b3<%VFVkUd>+`ltFiguXtR4{2l|Of1+9uq%H`0M z$6u)o=#J;aUCQ`=-h5;UKNiv0LYgguuNQSF=!mX#j~w{TgE{JWdN{aYqngFILI?Kj zhj>+?$qw)nk#dzpE}{rRp(Ol8B*>KSU%azmei0DaB<0#GzkFdMQiU!i<&6An{Ahcr zjm6k!i*z@>_hoR=!}Nlmh=fihQW40!iL9jC7tq**6p2X%A(#2fB0&Vb zV6-&4aP05MVmx6C=>CkkX#0pGW8(irH;X>JSZC(&0ctil`s`CHYJAwk^gNfrO1gak z4N$})=(8mem+ZJ*sd*~&=YFgP`o8(p*?uFEAVd-cNl<<>MQG=}_gIrpyAGU=3f`Jj zYeimdn@^2G=gvlr|LL8{_L3VL94pkP`amQMa%m00c5GeXo3sx77TgPU;LZE0K>L((_bY({&f$3Kz8>3cgT>zRw7o@C> zzWMP&WC>dRAdB2*w)|6k|3>3^=vMN+g|*smR}cP!DbcaR$qFs-upi=G(LBUYL=q|~ zDT1kR5~<(n0?HSJ5J1>W={5aNCWB@o2FVgxV(7y*m` zMxbgTfcp{PegwE50q#eD`w`%N1b&QcxF3P9{Rnavj11b+^Mk8&KZ4f68Z?*f`R+#` zti!yqA1@UA(HH@Y07d{KfDyn5U<5D%7y*m`MgSv#5hx1*QFd*3s$F&z?El~OBY1w9 zrLgUU{?qAo1VO@I0)%&9hc}D>MgSv#5x@vw1TX>^0gM1f03(1AzzARj{)-4asvp6- z@TF*d0lV&C!yMr|-<^5;e{@|SBH*E2Um!d_bbH7%LCfHw{|{Sso$M$D-BKaJr;Z9z z8Cgb01yZhb(NRIEA_x_w6u}}Hk|-%jhwma#tB#Z*G%aBcaM{btTa~Wliwt%uEgf@jj+ms}QvXnMK5fpGBhyxT+ zWQm9j5yF<)rfgXj*+boGC=Q$D(XV_gQyJAE-bpsB=k zEaIDM0dFLs>#xZL#u1m<{>QDv*f6Wq9^>BVh4lrVbXodX1J)N<9?2rJK{EV)#1Yf} zSL3!QMh!&2zj=AQ>ICd&K49I=Y}Xz1Smms|-OTn8*qvDm>kD9gfe??}c0lMH>kDwH zxq}s*2jL35k%)UYyYAquJ7>H7+%IUqr7qyV(oc{Uar&9=VXH%HR+$v^Q(!FIg^$Mz z0jOcrDvUVoo&%Mi3P24*rl3LUgOo{&8DDuAae{RDuHRezCTKSpnVY;@2#vjokK3OA#A)*UF4Ndh<9$ zET_m+s9^3MGd1{OhEXt}_Rq-4V%p*!G6QPiN0!WZf6`_!<`XR16gV!{bYN|b9%EW( zq2K4eJ2fizHXHw~l^OeJ<}own1@E5qnd*EoLqN$%E`c(jgUFkQ%zz5`{@eA96PTGO z?;GvFul8THIV;4V8=`I6>)-COR{`x78I@Yvuz!eK_1W5nYWy%GR*+&5O^YQmFU~U{ z>;2S>W^(p*&={9 z(6ugy`bW15C=^z+MF4@7Q=qlaV(v^ZLWAHDO3DkDy;GnCNLN7_SFoxisq2wavFls_PW3Wa{9(+Z@lmuR~M*KWsaX9IpXLuY}oqHR&WC!7y*m` zMgSv#5%4JjQ2MOzQsCg7g(=|FNh`#Zh!ji2j2BZ<(1PE;>c0*RNm!Wj$#MCedwWb~ z^l?Qxlw!ju@s8@oS@-5=L6=jo@f+0i<1FImsSYQK< z_x!rk=3PjKqI9+D+OD^nnT~v}SsN5(M*j;P^})uYS^WwVc#kP5r+(vBEN2Kc)Gfh9 z`KH8PW^Z0B4}eVjzT012en>7s<_0^~&3~}QbR_h^op=mDyO_z-UOxf{d-K^K3Wom@-Bb+ zpy7;Yw5PUIP1MTx}v(~KcDA(vWQ{5H&m6wMd63IQ=_SEs9k~*ckC(MD4WR@6xdKm zC`#;T`Ridp0Bp7MgQ^T1TjP6V7VZfiayQ$Q`}(dK`{y4*x9`NiJatDRn{eD(5U^i3 ztJI4C_O9p#Gcc|e^CS3u_}$MwdtI=%96y3;@EX!G9$OoC{0ORHKLQ5?@t+t0i~vRe zBY+Wjx)8vA1lW%N`w?J20_;bC{RnuR*{~mhr+x&T4=&goaN_e|&X1s-Fo@%ltPDQ_ zVYv0pc|2M0M`Hvq0vG{|07d{KfDyn5U<5D%7y*m`M!=2$VQ2+^MjIMK`~TXH!0*|w zr_FtNTxV_{0rn%XpC0&Mi~vReBY+XW2w(&-0vG{|07d{KfDyn5Jdp@gKQl&0Yqg8WamF)?-Js}-Pz~&IxMFkoja++r3-jX8vr6q{N zn?L$>cgokzky$x!VZFDun)ZLtIa2O758dwYd&}=rMzi*UI% zgCo(7n==}1ioc02*hKdZT1#k!(58agMJUjSCs7WoTH)klT{+ZZJf`erZMo z@?E6FYm)K5w1i!tr{0fJ7R*CtN%LzbXWup*T%P>QhiOK1ZN^87?oB<&#?QCzsj_RH z`E*a!6)Opru4C&W=JQ>%Xvzy+I){R>}BMMzc!jI;4yfiDDQTA@SN? zX^xn^O>gM(cC|u>e={FwzNMNeU-wQ%^@+97)h{QlUso_r!f%&xWTv7ngY^Zhr)Z^U zMHQX~ZtO#ZJ?&Uuz&1PE)uVy~L(xs!&|({60?{q&n3EOg)coS!25PJ?U{^hhbd?LN zFOZU|P7;mPY0@FmCJ2%s;a`TNXfkExwHT}~KuHLi%ROYSZ)PX4zJNXAvd=KKSQ{cP ztS`XL9`4WUt|TcJt&>uzv2Y1y;5!lA7qjaQwyye(A!&M@IaWV{5q^RZ5#K-4G;Dgv z`6?ZP76sh*AHh8vAD$rq{h?K12I97bfE%eH#mS*7hX59amRVg4GXMnS^C2d;Tnx4$|_nnpZ5O}J$XgeM4u9Bk(v5efn~ugM{r-8YOQ>M& zf1$%RH)FfE@rsv`J-K!&?0uy0<(MPd3t#rR#9sKa&n1lvE%;$b%874F8HSO2v8)1u z^(JM~YoD!&Lx;O`zuI8=G1IZ=mA7jCZz{UbGVWoOYVWb#ywi6)W5}@&Rm{+H{4gYe zg0YB@5v1IUrAZL3-?=7H^!&KnD7W(>&4dy8rrgl6S7seHql-I+ZtO%Pv%R-lMwr3` z+s(?Cy&~yeA99@aD<0*V^TQCMpd=!RR4gI9SkDIm`<*@5JO9**L%Hv_h>hsH(sXP_ zgRhRnq@s(BR@7UOcjWOX9+x)Cm0jL%#t%bc&SZ#^5?-|9{iP)c+3()GvTOWMGdlcv zn_mt`?lI-2@2vT?_!_!0VtATgYKzB%A;&&cajmjx#SB4t+3OczKnoQVH%UrHc}+77 zs>l$-wHh+(89@VN&Wf3Q=C}7v`}O_qzqLq@eoNZDx$(5VYJqguUJQZ@5XUh;=;H=MH7bYi{yxo7`fgf1lN!xr}# z%l5Ve*N@Squ{GS4utw_(FJ5l6MBP>FAqZT&jN*qOP)HSvB#g|f5dzr2?|L;daoG7K zDDOg--k<$A#&lFW^j@8mRCw^o=q(UR^}a6 zF8xxtF2-8Gx#%$Yi}+zk%q_nV%Rm6yiv=8zs({kr}w$ygB>x?AJ#U=+NKj-w8h&O-GiV z9r)JC3FvH_jib(QZ!hw=rgqeNG0eS)`O#smyakzUOHkvR1(`IMs!?EZ3l6tlta^g1 z{f5k=1KMRSL5DAYe{o2V&UCzf;FnQvPC%!^$vUIGUE)pmKj;$3@e`Dbta;^?>z~-(NME*T0nd(VVX6#&t10VQ$^QyTJypXTo+{|B7%^^QgiQ3JYcPU;J=&|J0ifqJ1QY~c(-61LlnC4 z!`L~?&ws)8ecXaKdtIOmhM>n6^CJk+)=BF6{N2CG@gt}XuMt~D3TxwzA3=5ON8o@U z{u3jB5x@vw1TX?m7XsLi0Q(VOKLYGWfc*%t9|4au8}=jc)Q@1-h~Dpy4f7wz`4L15 ze&@IpSC$`v;DO-2^&@yZW$;I11TX>^0gM1f03(1AzzARjFaj6>jKKdt1ZYDi_|cR> z4lQZm*3n}>f4b>}zw<=XMS1>8OY>_-3~-~%Io5x@vw1TX>^0gM1f03(1A zzzARjFal350u}iY?1G=h)kO+*2mQvi|LLpLpEg-_2kVy57YMlSU-!uc!z1~KT(P$CKF0ZAQ|>7vJI($vwK40U>9 zs%m0%hE_9Hov7DEkIz)4>)R)*67?Ewd#zfhR%sK*L?>#}lT$|PqSg9jWoCNH1hrPD zR;HvUW$N_WNlJKeayh!RzyAz7IG0{&y?cQSnR`q7Z|LxgDQ{uU=f7>}fUZ$3Q$r@s zXA?5LvJ2W|+yCO;c0t=VCd)49Z59cX?+SN8TP3-kvEMd`4MY*2Ru%e+_6vsk!x0)1 z8p4@mSY>MEZtw{zHF6QWPA+xasP1Dvx6@0L$T4G(*}Uw|2{hYu_(xS;!vPkZKTazj zpk%h+c1ySMcypmAd|G(C{yujsvTL(peF1mH?L1)u6<7yRtS|6X$PZ$D0qg1P8#!o4 z=`>p>ER?^sZ@{(fk~d&|0T-kGK*l15{F0h+di2KM2tjNR)H zykUI-Zt8J$;_;q1R0RydccZv3XxAO=64UeEhepLEt}YPjzt&G6jYtn)7J4k?nc&WW zli&_~JeCL;Vh!@5^tMckgJR{1FfP4?9N4q;mLU`jDWc>ckLxJ5;?wjNB*S-|n|bcJ zk%N(WWZvu7y5yVk0yC9$HpHQeV;W>NZn>U~JK!B@mM`Dujzw;TAC@80D%JX(J;Op) zsn()8MXW*QDv=<0Y#}n#vpNN6vPea=ga-Fd2Tc~A5(&!UM`V-Vxpes$%IniH?b(&X zO^2KG9C7}x8U6lAleXrYm)M>+yhEg|cH|b3$WaB!_C|$-+C%$TgVYHkD^zuJqu^vQ z9gz}@grN8$5(LN(y_h-U*X`SpIri`z|1riw%h#Lde*W}D`9Lux^4r3Gi@0~)| zFMM>0tkuF>L63Vq(s7R5Z0()slGUxV&>`4%KSZyz6GRppV!ac+ioqa7E`pE;Tx|I2 znVdcP%&KjrqT9&ac60TN+kcu4UYk5@;o0Ws_OPLu59jY;6J~j3i1p}dn`LON=qg*R zfpV2dFU^(Uqr!;9l$0VJ1yg+*y@ILwSEHoy!8M~$UPi*dAKm!ebgFLSW{du~kMjPv z^z?)Jz1ZGky+WjCbERX?EMu;OiGb!N1AASd^PY?3LwcF5E|AC71zrwc9eO8(3LYQ0 z#6Qn6ap2}jLjXdePVV+s&q5+bs$k?IshEJ^mal;qgsS&XsrT0JM>CLFM18S!;~mqX zl+hcas?0>!si9%>7Z7Zmm-?$GWdr0G5>+$+_cgG*5lVvCOESl}J{sG4BR@5N+sa zK&}#M4~;yl2Qd-_357jIETwr%T0j+hU+3YQj;zc==3&vj=hpksbg24sOaBvHLsz#n zdSUh*IosDuJ=7M8x)tkMh}>_BaSN=Ifc-)x5E$bsftHZSjpuH7Y0IZhKCIFrj2nHIoNFpJ{#dOSl8q5*=};M{p0{lA(aSUPO-DNRWfzRP zhAs`>d~$f=2${$A0$a~ zK4lJEqPKObGN#98VD_;4>+=uZnPbXde1G2C`w3KV^wryGU!Q(FoNgT_!+dbDgLRzt z^ah=_6!I< zi~vReBj7CrV7WjSSF=fbUB|@DY}l0>llf_lT)A!CM-;j`r`iW2Z&mC0_%LX{?r5t6Ap7=e>zT%#ZpC~G zKdfJO;rea8zAMM4um-$F!oARTxZ_h;1N#)(;lux81TX>^0gM1f;Hg6Z`xIiILhMtB zeG0KpA@(WcadN{xg`WBpez{Tdsz`RCC+Aa03a)TmN-Ec^0gM1f;OR$zF~q}<6dQU%i+u|H{DLC^h@fz20^$EceSwsw4{IOH zT%2p!MZw4L7dGZdDXMhmL>VC_l)8y2`ouA69jAHUo}k+k(t#wQAi->p7Ks^&Sjv+M-ThOb zw0yv@+RyX{NG83xdU<5tT9aA%`X{}r1)%Fow)L4J{iBPA`+9=i5@sp3Bg-atR%lFR zww{%C-48=gLywXq7D^{^oQC>`!Irv8A`vuOWFom(CZl-LY`K35)RhnIZ>IDA?mjY; zyTZ@bc&|{v{#M3U%M;(%vhgD=m^s5`U?{ptTMoPQaUi;7)k4k+D2+_Je$KlVb-*cs zjo1jAbh4c&N8PK6$n0V0UNM?1$R%*v26a*xd-wV zm$5}$mhc#^>_L_Qmk_Clkch<;PXfI6PgOxX7rZku;kN>mKP$EIx${{jbN-%2A9nf- z72Gv6&e-3F?Q_HVZW&Sb7+dOudB-*)dyC7iMO?yAYCZfdn)Q{=rA$GJMT|s3@wF|T z<8r$+RDR&ZOk}<`W#)>lV@*fjRj=tW;0ijwwza7K+GpAR^PSc>3k)xt%ToKLce%v+ z0$5+bL)k&BFW_3(Q?b4P!%gaT-N9iwM@HS(eml}y7g*#cpd*sQ-w!<$;ulN@Ci^e4 z1OT|<5dlLFLwwPMXe|Rgnn6}p(g9v}j7TCQr37zD2Ph}+sWXF+{Id|5YrOLJm&XT~ z4(E&Cnb-0*y7VxnPU=>g?ZX8(&dId~mJ{8S7N~kRf$V9BtC-8mss=!yN{XaV4I+6f z>4289kD{AWs{!7PZh9K}^G7CF+CgbYCV>=^A06fUr$9$}Z^4ZiX7lU&Ulr)+h_Mc4E+{mq_J28BN|l z1=`A{ZArt#tNl>^%&*SWd}t$-80K0v(%nhV0mjlFI8Q88hY_ZCK!Xr zz&Ml<%Xo52he{n>pB%S8pk`kJnP03E8S@8aI@0%$uKlnv==%9T-jo)49Z? zJTiky%S^mF%)*JmX$VT}b%7t58_lCn)=1;(0#$bv`(_OJLmc9Pr-Z7U#INpoanzJ1}Tw7*fnz!2lGOcO3cT zyHDSXLgo&{Pm@G-O-Ei29{t>^Bk01sHy^fqxQ|V!<@B|!@|F*j8vS_Z`ebLr3nfVe zf_!s*k^&<;iHMd_GKRNx1E98i__yRqpIvE%%yX;$vsBl@lzXE~>Ve_S(XCtiel?uy z)6J=@vYc{H<%c^^R3B85#loU`Wv~9AAa*6;Dzi*N@|K8zW$(V%?)dN7yB(RkH>&f@ z`mb%5nXjR14fgy!cijhUzZ*`+uC7)Hyqi>ZHw>(p%StNUQ5HWtQX&(}cq{jSTkrO7 zCkrEvLFsP8+QUB$-DWHIB%|}uFRbc6BH5L4PdQvxdKLn!B?pvAWo0k^pkTEmEh1!6 zSQX1xNgaH8_xHO{XDAI)_S3)38*=Cy(^08DW8;k7=-TTq4|r+yadx2d-LkxtveX&U zt0^UfI|Fscb;FiA1Bn;Hl`63fMdw0GycHEiRk;okJuB7hvyQcgGdU9IJ?da#6 zvxlQ|&bU%iFYm%-sn_U_S!vM}YkZupa^TBj9mn!+r#w`Vox&_y9X7oXO+-2*iS8 z9GCLS_ahJ#2u@o+jK`A)e>6q_BY+XW2w(&-0vG{|07d{KfDyn5JUs}=3@Pwqqy`nV z62lN^u^#~iD1@|vrb;7d%J3ujyTvcEi@zTK7yA(aM)<%8U<5D%7y*m`MgSv#5x@vw z1TX>^0gS+tjX*_y1UKR5ary#+|7ZbF!RDS{)LC}mcL!(R4r)bhk7!-&p1qB8LGAS+PM*w7% z-%{8^c`-rp&Dl7VU;Wy~gj3&|4vcE{>98y@x;o(AfU3WK!^U!3D4o*(cyu>&Kvt>S zdJ3#3m)A601{ZPYzS^>z9Fhu3E|SqQM$99J=CiF^t9CR%=F~YK=;We8Mf=;Sn=YN5 zoWaI9zv1ptdxD@sdjcPjiS-4rzJO;U5m;ZqOXDim7r^=gUXg9V`T`bdP%m{$tS^A| z1-v7tg!Kiyr7s}m5*oYiV2gHFSJqx#JN@p2=MAc*{Cd zS#)E`9|-h^juo}oS{%Jnk5R3@1&NSe7xCZk{^A_inXDSo5| zp-X~|uNTRDw8ZMu0k)T6IInCHaLq$Z!O6f^@B@Cnl{&x%*qxMpG0^rh4C9eav4SK- z5;;xEc?)I1(6^G=^kFF5(=fD5HYAa7<#bEf5Fj#WBot0CQP{H69K3Uq?FkKD?QX< zBnnzCA_+OclRr9iKu%TJdn*DS%{~Hrdo_7XnQT`2@(zYkh#8SgERjq2u|xwlL08#} zb)H9t(;(kOIHSuXvGTj5Siw*tse}~Myv3`as9dRCGRT+ZonD4y9@(T7j7$Wn2QB4| zO^{UfVwZe0m-H!{Jq_wI*{t+g7V=xpTR?8F3j~p4@BAG#^r1yxAVO`a3-Fl(~gRd7;$x^fhQ4xihK$m!jIzg1qyWsADsK^#MsFX z>vMI1Fh7x1cW`Cs|3X>?D+5>hUx&L&ISf*RR_-^>W{t;fCV|5r{)PYio!=-#6EcD- z-5O6OlaWfDUXxMG77sKiK~z*Cl1XH82~Q$T%}7vh-ab43lgmT4BlDZjeAQ&|7SqX3 zg=>=J8R)0~mgKg1Cx(stb`W<21_+SZieDt_|2}st3Vu|TDbQ8fyCAE)v;Dp85?zsj z!I5aQ^<(UNQwpE6-+I3x#xTAlb-R{lgH_O)P4PEpG}?p;tmlA($xoP# zCEMBI5`%;x<5337>wFx)T}!<-NIq2qro8$D;(n;qC^ES5^N2c0jpZ0Z6Fd(=hi$2isNVhx&- zoN+^@4+cz9K}$t6$fIXbw{fRWKP$R>xOSO z9iAFcmF<;^&Wj%&?mYWbHg1;H5!Oy*rH-P3)*k3qkCYhFiiqT57VhxHC`!mV0}7Io zi)o%Dvmk^)Tk?jyv2D{l;BlCF?1L(%qb=hO#thY>Gm-Ol?FpLB_Ty*-XJ609(sHIj z_r_9*A+?A(o2Rc&f=@!GU_b+%AsN1QsB_G1KDla6!2p>4*v;LJZJla5y5i2vg{Rk` zA2W8|_~Al4+rN#4IZtBGawsdbd~zpp!TJJT-I9*=1+cz=pF>h%&s^N-nvkFBn`u>3?qbL-~Jv(PHtIUmwXy z?pw)rzaUUfR>^u&(up-p;)zI5f0c`9nOG*{$=|RU2_oBD13IjjusaHwmF>=U3HaBP zZ{D!!WPKw#JLG+$!>A@~+NGN|l259>*C8Dp5} z8j)Tr(aAWEN=D2`B)paAKwP_m5*^!*wTz|q>=ISx(CS{28Dp662!ocXvC^+_fXk>% z1Q{kl^HwGYMQ!u_XIq|2jzi|b@1=j%@Hx}|wZR|tYtjJS{;)~6?ya`4@mx<_u`&=< zY9FkUY&qO2@WdE0A7QZE0*|HsB5hG@q=qr{jNXX z;cwHATRwg}UUUSVeKxyx*t`ff?tq0s`}GbFs^#U4qMl5LF$O(v3=))xl2bHa9dHKLi=_QuDzwrx*KKdgQwAvzrR4$zFkttpe-`3BnCZ* zWMG=+Gz6cw*9DB<`HgQVBtPQn0>L5CegbJkdibi)8}KJSFaj6>i~vReBY+VojsPr} zd!=L`1lgo7YOM@+wOJ~a%O$*BZ3b2CRp#mK*Z?TeX|C=5tgg;(=*wAC9ZH(W_U_S!vM}YkZupa^T zBj9mn!+r#w`VoBc+=9fP$H%tf{0QWN4IGy-zVssy>=b-&{a7APBmB`A0gM1f03(1A zzzARjFaj6>i~vReBk=em(9u`}zGMeuIJD0j1E9rz1nGc6)g)*lhC<_(AHkIOHvACw z#;mWoeFOp6j{s1>2SxxRfDyn5U<5D%7y*m`MgSv#5x@vw1fEy~D)1u+s0qJ}(-$bz z9qcGyo%0>N72_~6EtiTjYbd;8GeDUE6W z2c0A3e)G`(zV4M&_dPiqZ`=1{-y~PKfy-vwAoQkvgk1-(q)sRsWIanmD|V6SYV9L4pGD@>kq=UmYZuaaJMH@~PJhm@ad!uC zN8whvLOPFH70Z1>XHd8^Jc1vL-N?nJrS0OzN;i3wC`ekwNNJMfNvLjXN8qvB!#`Ji zFcam~?Rs3V7n=?SyjCOZr-kUYX?LdS=Q}%k95o3lP`2%6FH@kFS=!*6Fg#l z0jw|Js+SVh7jV$d#`*$keX=q$J!OJgt5Yje(vvcEdhH}-hE|iDlB!M;jn!$=Ard19 zk|5zkD{dsYGFY0c*_Z&=u{IZOQP|8Fw?RFYwgp3v}R447={&Th9md z*g8bF&RQ4v&`&@_j1FHA`a_im!JZDcmw?76*1d?As) z2)o>$`1P$GW#;u>b@{BQOydNReT<Pb(v|LWgc#==r+7a}W5B&J`XM5V2k-6zN z{r1kDV={NzG*~Dbif$~vqpZ=RFFSy-46%>)PaB^;sn-NJ)iJBMPNY{xSnvatLH$%J z;g3i#Q2t@<`Hv^D7r@2j>=o`SxxT)4_kPeK$~Z4gI>{h1=BF zo_4#4M?0pC&&O||4RW1NZw$0ncTk3qQZkK+=sJBc(l}IU1PW4+mg7NZ!9!=T@>&BqmHt9)|=8rKQUYHvB>TB1~%?ll=&?bA>fn&?K z!eQ%}zKLjU5m3bgEksHkxoF8=7q~l`99whmgUQyqfQhRMq=zpHJswgsxL4pzf0H$` z!tG;@0F(}DxZX{@G2T)T*n(M)nBuW?03yo=nT1!H^qB_&uZQpcaWu{r*p5Iq-dNc- zdRQhq;CLDFkS`MzX9C+8WA&0mR$Myp3X!BjOo|w}l%#pPpbXbSa+_-Q{iHUdyo4{i zWllR{%A5Pv|328-9R0eVy7Ok%ioTCVK(^wKPf`cBP&18JTyH(ymd1L43gQs3I<&KY-KIWz7==RGm{<5n6UUopQ@@Gt+q$WYZ z6<6_MjKY#c`lc&_ny|@^b()23KEt;GGgB9>R{CCdR^TX-uQ+{+w#YXvk*g!F~W5sy)j3U zmgSE!@XnU-Hb;U{Z{EeVwUVljLFQ)yrd^mlwXkFUcKGmT)sr9g;^0gM1f03(1Aupj^%m22`-7l550G$|s*P;}+VD|Bl| zFzR)?E?}$F`Q++{OLc)jj#ztLfZjNJ|FFiZT61*)tUG8q<#B@%zzARjFaj6>i~vRe zBY+XW2w(&-0vLfO6@iL$2P5H!6i~vReBk*J+V2CtE$~d9k#D)!nLc?IGI(Jkc<^alZ*4!(n}1cUdeJX1w7Xwu_o{CRa?5xoz8fQe5x@vw1TX>^fhP@tS>63Z>eQ|4 z|89z2H7ZrD*QTgaL1vw61G*%{b{ZHPHLz3XKCw~O`=VNfM-@9#lA?O{8yMR?HX$l5 zp=aMt2}7cK#}0|=G-zP|p8enr`o{Jf*sjEDw3+Ejc-_F*!2_fE^@sll_32acIeMKk zQ=eG=a}qU4Y9*%*pQ1^(JhSARSaSkphDtxC)W>ytl~!NsBkFYP_bd61I<>m+2bX-z zf{-1Jk`Ip6jMA0$m?}M8sa5MUwdqlS_#;qo4^PmfmikzlDodH9RZUFNOf3Dyx-lwk zhPu?(>b0sQwN9C#)+#5dRa(n)iZRtLN~PB-(=t=_*4G!_v}*7>-a8TG`85-5PaBn@ z(pj939B&tU1`v~|PKPg`2kMj=nu%)b$G3}0)M!$zca-^Y?nDlPAxtW_o2-obirT1vWdlvb@uf>XspLX`D>U7{*g zt<O0Qk43v5~dJgRRn4Y3g?H%GNNK+Moz|`W zjdd;XjZ*7?Zmm8gS(T{Q6~9%p7r zPc>b!`>ca$;a#N+>BY`o_`p(!?$X9&?%QRkw5l|nlCwOqd`38Tas+T-+v@^XTF-3$ z%7*k8gW^0gM1f03(1AzzARj zFakCNkg*y36=SRqZAW7bXge6gp?%)S<+cjLWN76EEwnO23bay#3R;O_2(*kL9$K-X zC$zMo6SR~;4lQXQp(PBhpp7;(hE`;#1#No+r|I9$!0o-a54tI6EVK(<| z8)RodTR%G)+Irc;p{<*p0PVBcJ)o_V&8_jToh^p8RyOx;k=aqu*2w0r*;mizzG1a& z?zaoGpb?})Q#A>ih@sFt69-LrH)z7RFBM8b6TDvh8C=C%+7ap)D(7w8;c@6g~) z=Z#oj0Fc24MgSv#5x@vw1TX>^0gM1f03(1AzzARjo@@jv(ih;$1YGT*aJ@i}O|@HZ z*SA~1)dj-*>Ra>$!p&i!At-o4;A;O%a2I&s)puQb^3gp$Vwz^k*yAH1>C*Q2h{3N( zCK5|%vBYtYPxKf~nmSsO0ZVF9RTHCO0n=DDtPhDEpQ%dMx98T1XteFMY8|X*OB@sJ z(Tp{rjeyKYB$0pG8h-+(fmnDQ%q=KHhgY<2N}gJ!(V#@#5xc+0kxq?k#} z_4m1B5!!71HxS)A#2tsT0vjQl<64Ixw8rWtj0!le{QS_nlP`2%6FDWY5gTEBITtBqSI=A_>M|L&VE+R4vT<|Q1%Nv^A2zD3+CFaa2#rzGe zRnW!`Ymc3uN}$}1T^??{n_xP%MyIH^uK_x>pz7qX=gzV5^Ie!Cuif1_cX+FN_PEB! zJk~1WG1QkliWQVx1ZOTOs0-^q!`~=d7^zdb&XG3ZR_X^C0JMi&XBLGF4W<~R#zYpg>#*$e` zDTz!j=f^F5F9R0M->)B%pj-?>E~jpu=(u;kt!Q%_o!k4%pZ(9XY+QkbKi2|Meu_3t zc_Px1Sr7~@p?E9WfH(7|#b-7z8a@x@_G$HXoOW?I|KZMVlr( z5oyURD4G$|1YbQ8yqUik+e$O&B=pF8(lays@(PPK`{Js zPefW$3kgZcD26X0!J_$_u3_3WLo!evv-Ijp(_zz@wV{FI*%9dI_CFG~?6}Ov_i~|V zW3RsPGqg75iAeC&5{tx)OiuFTmcEw>_wt1ed$P|Dk&SpFl2V8XkwnhWGTwS*SQWJG zk9C>J&re6W-%e|C;&O_ujH*QiQNQLzNBrYn^^KpQwINSLk_xdzB$G-BId5}h=u<^x z1D=Q^6bvPj(PFurw;mbd<)PIcwem2uLXyOC|J&;V*P@qqtRY#@nX3x~htzba3&0)t zzzARjFaj6>jKKdt1fb;FijSCwR1lWnm8K;Of9WJxG;cqB?Bex_w^6P^BwPQ+Vbig1 z(tAc03`ZAMlNqdFCmVObg}Q(}=HX)vK&-JPPeelSN{Hm7gvYu-ji+c4K&-I^A4CF+ zuyR!*qU97*Or74RD_5(-MUWn^pKD%y2|9f1rldjJhlREC^D&droNF!F_*pLWNc*as z{qJ+fBA>42h&4XP8Id7G^YOqdjUE`k*Odp93|8sL-0MV+D$e+HB89OYn zse457a}lIDPefW)u8PGp6zlk^oeQ6ym8%fm`Ewzjy)MvU%h933|MuHcjvoQ1l+cBH zjqTuc4_x&lsDu3o?C{}#F#;F?i~vReBki~vReBY+XW2w()9L!cr*0?xpY<=)D^k07mG z%@!N~{(ibucknw0eSzTKfd>EYxaZ>IaYg{P!M63%79VMub`gwHot2{3QD7+0o}k+k zvVjBv0xlLQY%wKe_|kBZf)w@_ix0lBqaTRzq@_i?a%`OG?1{7MM!wSy?K?H>Gh*gc zHsN>~I%m7BCJ#Q5cnt`Qv|CW1vn4DgY#aOxU5#yuh_p&!gN|ecQrIC@tx1j#M5n6JHB(kkfl+Fx#~**6O1p37{tIQ}iu>G^X5%+s2py;t7LPx*UZ zw@0NTZNP=I{?;v$!GWR3E>!33eatLp5(`JTGd#8~;?W~1Y*%>{D`-+g$)s|cFKv3@ zag|`_s@hYwqg)j&4Vv+`jYkDK{N|ZzZNuMU<8PF)3D!oZPx@nEXvI8YeF3a55K??# zb;(c(gd(uMfOXXLnxPWb7r^=g#X=pIdZa}t0_zKKebQ?^66*^*4bE6_Ms(s%3wvE) zS=+@seo6n>&srBSaXy8k!#@r^9ufh51T+0j+;j2q*dqYN0lFv`v8IZ?$tf9-TxLWv z85k__WlJCh$>o)TM!$Udc>&5BKd9RIZy%UWf032i;QV{&;LHnSFHNi6{n4b-X7niZ zNm6Ok<8Y!l5M!iVC$dyiP#2R*1|*kB5dm8EG;hTLkX(Mes{_usfyNj~o*1;s)q&F) zZ=%^!&|3byZ}<;IO>5&WA1kT(cJCCLe0K ze1yn!wq0oWEw&vp-)8o0`)?XMpiLPix}#PHG@ne4&Xmk!jUwKNggjC%7K7PLZ+=uK%+@2tXn&`<(E`bOHomNDA2uQz`69{*a%yO8&l8cLQzsV@ za!O3|WgjU8hvlV%wsW0GuUy0eA2hLursUv6z}L_U4$Du(9BIFpRdL6Jv#v9D=Gp54-;H?TANuT% z_pNmS@F^rBMuso2)CIa=pF&F?eXJWO2t4n4|MWbDwO$LMVW4Fw32%8MXf5wt@#S+L zFWQF=w^+62+fR>~PSlzf@$m^Ux-@O|qPbg6unCsM0)rkMXl?d9z6pJTE514zV^owR zvf|2)=R{hymZc&_ETwp}x08a_vg_%jZL0Lm_2r6(R_KcIk_`GNos=uMiy#aM3r6^w zDnVp<-MCR-cIXp@a-W;_)yf+N)2V*c+Kx4Dprdd0AK$oNwF=Y8$B0N7PeelSDizVB zn33>CB#10O5y5Mq6DxOOjM9=s`e;mr;FW?RtCS}A@_vd&O^k zEdw3&k0086MYQQijr7;g4mg1>)LXdzboU4Bz_JPgw(!O$1p#LkU-dCEt`q5vJd&}v z_sR%{kn&a#0QcVY4VM_^44jT~=f-Y4_Qorwleigsff9Y z$Cu5gt#i~vReBVa+m(8t(;kGg=>#8)bk${88W+nPEs@!fcE^)ugICs1yW&xL_Y zCKayW`LX%s>*l~FY(jV$OR;RbC4EyDu&qi~vReBY+XW2w(&-0vG{|07d{K@FXHok?vqe_)*2y3$&j+YS`-= zsaQ*0AYw7Mk6`hW_`~sc#t2{pFaj6>i~vReBY+XW2w()B8UzegjU8p2Qb-~Qg@lH| zRuYhVaar+&BxMv;y0$h2qRYxORiakosI5(cu(pC^M3fu^v>dmSBx=%=Q%38e)%s** zW_rp5wN|HArlcoj>h#)4$_%Y0IVDw{BpR#Jq{I6W1WAzaFGEr^nX)Q(INIA`&EUOL zo<+GEPMQOn)->fdfBEK)AzjhcHvgrcul{k_a#+Ro+TG}wvGinkN91jdWoM*Y@Opu# zZM}d$H(J=&3#8XyvTt={b^U<&J}G*2RI)~!rqV~ze%1T}0{qyhD0u3#@P91)Z$H|= zAGY-gmb)zPXMeDaf1mXez4=$wsu%qNL%aKhcCY%DAh(QX;=3^d7y*m`MgSv#5qQ!N znAP1sq)y$s{_m#fRijeXdToj-6+&gM4d{{(+i75I)WA-i`@}|B?~7^`9#!l}Ns8*( zZ(wZq*o3IKgr0pnB@Bt`9Xlkd)1ZO(u*B|~L z)Td9$=je6HOnqYc&q>rIsg+!WpQ1^(JhSARSd#%|hDtxC)W>ytl~!NsBkFYP_bd61 zI<>m+2bX-zf{-1Jk`Ip6jMA0$m?}M8sa5MUwdqlS_#;qo4^PmfmikzlDodH9RZUFN zOf3Dyx-lwkhPu?(>b0sQwN9C#)+#5dRa(n)iZRtLN~PB-(=t=_*4G!_wB}Kc_fCWq zOEb~-v{5N4oy88x@piFi05OT`boc^#piY^gnW(mYe7mSbjV6`*G0G&>B%ST`@GVoc z>LhrcE`@u64)VdQvL8#aArY0TnmozzeJoj|((>-fT2-R$9jy1JrKBrIY1OJEI8`hp zL|O0GC8|=@N^Od6oKlmVT=-B{(U)D8-OTzpDt0OwUHT>uAZp0yp`jVitgmj3_Bqi8m*o?g_Oleuq4BJ zrJnm@>U1S=ZTr4j^(a-U3K&w3Qb9kk!clam8oHeQr`dk7((=WWqg5HUXIpP`ADN_1 z*Q6(>6px)%6GsdYfNR-clrO4RF$->O**yyA~>vy-zklEVzc4c4X26`D-F5*SR; zPb!=wxVx;Uny%P=*1@#!u2P2dVrMUWV5viQX=5_??J`taRhmx8m8~qF5zd_)0UX%& zy1?)@$@lvlAnFCfeXQUO?x9%WKf-&${|RpiuL^$_o)exD9u?*a_X~Fmw+S~1*9lh% zKNl_$E)u>goFkkm%n?o%P7r1Y#|o2#BZPy63Bo?YZbDY55Q>E&VJl%%VFO`pVKrg6 zFi7w~a9{Ad;FjQupg?e1a7>UZ*eBR2_+GF zi~vReBY+XW2w(&-0vG{|z*CPvS7RUeja`ggq3vvZ9@y52CG`?d|TGoY=XoeXWg?BUSX z%}#*!+3X(B*2#{6wsy7{+FIG%yG3S4L0cocHni2Vxo=o4oBQp;ENBGj&{R!=CSoWw z&%{9!-VK^C?n{MI(1dV5vq~dqf+L{`;?OImFA(8*BaJ@iN)78mUjjwFu>H=YYQj5Mo_{lI~ zNVni=fm{6lg1gE)3^B&8C1oky+V~@<>9RKdNXgPR{!om9VMJo7SR&!cST=VlI0Wxd z1-;k(UNw~a&ZNa3to+J!tafMJv39l5&jd5*u)~ogR#a=B^h+Xjf*5*A4O>eNpc>Ql49E@ zqsM5{)X|y@ShSd`nivgBM8~RO1zz;{OjWwRJ+~T9qiwHM>tMZb;+Sa9Hd`(QGvHmL zRr&juJ&W=>U+j1#{BzS0|F$)1%^Hg?p4~MkW9E7`VOAO9zNHPO*KEThAG#@;*;Nhv5sL`WDZUp6qgOTo8!TaSbZwfB!ixxapR zotnMaWG2@}wtitU`f0$QN5;Lfj!j?&affqdH+zD?50SliA`%h|nMlgWplrie(FS~* zpQ4n%Cr?BY3Yrp0#Dt751Mb|VVA#ByI=uM6d$&8mpv zRu4*bEmgEfw0xwBvBnuV@ne0qpm1XFoa0VFr<{X z@>@t1^!@MkTYu3m3gr$7-ZOmRY}4_@)y*#~zK_n&n04#Vv>HxcnzGM|JY1TBB$wO& z5Np>LXfdvT*E)Z#{En*&1c%i06G$V{!^f&Y&PK#?`RWU%9# zsFju~7^nnD2!`Y>frLvUrt39dc#eW#=ia9)Ck{@xt;2~#1=G6Aj8|8)2{&9Qvf5X1 z@UbK=))>bVkr1`YM5J5>E2{WPKWaQxwYmPh5lPU{BWanGw>+{stWJ%bc&~XFtc?30 zTUd8S>p~g(3ui{Jz8*b;P3Yx9kF;0I`B_)hk0&A-1tAwvl!PXDTjE#^imZw)T`yle zh4R9#O?~l&zY8yWTsqUZ4)ftOHlE{g#Y*Qcd)U)SelC0T<%vkKf)tAwN=iz2D+mZ- zwQ=r%T{jQhN4Z~*oK5^Q&(V1*?1$z3>^I8zw=VW0C<7UMH%0&>fDyn5 zU<96g1h5}Lp@y`h&jR)%05q^4fd+*3u^$2Fkr9Rc2(TYPi~vReBY+X`E&>(#5vbwgIDLV_eFQIlJ^bZbKR5i=syn#KL0=%aci>e2Ro?x2 z_}#pLfT53ZpzE7@teVLs#FCjZO(1BcIx9u5K zuXofA7$PP?E%}4SJN3`!7HzXT*Wu7d*T=C57EQWRMCp!N6|RM>zf~GJI4~4d);2qq za}|XnJQCT|wb0oTwh=ac5kqg|fFeGf6~FchpP)_0z-~K6M(`z|w5$r+xiegw-{o0! z`0};JAN$ugnNQ3ZK72$CbgAaj5669CE?dOhhF>F}&}rK`60aq`T|&Apu~LXqG=M1^#!bxpqIRpVvSf|0P72QV)sE~eE~1`NUSgL zl;{g|<4z2_zQDr$3GC#C-`o5MR&aHJ%7yLT@|q99pOGn zBW+cIP-oJQVXpI8swI}IX(Y%hlOhmq5sUd!#aafk%5GPAY~E%*sqzFmL1Z7}P}hm{ zO2-6sWr;{8l}Q;fPx5BVKwbHXP{negT-V1qgeN{BodmBsG0pJi39<}CmbVYzx=ksV zj&ciTkIZbar*NPxxLbWX8+@{Cl`~uU)u#ikQ+1xfuJh@YffhWKL4Hs|GBUoz&X$3v z@-A8bH$T3eg>vJjEP3vyhlPAz>Urf66N5((OE)w!8<8yfIjl=+)djzl zB4cmsiar@y1DzUE2bE;dO>JIR83Y3~&>f`3Fir9m^MJ$hj?d;j{N?~$qD+f(V^L+ z&R5+#!<658N%MglSD+JrE$zQ^Tn%>6*fOp_+7w!SGY>kkFd){L$QzLm(2#P9rg&Qz z0D8(_ez5ZA&}Ww*v+CTjZ{Lxdj_WtJ+5C1W+8?mioWAWcJ7A=xqm>!Z_+({3kW(dq zQLYo|jS>KNy#sve2?;IbEuaBCD_E$;xo-Y2To>cl|X$2fu~ zK4EDjn1m8iTE>@t{W7raJuqU_vFC5k)u&)+tQ zs|)xGq)->IMCQ1`2w(&-0vG{|07d{KfDyn5U<5D%7y*ocBLZ;AQeCnxQ1OZnuhe0| z%U3KSNLnUm_*yRjUcUSKoizQslt2ep+?@2;%kxc#J{{fQ(|0Rrk1pKNtP%SZVxPkFB+Ge$eF~LY>{D2IQy=yz^wg)Y z^-{z84JItS#rYJ*3eq{MdOaRKg#x|x>r~#^gWnk=fDyn5U<5D%7y*m`MgSv#5x@vw z1bl!%Poo|_rH3&UTI^HUAUgwasGpq-ZM|&HuaRe;!XImW9{cgLEstZLLf`@)7y*m` zMgSv#5x@vw1TX>^0gM1f03(1Ac(M_w$fs};{5(!ypip;k2Kmv_9ppfnRd;X)r#q+# z|048!NUh)jfwTN~JlSykKl=8t(g6mVaTv2p#t}9-*T8g4wR*z91cg2*F4EktH1-)!qB&VdXfs(H=71WkD(fSp` z-U3I0?1(9s9=>WiC6o<0mvk2WnAq)KooFf>cf1U><OMkuH=faEw zY+M@`CP#aZwAt_al*q2e(M3c$Yw7EiF%>MD84)2B(_)_XGeeZ~^vsQ2jmbqky6xrb z&fEz4gU}%?tg5t^~Yp%>EDlgFT8Qlwf=a`7US^I zAF;l`Q=>1?lRJ&Dc!(PGxlnMVH3w z|9q=fJ{yN#rym=gETN!U7Or-qWPn_nDKSI56hw5Az>f zH04+6K5%aHRp|1o`$AON-CT=+?5QOm5m1bAd`TjGQ{`bGlBGm4aD`!btGj~o@}`;5 z5u+vBQSPW|KVSTBTTzYRMEG0h`gQE$T$RVpARl$QSYt*>27OcIVF*qOos>uj8Bg|h z7Z!lQ@Ae<+eKqZY4CRIEmaVz+w&_@sU$@sz9zqv-AB}AA+COYUlqJe>j>wzVGM&9j z?$hExj8RjPNZ)itF*r4IT@fr{c_R{>efQK&h+Oqu7Rqaoo;x`Dv&N zWR+ylH^~SCF)Xa8BS@0J$`085J~b=qVvG|@66vF^C{Zw^NG_Jj`CBvqcE3BX?)BR= zdko5Z?rr+W`Z=bfs~`4zy?PM3m^#!v`ijKKg;@3yolPL!rBrav z_$?bSmAXV#s#>W{(T!7Tl9LM`%2H-%bSe52O}ftEKCL<^;=_Ifp864poBlusA3E2N^CRdX;DiwU`aV8>1cEVwQPwY2nP(AxZ;Sv&03(1A zzzARjFaj6>i~vReBY+X`8UlT0M8JFXo)H9XFXL2bu^&OB91e|!*^{At?EDDY4ha|} z+fPmA_7MaKfASOFfd(HK0gM1f03(1AzzARjFaj6>i~vReBY+XW2t0`hROCnSCj2N) zU!YKTaLTU-&()pX_8qP+5DNAK4!VOwupa@3)Dv=mq__$SR|Kaj7&!JCFSxyNG|W# z|7HIgod=^lGW^wjXZ|rAi@2=n`(qCJ8GY4Nke$R76Y3Qug;sDvS zyX^{2hTg_0MMOF)x$G4pL8(q6q6w0b@}-^qJ}3_EToL;4gE8p9AEAG|t;sd*d+_ku zuy^$6+OmDi53anyzBs=O#X;LX$wsXI``oc8I4~61)v>%S$>Rc@U5%5A==4Z=+0}k& z(W?_vaz^%l>|F^!RAt)*hFu&oEz?}k%H8pHf`B3-qN%Cl0E3L;fHOlbX(>2l zR%WGTo0+M(q-mB}mZQ0(rGTQje5SZ>EtX}r|IeKb7zP-a%Us}p@Aq|u*_b(J-uHc; zbMHMzs4MV*&b_U#q%B@q0v=i7ACKOd@UzL5__<}0QMJf6st81&tkE^fUOYaEj$bR3p9rCEcj9k=DrvX-@%vGy!h++ zsAhlLbb)O)U0_w{>5%3@{Y7*Ax7of#cwb);$cr`ymbM*UB@ooG?chw7Aq4)`fIh=!vE4P?AITp&K7T$M{mIXGkscB&4zE7y8p+693YJ`n`CD;#0-NDv6C zIiGw80&p~ofE+Z2kjVt=Bf(_3)_m5tJ~G}MT5}?KnP{!Cy|k33Wr9t#5Zk-|#&35& zaw`fI1n&-hgS}xX{4-+c1=-)|`U^ukoBhI6$%866S;yXf_@s|?Otc;>oYCfxn)Aua zz=U%mVd10{Bq3M@1nIr|=Uv?9*9_wAW?z^x`kf?8@q=w!Jf!&^UE8j{{K4Q$s^nu; zx062M(-U2wk2%kq~}8)Mf6uA|Gn zzH1e8=7FS&2SMyhrEes<>ifvNcyo{|gT6Tk!o~K|5|WV8q+n|##P%L&vLd9}ML%@t z`qPhI-}0oTVA75Nf`qB{YqT@+jrFSJ$|O3UPOTo-JWv=7;r?^z0ta>;>8X#6eVEe) z{KW+50`LRgFaj6>i~vReBY+XW2w(&-0vG{|07d{KU`GISfu;iK0ub9vN@zHnPAZr# z0I|J|?AR92S}vz>aI-cYZ**&QcNIB>ZQwaW%M6Ixi~vTU zaUpg*d0MLXIOu6Ot5Rk9x#8g>|~_;haKma|#X8qxTMroxg+2DI6qD zi~vTUwg@Dcxg*L$%q?J# za|%1;b^sira$CZ_eJ*!;e!b2qoV?`KWydBi{)&5}IHwRmz#B#YBY+XW2w(&-0vG{| z07d{KfDyn5U<4X20@dXdz5^eP^A~XX4t{oQtVR|4yq?nqLj5;$zJrs)-w8b$5*gG_ zG#hTfTm3{JFV@^b;Wu?i%ekm++d!8f0`AvP|F97MFbGD2U&2CcW=dee1NVf4ICBX} zf?!GaQ7=*kj6KxGX*yGChPG@pAxS7nlDo!7t{_>tFt$n?;!c6j^6o$8AG>GACR8Z- zuH7foUbhrw2WKBUcQ?BD)Kgdc=Ki2coK%UelHClnjNe&6c;%UP?Hmz;y#vw4ZNqMu z+igSFY*~0brM>huH+SXIX~R?JToOt~E|C%>cq$3v!~`KTv^K%7B5{xicPy(4?wY;avlcA<87?C;Dp$GaU zT8dX*e)=LTde!N4LZH@ zcEZc|}8WL6g6TSxT{A>+)?r3}z1*cus(c0PH&%Zk-k zQDO6~E#uQmEXUq_W6dkAC!mtQ6CMZp_D@L zDj^k8MkY*j4-8AVIQ`+Ye@360fC^vRntS-#`743=1rqxUG=Q)khox)vUdvECC2$3l!*}qLZ>fUccl^=HrVD)JC#EANhOY?yHl#_= z5Yb%!kGRL;t$req7iVr$I>FjHexG$BB-no_Bnr6{>Q|xKNpM`=^Y52W-42+83iG>O zyRiKO%b~-}%Zoafpi4uq$c8Hxss=CdyzYspe4-V(TP^Jtu{?DmvF7_LC6gUv} zdDgA>WYrXwOQpHBE0>j5K0J4oz$HNgmkOE?Ccp7ZE73K z*8zRLdnx89y66`lxa>%nM>J0ZKuD-t35iTbLL!<_ z(<-v|7bTbT_G%*w$L! zCe`~YrP8U@)fJVjl9Wk6ZzTx9CRGUX{p$6PJ6>VAkKGR;A!IXfTgH#LF$#g19B||!;@A&{>v6~2aic3mKvye)_vW#GpD@6HzK2~$8XuwT$=y>nnlE>b*6wQ8X zQ5VtO=!|ZA3-$F-RlK$P7~x698c@YT>6T1hS4voQIS;|14qaeS?gy#wjQk04x)$@0MyU-!H3 z&T>@rdctpOpB`)}T=~am7cD!{je{Hi>84w!8uqd0Dr-#-XYpIJ#+sulC9|&k4~nw( z9|Xe+*MC5)@0Z4$(T~Q)qC%qC?@Rg@TE3n5W>UYtZ>0rym&fW;q z+cO3D=CZwTT#`zfhU8FEDi=(rgJj=bejjO@v;&oOmSX$Vi9cA5PdU9eJ%K{!V!m6~ zGh&Qt_yp?=?MeSp#kh3KOKpZy%R@s$7Q37>JAajr=_Vz^0gM1f03(1AzzARj{QQQQ8Gs?t+ynMQ%@4vJ=Mg-RO9Kua zbGakw4J?mfyME2sus?1ma@P^yJOTg#Zx{iL07d{KfDyn5U<5D%7y*m`MgSv#5oovw zRF_BaF?=-6U%=@*IPk?QUEZDl{>wJs!MDoz3j|3;llJ+Wfl$n*P$y6J)+B8xoqZCq^lp;#A2e`O`o&?>KkS9a(06{AWLL!$k zaJ{53mt~FI1LmtcXT6p=^Y(mHbYIIkC;h*+6r3#_zI0IuDoMRD?Y)r)REeyISMr2c zWx3E@w-Qh=zYZY_Ls*|C&Mo3(O9i@Iv9cWOH@ zNhQf$Vn-?%fgA>bOUs;@l8z-O=Afg7iRLGZ##+vaLS>3jgXOgYiywS6y1y!Jl80P| zi|(r2Mk&PI6?P@IIi9DhC9%H%_7||u#@?p&V1EJZFJQ_t^fYLVT8$w!qgQH{K3zA_ z*h_0lSLf(;k82G^ty-r~%Q2b^Gt}9JtaM$bHcc|gn5BpB9zl=<3IDPrTnVoO!$IsX zVDr@WdR$_E0e)9Z>@U!m`~?!ZYRcg|_|Nit7ruMt?^kTP0OSnrzn3gW$Bs^YyLb-zU(W>x zpZ{T>YOtpyio})om2Mqf`Qb3m+^rH0eWCNnm84w4G73^Akp0fcJ>aq2XoQ|Pb5{Y$ zlqo4z!jfQ&CD^PQ5^OP*1ok=lvmZK|zyBxZYlqU4ZCMok{FNQ8BUEvm(BnxgNN`n3 zPq;6Xo-P8CDOJ)CR7gW4nm{gRpxOnaFP8NBZ00pTRM3BZv)G>?s8G@V%IJyh(Ak*x z9?IIErHb2WEpDoJtgDhtx6|t%yk_~vnL7(eCd*mYNg;emF4(aV2=o2u(+wl`-8TUh zoK`&E;ngOVqf1*EBpW|R$7a9Nrbu>6HF%PTBQvn7wbE_9!!MbA&7C|allQuZ;VkPQ z^99ORp$>FGsPDmf>yGb!Yz->-dCYy6wA(F(zuw>Ru5O>BAD+DbK+X`YYS1x{4|G*g z__!6+`6_%K@|?scDMO&@fS-%QDKK}tyZrjEycZJ z+ji*rIl8dwaP+nxzEmaVct~PsRYxn`POrQgg2Ey&j9UmCy1+o?eSa?Wmv*!10&6*4 zASZlH=;@HVg8G9lu-3Y0;9dPe0L~p?gd2?zf<}TKKr)0vu*1z@wR|u%ugCRui%`L> zZ+=KTdeBl-+-%d>IT`5tzb5~CddttMVV44&IFAqo{NXTJXDzMYmM1KztV-`oYA4o-b8?5_gVAgbm)*ewgTPJ-F;mmM;ZS-=)&@QQu1DZQ#C|ool2{3 zLjtQh6U6PvEU`_}Je@rdYbGlp(~V-schN&KoC`W=J#d1TP$Lt}mcKkQDMh|?Ka9+0 z4(|T-Ez2=+T)z`{PN56yGJ5R12YKF8R;3TP9hm%fA+cscKrU$|1Id$eIjovOaS4IG z`!YLzHvYX6sPOU%`mJBOS&p8*HSx{e8R+ut-a#{~f3#P(Cp6~7{FU4DWcR__enlBcPecN($R_adEqOIt{bjFzV>=UX) z>yqg~o^O@Sh+8uGon)0}i7T0KFr<=GC;65K;8a+al*l0vRw~$v84+xG<@V3B<_&`L z?dINo`pesC&hzayU;pgUkt-f!s$VK=uGsOV3-okluks_4yf2Z2l9ho{2PfAECc8qQ z@6MD@K7DKUU8qntO_G!|)2<7Ah)TZsbK;wCM5z*&csQ*FSEUQMt#^2xSD|*|vIUYH zx`5yEAN$>xn%tAq1^mS{=mPKq-Y^0f0gM1f03(1AzzARjFaj6>i~vReBT$L}90y?q z)CJ^9LMoBVNV#y*IVAh;I?{bj+s;L(@ZQdmq2|k$qfLWWy|}O+IzLL86+KR_O7c{0 z4XjFUb*l^TeZD}soWj?rom=i7eeq%yIfd=utB_p!b?~cAPGLKoQ&jM%;A1D5d&3^*6n4r@03065 zjfVY$xf~`9IHyo!N!avEasOwy>j-d8A%K84i~vReBY+XW2w(&-0vG{|07d{KfDyn5 zG+YF#%PBknAC2=DaQY5*dp=HjCwp(9&3AA<=R2qge<5^F@E<{)M34E;Z@5r2%y*tQ z)ZAO)msMRPp*7SlB&9rm)67JEUdM^p|qD{D%nn-GxNQb~YWJva*z0=Xz_ zi@`Mv35L92Sg&BElt3nC+F}Uveb1N@ zw7gddIu!R#qF>+kmQ$zBeX;wmf6;-r$47;%N>;^t>fu^;?Q}Cb?Kf35IxAf}J)$zf zEGwn5(lFmTDT4^9l42x;f|1GvTQi{wdTeFV^tNlzp$_|AI=*z3y$UKp7rPA~^YV!Y zRPojob42y7bY+>eua9NtSr4k9N(W_)s-Oh3w3N|GBYo?JQAm@3q-{zrlMCcg2Zb&A zGVOr_=a+yb@AP+fzyI$amXjTNyu-{Gi7wn}dwcUMp`M2`mu0ke)9hMXW$LD`t;x!X z{RJA8zrb*=MRNEKP76((+U@I~H`{c9)qY|Ibb(hwkA#E-^%l+WU)?af>&E)7K{Xgq zI=NOFPFN?CD+xv)w1lDM6s-`(S6N#OzRI5;4Zo+$8<?H}b({?Ow1Hg-<@pj$4V& z%60b*+cL~^_xiH4tD6?ngT7?hwqZBS?Y6m@U9Z{ZU5_dtWbW?)rLd3!-F6{}uf7D* zB?t&4Afee5$SPY~4ED+&e|ItY)`^>_py}tg-h6R~rRc{2cW%BUN5^9`$zy(sP*p{2r3SqoQ5a+H=K+P~Mr9aJ!Vd|V60C%f60A_RyxQW3VDwe@ zJ?~s1cA~=Vr2n-1RhEJy|7}Yf*9Bb}FIx0GeN>ecWu201R>is*mG*+BDk{C}M`Fx< zYf2?=qY)A%2nnrVNTCuXw8h}CyfrcQ@Q*1I(7|b^&W_6&<5USwwz%Cq<>t29sRXra zNW2@BDznO!N;hWbLefOQF_Ei1FR?&wHEZ(aTZ65Y@gFulKhUe*9nH zhWmd-m%A0681TRTu{9fx6=ziB!Emg!1@UlZMXnsWu{`(TH(pd8&u9Q|c!}3Nc$t8oZas?w7C}Ue&90D`!vriAs zAK3*Jv^#(8@eyK6;qU)m*Sr*qE){R?pxE|eOwDFkJN9L2R!?Tw%4NG6h&)i9aUO!n z4qc#qal73EnoL{A=>kE)Kl_P$Mxv)$l)DE03(1AzzARj8W#c}vBtR;HPy8o zd=)hm)Txw&lEUd)0>uz&i@{5I)0Vb>PhS{?4*jpq?ZyA>vK;O9%l`XQm!iX$JNiAH zc0`r1(@MG5wT)fhsj5z`w0lI?Y9O)3m}6^7DPLVAMREc6a)m-J+(Bjt@ZH^A8n(Ut zbaaSGZJt#!%Tn}j_kpkUBG4tjYZ)7QPEZZ5&8Z)5%2f|k^GeHAk6MnQ=9rpN$=m28 ztnv0VNwR{CPKfW_{Ku^sIr}D{L;V*=9OEN_UO2R4#1uNJI0}$f7q4ko#)}8l5hi=E-zcu|c%ke+| zNR2%4Cn~&WZ0a|k&Q`_OX2NwN*Lg7EdZ(TbHAmN!O1?%X9G+z55{f1j3?Y={3K71$ zc6MlYr^y6Vu;iDxV?{SCC-!aX^jy%7==@74_l3v-s)TO*XgnTJS?NSulhb)%r7xF9 zaHCa9?Dc1g##NC=&>o)isI@|{?P`-p&>rUzltB>xh!MaDU<5D%7=gxx0L~-8c?39* z0Ot|lJOZ3YAmGY|^9a1nBM4tGbK{gxpIF7^5hRJDI4&Qp-+2V$9^y{6H_E+PykP_| z0vG{|07d{KfDyn5U<5D%7y*m`?+A=EkA>G9VYZ%cZjOhaaUMaJ+zEg~=Unc%d85iB zc<_zMeV!O}^>v&_0L#@(8|zkH_gf zPT#@A7ShOnw2432d^P*{J01 zfd6=-l2MXiyhF(dxj-IDQ^7Lw%h!JzA~!{$!m|%Y=KV0CS$LuIU2pGXSycUlx65?&>FQGLuy8^)GU3v zZlbZ5)|9T!(d!=98jM=CPM?-zG#O^7;mPT`Ol_KEk}*pURTn{!1Q!m)l5pX)ZiBWM z`wLj>AM7ts{phS%$~pqFsw!!*zknB`vvK+hjNra&4&TB1&Sxa{Ca6he@(A?dD?+~w z2@mQcGT=M{4y*dJ<;9wlOZyVHc?6tqeI3XIw347Wk7ZWQ!1^VO;m1@lcr0)JZSt#o z4JuSPE8*_cG5amwz5a3fy2x+Q5!EvTA70!|H7vXqh98c(HJ~)cu&PPb-eU&!_Np<7 zH4m?b%R1^YflF}7A|(pBl$8qP<~mgjUdyX4jGhwIWH~Bi`d;q?T%PzbyKVbs-=lqo z{%>!6VVWv2#~Q{|2YNw;CNpS^ms}=Q!)2IrT=J^<0GEW4mPx?wOiBr+`GDDSeveC2 zPtKo%3g>hRo*dBJ7P)=Mviyjb(lYPhVU^%A(0DOpBB%A_(vu=Nt+e)nG; zxOnpT38?V)i%T<(H}nFZ6&(;)AC_Ul)tEw26<8YR5{01STDUiM$*rm;L4@T zF_O}8$?JM)<&q#Iq?D8@1mhC&es_I5>5-?NosJ5Qs_%XK)r*#c=XSl*>{banuQ6X9 z6g#|@Ss_&q$O=bELRxrP^$c-k(Z#yAl*KAC)oXRoQmQ1RP{GO=N}wpMsbYxu-FoNW z$wNLWL51(#J^N{tYB@#reB{%d>FBuPnZO$v=Tu3o?`Bu8xP%^eB-iIUbb-z@xAoDI zA$prGu+dLUM`VP*8+tsXNsvl3(|=?A>51_>DMbMEfw9$$$U0ghp$}1T&dV~Hf~5t@ zV45lh=jFnAtK0N@ArTe!{Nm}IN&i}kc4gkLxp)TM?D5)&2R`^vHSFuUS|cmYuHGGk z?q`0?l}q2Ok-#O?u8^k%M=68~P@gJ>LnC`zCAE0}v+1a?jlN(~VZ5cNxY?$$bH<=c zTUP(NIYCm(6A7wbBP(6bJbIXa_uO3c6nuc~wM8`{B+^!m`vQA)ipz^p110miD1EW2r zlGmaYsFXqvB9TMUN(z*yHB}5pLxh`LD>NV>-c7Et=26vfS$BdRl&-XdQa~>$*g^?s z`0S4!uWYB@hKiI+TOZS|upB0K9z9KWL|1~FEZ^gjg|$*bGICZ<3UyEf5`DKk(09wQUJyL_M3=pty7ji4dZ5Yqs2RVaqb<{> zy_PpKx(?>n3M6`|)Ww)bx{~O!PL>WxzSl`OYm$*LQidS~BM~xvg;UU7*GVr0^f>c~ zYN#xg1^6D1aPlO?(v&)!E&tQm8W|>KLDNiV%)sg zPeiI=3%qDTYFNL9cy;i~vReBY+Voj{scdJgypLpj4^jS>z$%G)WSIVF@WEn8*WJzq{vspE`HK zD0HZ3)R_;GMpzCnI=$#XS~9wLD|zN`f2&l(>+JBPtH>kr_I!bIIfY^Ocl)K)oKan> z$SI71FT?0EUx?b|6h`5k!ZHZrA29+L0gM1f03*=25Lgi7AJVc_EC0nhlO`ooYcl9G znQ%olw-4x_6x}yDIx4wuzxe1V+ig)@!lTM*1CPJ$)HKo8r9iaoKuK% z3UN*$&M6ddWy3jz-sTkk)$GJW;YQ^*Tux!KxCO`M=!TF}C~j?gvjTqk@SnyAU<5D% z7y*m`MgSv#5x@vw1TX@P34u}OO!zpDn$uv9a|*lXJ^?s%%Qe8hYpxFVjW(z7dZ(-d z(-*WZ;jSYHh&<~Tc?))U!w6smFaj6>i~vReBY+XW2w(&-0vG{|07jr8B2ZmU;Z68Z zoWFq6cTl{mP4>54rcbu{4t@mw0ufs99XuD(E+|O zM0WGJ=^_sj3cU2Li#MkV%cqR9wpY+{sX`zN?VPn>yX-Ze=$4H{H+%-5(>AVs!RJ78 ziYuQ^qbzQ?hWgj>_>?Lc8f>&_S|*V7a?VSd%rSMZ+%2n=NOvRChfE@~#yyk%+~xx&S)-;_o~Ed>s4o%XvH~IguYF;ZoU|i z*k7O#`3sCHs|%c*|K_^XB?_HQ7g**emPVw9zZv>Xh<}hwr1xL;|E0&S-=7l{fXvbf zRR9Hmveu;}Bb5r}|CzIvOHZ#u1t7?m6Kb@1a;1FQ7sxs-QYk1>DG2LfSgBwN0Qf8K z>h|iN8&jiD!OX*x+qaLh6tyo}71#bMIv=!uo@Ss?^=Nf|uFl3WP*g$E3G&6tIM6)F zl}Mkq{uB*?Xdun8Qbr*Aot(Acv0VFZ1N~tSOn1|5__S{vXx0hMB*921My8MnCbELX zvKLG`)wqh)YM?JC*CFN%S0i~vTU zp(Btt(46gB!uqtiq@g8YB{ZdANx{?tFwm}><}%Qi&E*htmMfFa=F%s+4>TjBgyBxZ z66~lmBsF{8jHn!^NxJDtf_!;iU9?&6N~m*a`a~^|D=8U7Z!>aQu>OJIFFzVg7`;_07d{KfDyn5G%f^i9s$lHz65dUe607d{KfDyn5U<5D% z7y*m`MgSwwkP#STo&|4zwAloEoJY_zF9LArktc%v|D!yDm(~=Y>zv!+9h^r1yyFcc zfDyn5U<5D%7y*m`MgSv#5x@vw1TX>(8-Z%_2t10XCA>P|DCuQ)cv~kzYY3#Cn_9sdPCyG zP)qTm2jea^n~zSFV5q!dID2;->4k-6(|>xhi~a#XlAHlxpSKg)^xXG+fA zdmf$pbKd4)#W$*?66+FM{q!2(hRlF!*tEU2A5Uyze}SB}*k7Pb-BarrCJOrt@H;fI zzd+7f>@QH-k<@-wBs54Vn(V*Q_80KJJ|K|S-#n|dP_;IOAzX98{m(80 zlxZFL76KSZ>0u=bN+x9la@(1?4E(Zpj(KJM$j`5$f)f){mh?DdDTtB2rIsy4CBF}y z$(-CASAB`<#=5?01t5rL1z@oG30E3jn#VfSa~O!1q$ISQkW+G@`VBD4-aY@pRmYw` zfeM*c>J48{vJ?+G-o`v*B)S-~FIo0ZH`TBu9_l&4ZW@lN=?p-{poPK4Q^PUHJhK`) z>vB|5kQOSDvkICLY*d0(_SgS==Z~-60Xjn;UcBpkTT7AZ@Y7%Y^c=eJ;oZ}|y|qS_ zbbTFc>#HA}p>F7`vV9D4crNk8W`FYxS2le($C644yy>J01tE|(-OOcRmo3N~TVh*c zd7^QUdAci&mCmtYyf2jmm)}b%Ae2y`kdT?nz$N?hfQVtTWy?|Ff={lz-uZy##A4%| zooyGQ)02o-r=K{d8g89pJtyHNm`@H`7fv!W*cQq>uVLfny00b41g3YIJyhDJR zHGtnCm^Ub2=Xp#C?HaT0d*^u` zB~gF2Nw7>)4Ue*py6PKAH_Kvm$02W7RRP{)f&73<*mSIqbtwzLp(}+%M#^Qvogx57 zIzBGCv~bm^o2Za@b4c6wf3h5VR{D4MS2NJJnqO~?dUA_u_yiBxbk~7YDGP{rADjNw zuvw;L<-MPjD`}8k6>^3Y$WD3YGO$zL8g=iA!9S`{!Q#N-EB1`G9RK}=m4B^0f{u4K z4c=-td)|T6_>2#piyc@n{ao2}SujgyTK?4mnUVq9dI(Eb2$XI&b6I3C`ew;PueLu9 z>VWd0unSEFS&npk{MTNE-O%^_uQmHOOcz`I6zfi_tGbcoc~A~EKjlher6LdSvH&Ah zGBOFFkh4<3PK<u_xQ5#oAkt4D`daQ~z{f{8hsydDus~YeA}8 zG5I|+ay4) zc&PHY8=O_s$@ht_{miqgp|eZ@#J9==M=Rm9WjRZdgkW6>eW1Ur|LKK}UGb zcxzo}+tntIpd-#BD1#vW5hH*RzzARjFanJWfdw)CAuU_A@?WeoX;Lz^CWB6sX|(MF z`X@#AO^%LA?%OXuI?8riRG09ma+@wKDlQ>8Iwm?PDlsW;NZ+KKd$C!-j98+r5k4eo+)2biW8jQLuz1viQ z)GU3vZlXF{W6E%QztN;InB3l@)!W{m>)SGFwayRhdY=^`2O6$-PRdF#R(798uU8wi zrW}Jl3J|XV1$Q@?rMtavie|bx&7hf^0gM1f03(1AzzARj8a4veui_r4syCcxL+GT@uY~OO&$qb9U2)tJ@A}p5F`?`$!nf3mUG7UscqW^y0yD2 zz2>s=tMnLxBuV$a_i{$6P-~1crl`|3MpIeedoX1tIFoH!Mv;oL7m(P_=`;4yn$p!d zdL4KApH{8Yr{%y|i!;>OhOBg5rZ!D7$(W^w*CPm$AmLw@q-avNVeUgk%VmT=){kt%6M0&y%1pKA-4N;L*r!i1xRRWgKxC1o_9lNi`UH3nKjg`F~}5Z477v@M+?nauqj9d!|+H8gab8vTJFvdcG6-C2Xb*2sl&d7pp+~u z`J|LCmnY-pXlWd*1UXr;rTqAm6@rma1TB@9b@0KgK>I(gtS&I{tM0$v9hi8Q(*?r( zH~Wco5l5Ol9JVsFY4GELXGO7a6W;100wC73bPg|{i#2l4Yb4-~MKNV9mAo8YU`N;R z*P`b6_XPXeJhq=+CFnSU1BKVn?h%d_sgeQ>4crdPSsi&fTEHN#F^rZL z!qLJiX;MOxteoU=5(B5V#z0GR;b>u$G)!VFL(n|Z0?uuXftI_4qlH#7v_uM)m=uo{ zH8`*}23nd4M+>x{goI=$lHu|A4CkcQ2o9UwB^)iJl9fsbmW4=?GO15qF8L70)fi}r z6p|JKf?}jliIt5p@RAmY*J|*zK#R+H2#$B0FYx*MgPRomkhhf61^mT2&;{ya6O7*z zMgSv#5x@vw1TX>^0gM1f03(1Azz8%r1mJk)eZuJi3MHH_KoSaw7vWE?ft0kypbKz$ z1WsMxhbH5e_WNW@NELYm4{(n!^Zn}%KXd*Rj?J2H;P|DIe;+8#BcT04>83A=3o3ae zz8NEc5x@vw1TX>^f%=TVg2!yx1529W?13_&3OIWJz~~XBF&WfTaxzV}>;mVnwo5$A z-Z~Ag{>++Ye^`o6V^nLW>l_cT{$B18aBMGCtB3Fd6U0WSv$LjY4ff}zW@Tk^K?>?L z%?zXcHb_X&8MJBeIHQhxf>8~T3zgrev!^gbWol;5DEm57G^vIxwe{804VqN@E7)$G zqSLEW3|dVZ#8g-VAfjxy8&frzTD3uEoUG1DPj}umz4XnLxy_)>&eWvZ^Bmv!y7G~A!f&>2lxaNTT~Pi(yzfN;Idn3`p<2T4TfwbS6TU3jUo4=TNp zOQmoSlAUERaq$)EawJ%<(>1A0+#A#4?12jSOj8@+vSmAm@JrdB+0vV(j)$aZH3oIL z5z{p>Ah>1s?*5~#bE|P`rp}~Q8?{q&wD9$J`BhXd>BZ&FE_%%rZ4Y>6S6EAK)aUht z$M=Tw2x^f>P)-+E@P@Mamn%QoR0Cb02N39mF3{R9v^CZRcpL=yr7!{*0gM1f03%Qb z2rMw!+yDN!{m1Qpe7TTF-2P{&arGDo=# zPRK$9jZO`QV_N-0Q-<26uh^f!{o%|k{lqfATBWA4q7?TSV+IH#Wgb*c9`U~Y?-6B{ z1S)wULRuMAjS16`meFy@6W5bPHkjCBETzV-OI7y*m`MgSv# z5#SerXTb-mWvf>HOD1Ct0BZnP1Hh*M^oS~L_fs_bG<%C&dLz~V)CSK^0jN|1fID(B zGx7NX{Hy9T;|1o*4HE)ep)U&!}Z7vOIU;8(&3U<5D%7y*oc zX9zso(boOH(jIsJxckT5Kkoi<_ixub>hKHzcilgS`$XLot=j5*XP8oYT?am2z_Yc? z{iCohP)l9FnNxT;dvM~kt=kt?p$j|+*iR^fe{FPu2c7-`SQjV*CH@g3fDyn5U<5D% zzC!@(0#V7)qmp}+J0(6U3L67pV*sm-0KPH+pA`UoRaC8v0cvzs0M-TSX4S*GKrM8E z0FDbs9>HH1FD_3W+WW&Gxb3l~*SWhUME(_dJM!nq?<227o{#)4@d57huSYJ9To^e&GBDS7dl(p!i?$9q}*X@5PtJCE`=!qv8Vbe({&$&&6BCo5btHE5*yiOT{mV zpA+Yc=ZI&DO=7(`L!2TWD;_CM6b}*)5cd(w#gw>*xRW?a+*;g1EEb1~1DgKb^mfym zwztl`eY{}=Faj6>i~vReBY+XW2w(&-0vG{|fD-|AK4(HWK0gZf;_mA7M_0eX=aWy?*RG?)78laj!pc9{2ju^SIX^Fpqov z{`0uk?>FyZ*!P`B!(KIybG=9NI4}G@^X`ZJBlGTteeZeUuzz?S*V`)dX2M>PXMnvt zkIUDS{5a=G{1F}EA+JLGnN zeN--ocKci|{;ypwheq4E+`DZvHyif%&rOGY>$w~bt>z}d{=T`fux~lH5A5%q%OQNv zT<+Cc%#DKm-E;4SeY3gTJG^Ty_t_(-!%nP+T~iLyh%vBhk_fx-fv^kX-c%?ByAbYU z2DgJ<5JyiShaUF{ow`8wnO0F>w%WO!d!qr7XZ<2?!47X20gM1f03(1AzzARjFaj6> zi~vReBY+XW2sA_l?hX)j^-s|n!J5-x(xq!sO~!yG{-Ra^CWB6sX%zK<4`t09beu2n ze0bnL+uzadg{J7(lWJe+dzN+ z5ZGYn&;8Fo41Nmr4}+h;Qwi=1gFCoK_`~LSAVpA8f+iHn1W8F*YK)pgFf$8sW*{0w zn?}lHG(jq)BmwCzGr&4kV>EG3=}FK%txrM4{*g zZQamr+rJ|8{XuR!G+opV9k4yDcOcrhZP*QSyKSh%_6lh6%yTgtTRb6Zr;4yW-0|Az zg6(x$h=N+6Pi@afr(GUnf87AbJ5)8X|M5IoetQ?PtbBPw7WY8!$)c5nOu~{RMYH^o z6&#F~E_wgGe#3#RklXwJ+pDmY+@1c>wX3h7Pwsm+Gh+H%s-!{dU|a7%q~3C-64|J7 z{%hwyFptP@S8M8kU+<}-lq4;Y%cZ1(;E%eXV6^y|td?J-s?cH4kI9>+Cs<0%@jbU7&3k1~`UWAPl#*wdRbM;YKPcLc-E4Atm|aEHD_o_}F`Qeq08e z1^k$_{;yz5$u#W;MT3*krs2kJiaA?UN!=Rga0|0dse!PpwW&3Au)KLc+z2HllTZ}H z${GHs69uD1pWeSERkITv4xIGQn#ie^k`oz8ZTqf99~e^9r!pp~lA^3@Q2n1N?aOa~ zNCe~T{#uj8$2g-DP=-hd1xd&#{>TalMsF_6TX&|%PE_>X?d*wNwpqU0vHC-0{2jDi z|Lmv^%2ukR2@Q)ZM`h%gA_MYz<+pZH$JL8K2ls!URV0*L$q*8Sf>N-2RwU@<0i%Ce z>JJ4;;NT|VL7iZRe6DYC{wL_ew(pKzux(WRuO6LL*^606B`V63=C^WE28F$C^Ce|6 zB_op%B+K$y@i(GE#8E@q3lhg*3(9Mrf1kXTy_$VNlP8l5L6W4KK8;ey6kLnj<&NeW-ab+S@9r#rvO4M}=+l1(OQnEk(u6HjSM#23^{+`q#|~ zl7aPpC4(tk%}wJDUEqg(TgV=Fy*SjS3%u$lj*fUS{JXHOAvr;x1qKHU_IuSj=?k@k zPNb`I{M#CN>#XhBl+8nF#86xlDU~baq=Kh!5_J4`1*2C&+PvNUZ>VZRTh9K|_>83_ z=hG*ni+@2MZGLY34_AL}I907<;M*qx5!Z=ysXb>rbdLO>rz zIsUbGB0(_RI@gvuu9Wh+6JZFLyCn)5b=lXaw_cN zg7ah0>d!ygzU7z52GfZII7=lvXIw+lskWSPbE(&y(F!HSN@ytvZ9ERQrj4i}aa6UA z;bxae17Ns4RD0@pSlwv3k_OF2#xe>XHJgY=w7R)aC*r2a2W!n4lr7#5H<^;=Iua=> zlk&H^HEBdGiJh}D+9;9#Ky5kWWm%)8N`{ia;Uy`}<2Va%JQYcR$}u-OMNuNZV{JKu zRgH&n#wr;Fr)M)V9+$PSMkIRG94*2lD7y*m`MgSv#5fBCe zoJWB32n^~OT8+W#J6|rAp+}U)WKd7Z$u!wL=^ekSvkh74y0W)U)9KT)rr95sqSF}F z+Ud>*Sbs0~2#8`!)#^Wq6wP$|-*R)GPH(?2Q!{f$+1Ht3O&GAgdb&ZAYJZgN)+su@I>n&X;G9C7Q)vHU z;G9BXmL#74D$XPDHjm)U!K^PHxv}AYTpq!=re`>QQW|C+LDP%2x6kue48I&k03(1A zzzARjFaj6>i~vReBY+WTXb5QXIamJ)`J5X)&LhBi1n@PeDvzM`kg0PMB}=k#9zjDJ z==l9&1TX>^0gM1f03(1AzzARjFaj6>i~vTU0s__L5vbr96S!wNt|M41(G~Ujp<_Fn z@8Cwezd)Eg#2j=uux)_OZzK2U`nG}B7FF9TSX{ie7%4@&F}9=$ijc`kH^!D+YJrj^ zxhusef>jW_ImmXJ0>Opcl-Qf`EKQ{pSwm}M!Rn=pLFfg=!R?l zTgKC#bfK=c7mU@CI)b}kOe&XBByT3$ou+_4`tt1;p84@fpzh3=lIy=Mww(F<@x-v) zk;t;+t=~SH)4u_@|JvQPojC-Ki;v)fF~Ws2k1rT=@c^ndXVweGNQ&akx2e+l?oKdUyuf9YwDi@zDTP(xiq_ z>pDwa`(o?}mI;E)Eu{-}9@kI2v?)LxK}%#bBa`yxbl+(TxTdch+4tS=|L}u0`zrf?yv208#A<4mq36kyP#kjr=^3w+X- z=l|2m?++MfXK#JBcJM~a*@!)B;?}M}mPg~e{TdEE<)8*O&K$+B!&erllM727^eIva zNfLyNN7)VR(w7z(pFa}>jml~idzc(Se0H97LEOk;PMM_AylqGp=F~K!`#e)I+-|sX56_wly8K|3XIrGAiFUHPTh;~tZ zda+#!8s6&W7O!5zs~bPZDOe>Xm4Ka{oZ-#UuG17SPk&?cnx#e-M&0SY z@3(vYw&m=ZfRG(eeT_bgDVcn8dP2jK2UPaqCW4BDb>Yn8MUIQZDibVG%VLsI(v(EX z!0`zl#cnW9U-?VhHs{vNK}EYC^?!BB3dY;8>(Kge15|dP9X)PYd+&b zmd68(pYoCBQa~7zpeY`gHAo^~ojz_>@$nKMOJvE>-m-l6^8Ue}rY%EzHM?4=?!K=f zl#hpj3m<`wGktusWmVU$t46uvT`0<6EH|$esW3ccixXeMdv^L z_4wS@mb33|$Sb^a#R)1@^#1yki2PQT)3;xE_t2wqv{Tgb;5S!#H<&)sc~HWoQQ^*=>Qig#%4bW~ zMgjopC?&0s$SFC?@_0N64APf}|MYxj8)#HkEEs?A_8H5Ws6BCqO^eWu)8oR%1*~W| zjf!0)4RFXdoJ#sgtvQ3q(M#C|ID=DyA@hz_5PZrukWjvIA}cqC&p|~OCT`dKG|lqe z$-?7d>EqGvr7y*m`MgSuq00KCV0Ot|lJc2AW&Le=Z3A+)$ zL7Sq<)Ief{Iz^*Tt8knvd<|Ont}5O1Xz#w|C2b6 zz}q~65B`adIS_DRGnYr8ZhC~HD6Qe<5i~tv`w0Ah)9@=|1TX>^0gM1f03(1AzzARj zFaj8XdW}G8{t$S7Dft6nkMjtmd7}XbHg6d0aUKDHP*onmjz<@4DL#|4k-Lr{Ao8qV zi~vReBY+XW2w(&-0vLgYh(L9D1j+EBIDY}B@8F_GPJQ=L z|EaxfzJrU)_zMJC0>c6Z`z;m@hCDidKySavLt3V`Z5!y7%^=H=l-zCV0L{qdQtPQk zM(&EFo&?>KfW!e7t}WuM&nQw#@OSCuxO}icU;LeDe(wZ7RP^{WD@Kp9SV|sRz5AKn z6VOKkzY(=t=> zI<@B27M(g+&KBJNaC$5lFl~&#ci${lmBdy;n;qH~zMxITT_*%vxEJhE`Td;i**wuX zQn>&5bH9fAhrv(aybXkfaThsr_rk_e2b-7d(VV%qTtUh&4({ z(VQDAMe}BQHZC8A+>FS{-83*$<_%nO=$C6L~Y%u)n|^+k_={tS&y8CPhKjk2J?cv)Est;aoNA!kMGG!Ttgjr$}E`C7uj7 z>@R@*1*`=m6qDXtLtuY_YI-+!{sO7oQta>@eD2R}&tKHxgT_w)7ly@cAN??i{2q}-mk@MlZO+!;?jx48%%$eN?- zKX-fO>W#f8@kxE_kO91DDCzvcHD-@58358g!AXlzusj-|kIM%G^w}#uc>T?x&{3Y4 zI9esTWhr_7LAlD5hTeSWkB8QQxk)ZwHA*#Vf)%)mgKmfIFoRDHPy~20=;-_y;b@a7 zSr(2f(NaDq$>3o0`kbW)Utv|K=*KzCrXgX@LHB8s*!W3ve^({tRHAX)r2wC-ZGqm6 zwt>RYCRMUr5|W%^cncsOmk$BtA6y!GqU$G6lI(kS@lHvI<>aq}2AjkQs9+jr^^W+R5H$ z`ljUdrgl>153ez8d@aJPwNn8xhu|;eeq25nqrbYUL-xR?b5POm!!BPr(#KNLu48A* z>L|1|-q`x-&nH$c=M>vcbMj4}X+I~&8&!wSPpUC{ybU^NSQzj|r=&6-6>#uI|2XGF zkKx-0R5bIW!}AlhmNVo3Tr+U<5p?w1h?ny&=c$svu0$oU_nAIn&r5M_Dc9sqmvC7-Vt$-WGO?uE%@;@xjrN|dc$cv+Q!KK4stdr{{rw@0^&JHAoC z?c$DigD$bg?D00}pl^ZnR)$azyan%$%Lj+_#@}xC$RFxLn-3LmR!M@fJxddE-i+3GGd}Jc5%{{`FnC0UN5wBj^mzNiWkD)h3UiGtMI@ zgCPD9BY+XW2w(&-0sP{=o(A?fk07i!zz|BoE~E?Ws>&mn`BwM+;ui1qz^0gM1f03*<_5vVSYAOk)g=P%&&9b9$)>CnUNr)JrF z2cL8C7YOL*_nhwm$)oZ|IxkVFQ%m$Inp8uUOAdk65?w~fWE77M7Iox5XumR(w-|yN zILA8U2%J`ERQ?DjYjtXg?v6F9B|0rv$mKj*YXzg1cb=HF;a(Lg`r@K_Sm#u`$biU`NG&Pw;e$d^@BC+FOZ&&oUZ8DUqEftYST!Wj3z3L zYQg>j+?wd!HJI36pmfk-e*sSh9rhRSdeC8ifeM4J{@dAMe*yU3i;*uKcCo(z2~8nO zQZ%XCI4=MHiNAoBt7;s+gYii@L+<=HV~I@{c#+cuUJC!8)pu~K=)ZtizZbbj3$TG9 zn%dcB)@eF{n>Ld(N~a|XgE!;N}FSn ztWRqjOaPpRV7fyW*!hyK&8Y7_`Mf^r0vUpRzc{0GnS`Vvkef&IUocANbrE(<3-xRf zo+un`a<1fMAZn7O_?s5MD4kc@9MeKQqb*%H+MrVbvt}tv5Il}Ha7gEMHg`0b2W6YjlNz;k9-GYxFvyt)7jxRN-g? zYjjG&GNg>;QO*Ht^g20IQO{^g5so(KROAwZV5JO?nl~K5tdr4J&opn1aI`^eIW3_n z$V%dIZG+hIcg~0J>NaX8D*B-FWg7iqSK&^fU7d#9-TGF7Dk;h;(Nqivb$bG;^|5}a zo>h_)grm(CTh3CD4$5Bx0I}t~R+5gstv-!5_$G0A1WsKbKs`U_{cpntRFOx(SrnAb zBj^Rc+q0VBCwsnu^{2{rT}tx^PWpwMZ2F?Opz;UfdoThR0gM1f03(1A@DhP%S^toh zty=lN5^d6?WNJ+YohH+0+XwVditd{n9hKa-Uwm|w?Y5{c;Zfx_U0PIJLUMFWbW&7e zQrwWfNu#3%M~{x`J0f{#Tmrnnkm!Wu9xl%@(!~==ExY)|6w=M*-p$py2L)JS)@feN!~k)oBLJw6v^g?w@ST&=|6{ zZl7y1XwtMsb+#6V58&_t96kU;Og&Afhmm9(E%hgSphuL(IAe-htLJ9uH0!(Tnivq= zvU_*`(biepI5kse(!$k7Q**TXRISUeqH^=N%bi{Hnkm{I@XW5TklgTcF=;4I$9V*` z$RjA1Q+Q;-^MmgC>f697bOG)Q#ko2^0UscMbpfmk zU|j&~0$3Nox&YP%G^r+Iiq>dSgI=sl=YDHmPE;v>AE%Lfs*9J=xj8-AonoDpV^V{% zqchELE=k-?)3myY875=7+ia4q^CmaKva6WvRzP;A40G=;TVv2nF{&pS?RtAS*W(9p z)rjLdf-92}Gx8?>63FEgrZxSDyGz&ba|)a8Z2Fn)!*Cx6Zx{iL07d{KfDyn5U<5D% z7y*m`MxYTOkdZ$VKE=fRsjyGa=UnA+PN6c7!$gs1fIZGB^z&^0gM1f03(1AXxIo;ms2H(c+ciLIMz=b6R|M-Xjt=*(LqZ^#{=5>jrAUoyhrkVQU?`U)NYI2LnUK;nL5@*#r+Z{(rD`&*0Y5ZLk_-!06RcW0U1u_u4IY##8B$5o z5{8m9d_~y#`5lgb`Ud!&@A-`RwO{UjR4B>48kc;x<#0;jAjv!X(WU5|J?6>Zs)jAM zf>+T*q?opDkt%gL}hcQoxm2p zEL%do8hVp!OdxM%3(YDSRw5%PlHippKvTal*4EaGU0$#Jna;0@tyiqRFyd`? zh72?cYaBRbLVDM;SCDG6|!QO8M<3!Rg#v9l$pWs&}>Q^cpi~YesnJLKtfoLdp~} zhUCW%*0!L6*?GfgBO`3{q<2GaT8#bxfB(Ds*vlq#?cJMxcO5-HzG9(b7XW<9oOi39$%VP<>lOZ(gKmU@;7>+D z@+ts;4f?)T5BHw11&&*6`8e!@58t;OS(*9U4$D<^B{U;5H+^=s$1QwHpf{`DBl$)_ z2_#4f!^jD~(#LE=4|2)B?D6Q{*_uVDFu&jQuw~EN=S~wkZ^&}S1>Aj0e?9tb^fx1QjPAr}!TzARBiN%zJ zl*3s9yee}LPyYYtsKyg61o}`~W#PnPsYJ#S6u;Uy1eG@oY1KPjpj;k7&iGfBb(sC@ zpH<`$bc5+&a+xWiHhBcya2`P!1o4j;0gM1f03(1AsA~jp9)Z)mARoD4I)ttJg3Ev;dZQMTKSa5bt{ZO|DftFzM6op((yeKTclGib9j zHINf$&3=RrQ06Y1tGM+JjnSxeV8{L044u)GWhnnnxtjrqa_=5)Gp1%4?4grUdhP$U zcP?;ImFXV`MnniS3r*7yx0~1DT;`lP2cN!m zA9D>)^U6!IjD}LZ(nOr!w?7B=mgozLO(yxf$~Vdi3fx~@YMh=|Xw=(T^`(W4ZN;2I zqT?Xu6t*F!ut^@lAE)FMb$&bf1v!r(H|jOnotc+Q9zoO^#~UL0k;7kx3ZMe004jhA zpaQ4>Du4>00;quR6v(&8w=3pZRB*;Tf`rOzK!@R#5pW(>DX(oYkDv%th{}Oeq)Y*5 zQyxLDMa9eiTAwo=^9VpeJWv5t02M$5Pyti`6+i`00aO4LKm|~Nj;%mzc?8Sg?a6!r z7k4m!L+0)E-^ML*a0kone1V8+$Rn5*`iiPPgb6BdUqLE(i^}bel-7|kEpxW0=CcYI zp66h18tgJ_npGeJ(`n#rL6!kU4wP2$3jotURrT8RdGUi%ZPLK&M*serb@y9+cbELL zuXNzv)#DF$w&_ysz>$`TBTb;chaGTh$;ks!N%aoub-5}=0b&pDB(14RJNj@;l~m`j zOnU0xeWTYz&r`+dA{{SxLA3WfvJawF-oSo%ONbwxv%?9&R}DwhIUuEfIw3(t+Pz81u}L{kqgaEkI+PsF5bl9ddf{PbZ!{K%5KqqjL^8 zA;VGvLE3M{FMvqjxcT~j+;?7(Y9mZ9uldgt*4;Tlqby%mOZ&#`itcMUt4oiyyU`-$ zr-^e)K8O<*8Ypcp$dAt15$PO22}PDPZwWx!t`shRP%#*{rmHZtvmLL|LQp! z(g~94#=LwmT$jq(yUR;+?$GIvAG>G3e~Bl%c-33REquVuxz_KzBsb0hl~AJ=L`EP< z*sk~m*y!s`AyW>11El8ncc*=k7is<1=IH7_)AiDKYhGM_$FFyc^vtr&5eX$PeHjrL zjg4D)zsoZ3q3E7YP3%x~hG#Sa!4w{tnn>%nj1O5nVVYF)O!>jOX}esG?Y(v4k#YTV zbgA<2_WJ5eGftVA1XM4{ExgZVocB<4PmQxf(J6`-d7`}};VGrkNe0xE68QqT@*$mZ z%o@8Y6Mo;|2Z>OVkuM;7=W?#2kU!zyoG<^w74G1~N&Aa}mfro9qb_itTo+gpu`|3^ z*woNfsvkqNLHEh8Zs!Av1Cg$dydmE1;)y`SCQUL$U89EDfFKg2Syuc46m_CQu+ozU z)DX;DuJWUE_Js;1&@g)rG#Q{T>XjupF>7VsZkACBW zatLuMs>!b%+YsXP&MQB^Jx)F9(&oELRe*GAs8?%C-V*L+nGb8I8apsu3-L`f!4RN| zUjUf?$>|q9JT<`eGkpBIcumf(t-POAKiTIFwbhJN+m9!CcM0*iyxh{1Jikt zWdx#)4S?xYtoijRk3T5YEQp+U;P-{rueu47zs>nZ`Z{~mZzlD8UFsJe)N_v5YXS*U zKotjgOPF7sqbM~)(;`pQIUuEfx@hs?ev_V&YR5lDy>UR}tbS)n2Yz{C?7oM$dRF~b zssjO5{qF2X=Kzt;fpZk$0S*x9SAuh)esm7-gOpn2pdLpsRH@<@$Thzbddp6Jbk5El z)KDBp);S0?zwDiZ6~4?6oT=0WQr3TP&F`;onkUx>jF3v-5MWm>y7|#LSgHtWmW4GY z(ZUWO(m$~s-rghQE2-u{=07`iHoNNI2NwQ&!MZsUJS*%dCAokqgU4CAx;f{|D;Kbp zm{l_zBhp0M90Z(KEsBer&To`zvhMqS|G5nf#ngXAJpS#tgiG9FrC1hVjV;Q}GGAV~ zfIY;5T0?UJOZ3VG1e_D?CIj&TFAVQZ@(AwDt~)DzP4~M<9>HMvnZicXg0|!l48}Zy zMhfCXQ~(t~1yBK0puH8qJOa!kDAmsel)4?19?>|I0rLooAprpM2$Fza9$RY6G87mf zMnZ3#Z7fxy7MuwTj-UknbVG>~w{H(luty-|7>kMv^|=Mb#R`hwRA|uW8ca$ggZ!nb zpjgRHXb#?QHk3{`n)QaFBKcQ3|Ae^|LPPW>`9IUmGxUzY2j}F{PhXNzl#c>0;m8gfC``jr~oQ}3ZMe0fQJecSYqHOW?Fi{8S@CF${Rt4+ba9O z8S@CbFOb0yS1*vW7`n+gz^(-H2r|Fl{mOuU#O2EO5rlNx8`SM5IN^Z`paQ4>Du4>0 z0;m8gfC``jr~oQ}3ZMcVQGwR-2v)(HlKBEI?%*gxNSB2@&g40`gG*g}fw02RcU8ZJ z=z^BYulDg#5ohV)cAH9D?<~?X8mc*VQc za{XB-@}_o4V`PTWw{`cRfx-NC%6O z26pOQs7tdW(JnC&L~$;lm}s2k8kck40n^*k<^UZjsCkVb5WMLboP%ES?2$p&?j9i7 zq(o-y1L@8t_l9)5BKe0+Tdba82$kC~1FExBTe`c9a{$wQIlcku9-5q%){5kA!*m!| zpY!GZfn6lqJGO@ok9^5mow?_H?28+vV=vyjGPkZyy0lJGL4F1p#18oaO-Sj@h3_C= zz&-GaL%x9IY{$|!ZlPGt8{>7I9M8M{8}5v5f>i+W1?0(PS0zWRNnVmNupwW79ZHEA z6ig(MFVN=31|PEm`Lm{Q2lwv#>yT}e-~Z837pQEUN3hzSM^Guh+BXMu1Tn7Zk|UPD zhtnk%;P#xF5(J8DIRFspw)OhQ-aR)>vQ2n2=|qnWu5!Rh$R!ov?6GIQ~+f-t;9iR9Uzvp%7 z;Punzor<2JOIz$gn3K|l2h^gHxAgU+a{#y3syS$EJki=4AksgdK6H{`ej`; zz240-Uv`shyiB!cMXgA*Y6@)hE1{e0?MLT;YOht(lt3~W6b3k8qt~1qy|Nzz1KcxP z$Ll5*Hq>x-l|385eW1H@P#Xrg04wG6@}qNriiB>Gg}6e2WW5{M=%3&8$TjB@>m=K_ z=XYQG&di1Z?yZ~NTUB16OUw7bIc0zgu&K#)esm5>Iigz2Q!Gogw}kBS+R63bZ=Mt+ z+0wtdWlYWOu4_!kKd_B|eA*yg>S7O^Q|NU8Rq*C5J^kk#1E@$|4Qm0OBRZ*s?DEUL z&A|%4Q2xJC7x?00;oU$C;(9OoBTKGYUp?l zlD7n2Lom)2)+hi)-#*WB`mU&Q$@XN*b1(G#(YZ#clIqKrb}8SY)!pgIOjnsN1=t$p zM!z~o(P}}|vXqwO8U>)}mwyqCxBS76&QbA{poXFVEf6ij0Tlg8XmkDj=Nv1>(;RF% z)zS>nx&W}zw-?fbPj6T$*(}qK&Fz-s>@BOM`uVXtwB15I>@6MRnsS{{CDl8w-j}Ol zBxf;vcqeI1Roc;qW2&S&=c}K(ci-qW(eqR>x=6>%l`GoPe%5|Odzr@@>qqC{sxt$t zOAW&kZF3M?e%Y@sVTRJrkIu<^z11|wFj}JH9K@Di_VsUQ*iG^Xrk$Q0++*Jd&tD{u zU%Tc|e{8L|qD4nGE_hIGDe@ZjLdX8AeOtb#nV zQExKNDlvW;u@_KWdrmYw_ilM-a8#@x}t=LyP|mQ~(t~1yBK002M$5Pyti`6+i{t z6)3V$@KmAYRyboGL1HBfI_N3~!x{4kq8G%14%aN`3FmgnBZymmPnW@Cj=U`2M}T<* zAOaq!04jhApaQ4>Du4>00;m8gfC``js6fY6ptU@LDtK!$U%fDEaH_3H@ z@SyT0d;!(b5C)!V*8}cIxs}u%DICj+ck8o^CUZe?wxIyF-57INj^-JW<}_Npecu=Z zREnXLgJ7wR=Xm*EB7qXL962=e^2vLEhQ9r%?%d{`J^v>Wwb0PyN?(-<~j} zSa+w47x`=TB6RutwdV~-TLSfprI%BncwsI zoefx@{Jk6hJm9D$b{XfOp|=@=)&}D=@hs5LIZ9y31rR`! zyAq5;z5pQ6b91FLjv=XePP5YFkT0N&azKVazJLRA?l}}4`2roc%^_c)_1@Cal_Foj zwI*PZFQ9xH+R|GhU!c`C7l;^g=mv`9u0Y`q{=lD_wC|_uY8`cf*-h&LM?$Ee*^Z8* zea=u7pj=B7M*@M*mMB6z1xpl-nh^z7B*(9WB?>^%YsN16;Hh;GNchC+k3Ky2y{js4 zOqU%OSHHtEHjMH)3b2`OoFAQI<5^Ly;TeG=M;HO;WGMQiexnc1oF>`CpvUI?y22Hb zcI?=LH+G+KUYF`gSwL|vz?iXWKRU<6Ycy(sW>|_P#y|t-fQ^17I5*Uf&H;CjQu8#U zAzRP^Ho9$T!j#7!|4Oor`2F6q%M1;9Eh&*fYo|W0ORcjHKbKaDQ`%gB#kLIbqjQu@ zj1;xd=7`o%fsJ0hEx7yHQyV4Q0^J{PSeWW!pdCHDu>X+!t30cID_NicHqH(9t8;Qi zhtr5WIR=_sM7=WF+#r8B2UncLc#2mGFhOC-aR^2N+qVY^(t zW&KMVzxiPH-*ss{+Hm0_z&AL=it`#at5&<^19Na$NuqRG=9JprRxAs|SFNo0hZFIS!^v zPHu{yYM&bSE93{eJSIy9ZhG32>v^ij- zSLfdS{_|#=WXm63*6sSoTr=IHYnHD4WLUB;ZKb^jy0p50vbQS0lD9a&I!9^LBCF*! z6vylt{MJk6sKa*y0M}{m}UtADx3e#4O~MYqS*6-V*Z4H(RzY zo_y#v$(B4(_t4ERHEc!gC+#}>Wna(2ua$jq0oLYdKRV~wLriI4-#E!}4r0rzU;k$E z4eKE>DLe9xpgQ$nV|&ICSsUiHOV75`rWGJ-JEu z*O#sG};^TDDnkbC66k15(OAZ3;6=AIv1b} zG~^4k>YUQ%0_?s^N2w z;K(Cipv~(!SP)B0?AJ2vG`Eb&-@= zE$LD~NQ4(PfCNjT$IdwnB;g!z&>6KTFg#7Ph65aQtMP{X!3%BD)=la26Dp&upD!L( zR$^TuegARoiPVv6b$8X-Kl~T+&YUyX7+*N2i*&R=l~)Gp{AeJc1_cNMrFfEIpqbTx zL*J=Q{<+VTUXpG0M(#bsC)O>;;`VNy_?z_OJ3lP>Eo*Gc@GNK3i|#lEN`5tvV%4lx zq-la|ZK$GlmbRTseroMMmPxhs-|ek^IK^5sbOZh7iyNi-u2KJcx9TTdx*e@O;ldX9 z>Am|#uZf=5%_jyr%c$P8z&OioZU(}@24fv`lkGkDIpF9p_)!qOLlE|vSq*S>+mmk| zNS=B~vJF3RX4=Omt+kJqb&uLHNjf>9Ja@s7d1G31&L>T;lXs(Df}3UXH00uz5gPTt zG9V7JYK>M)(*zk>nbkl=Z}WV`<`{^4GG9?HU3Bqc)Z;C~JvNZggcA$|@Sv!sC`zCS z=J94$102202JT|*hi{smcNd+8xjEN*Z%MA{0eDcOhIIn1;mG0ZGOHoH+%`Gms^`*W z*k}K$zueZdVW|)vdP@Rz+wB+jmd-Zk6U&sDrZ>)UmUx$QUWb=^e7P420}xY2b38*3 z87W`xtsWewVvLIK-WG??%tKU zz*AG^p6$MJeUYOsU?dNpl{vn07W*ZSg;oO7I> ziVN|sl5@M8Wv!Ru$XN!Phy}Hlp*18UlryU#wtUlr2WzK{o+j1wPOaMb@lI<^O5OLX zJ1>(C)^9qLS8`sL!L<-A>6~f$q%6?MyNSw3kDVho(`4f{tXj|tQ2HiW$${AN?JLg4 zuNs*u*`|#Po%wRMYjszD_|(#?4tLe14QgSc;>&`7QbhG)oP#y0oGnnQ)CIWx%aS(h z=M0qV0>NEJ!F>ewRVD$w2vU``?C6k<*x<`iO1;q2l9{hYj_oZ>moxJHO3q#I`w zHh#=CyoRTokF$)1QaSBWUszUPZv33dTwJ0rC^nfIWkF_@6%@F?xYRg3uh6K^E-uQ= zD=pOL80MOszs6viTc|e{8L|qDIrgUpriOIBZt&pX$!7UE)2xC#vr%s{&MGq&WxIc= z8VOO08A-7ji6h1)#k#$AK#`%)I0SxjAdECe+k3PLkl&9vh2G{AM(@-vdv@8&S#nNc zag@B3Ajo|A<`hPiJKkb|e0=erfeN4kr~oQ}3ZMe004jhApaNHp0wzl)yxCGq2Anac za8%_zphHrntj6t?W8sWBg}oLegAUg%xDC!e%_%IO@T=|B!>d=z_Yq)DA&7tnDu4>0 z0;m8gfC``jr~oQ}3ZMe004mUN6=*G|unyjueN%wK7nrhrN7Y|W?2U482g~K0!leZ(lLsj+6{Sccch3M+?p56>2$=;n6>Pm*k7U;Hp^Y>{>AhR>!%?_DV!zd7r<9Vwf2sWPvkIkHxB1X3lF zB)}4!#{1DZTITw&8c`6)r4)d3G9!H(yKvSuUrDz7@albk_|SzKIeOhIx^0Vh=+aKN z0EubNIVE2rz!IF&{pcJOuc6hnAkYFi+%Gr>aCD+=Ey=8!n zb9egDIXO)N(s)=cOD>lHoC7%e=Be$VH3Hnh3?y&L~L;HWOG%!6@G zX>(4nt4gY`mXGb_su;=n-0)7)nyR#;564tV@-!3<=_yC5h$==G>3F&1Y|qkuCpur{ z9UOg}%Q^4h=xvx=(%N{6S5piP*j8dNG;j`Xb`F2xAC@tAui2zmP(T&9f0Mfad)_kyVMZ#=5JGPi*bBBO{+y-fFyLX#%&+>OprB! zl58tp?Xpf7X|2xOb3Rs1-x;xvx%F(BE_F~F`pN*yz(&46a|x3jfiGZ^yJV#>^|v*o(L5_=xO)X-I`BOz4KZ28sgbwE`h)71fZ7gErM4uGX(04YO31|HEB z3INlIj=9PTC7{M!-g1xsoMT{x!m33`ozxKRx`C8_CG_1>{OFtzuMyQ+XmPxTRQG!Tz zg#v8!%YUNFTPFL}If_zicvck1#W%qU1=#4--Da_UJFk>%SzrHm_qKJeCCbs6>rsbp6QzL6R-yk)OX!&9K^z zPyC7B^Sbn(FRtxzcKC<7w5L6&3LHr&dFjiD1f>EH7*zq@GSQFDaq%>x)>0xv5uKp` zBK=C3Ti)eI=QQ?!NexSBi8=>~=0s;G%Bmp1W+)T<=o~A@@30~S6%wt)L8AF(-&?{k zEi(koN?jmA8XH%7!;SfJT|gDF(^(g=59WA61yBK002M$5Pyti`6+i_#kOFYcX`27m zC@ic|U{@T^YI$;Obg0Dv8-3H+eVas~M6#uR^kPuKmWGPX;+TS~Kbxyd^Q8W*RCEGt zZPP2b4>1G#899+9>KsIx*G%d+`tZzY zl1&VHY|gJMoV&l@kd7UD@W$>l&g)Xk+E7Ieq+M~)u{X&h`1cd13Vu$Un0}Ew0y%%6 z@veckgm-o3;EoIgemgRIdE3*_U@7K~#a`ZOU&I4^#jZKm||% zQ~(t~1yBK002M$5+EIZrOELU*vqfHNVIDzpWdZ0gx-tjOm`BiOf&8hseu13J(0f5T zoc)$ZV9OredBP{ZCu1G~xPS*LfC``jr~oQ}3ZMe004jhApaQ4>D$ubNXf2Q6XLx%u zU%<6rVB%&ybN+9^-5lJ(2NdpLZ+jlWPa$H^13nQ1ZU)OGcw>s#d@KRY37pd+Ay%5agy!pf@Aj?jwXvv8$k-l*Q13Mv5x=xPgUH=XLvwS?O0_TkW za}E&c9IxgzEW;55Gg18kk#379AF*EhAy9ueubR?zqzkEaqC8Aoo4Q(;HmwEcoJcL7 zIOi4hH_npd=3H=CSg`!RV42?BB{&=&0S*{|pyBWhcnVGpbkHtxBcfP)6M`rZ58E6# zN6~7QVpt7P=VU~>Flz0RQHLa3cH+-tDt1|GhHjwWe6dQZw~YBof9%%L7dEzwQP7Bk zn!Rgm*>0A}rufP-A)ewOy@h2+rngZ2fsNiF$b+3Cyyzx5OP0$y@7d^{Ha1|Ri)tFi zKZf9)msJ1GlGS)a{@{f+Y3ru+`3aR#*3TCYD=V=sk-q=9_C)H)wYt0NTIeO6<6Dd_ z*fEfVs=7$+#YXqiID^YL@7d^{8V782R;^_Po+XHkl#Qz$Q!s4xij9(OD#g8by1#YX z*+U;>6d#g~uej?Zlb_P^UFuHbB79<;H)#aO7XUJPZmx93-U5TVDp?QFjh#cjfO|$6 zi+llZ76Zr^xa2k$V0?ixxt~z(BPbl$b=0~C#M6$tfB|}s$onIvKhdrPwvTHY_eKKBaXmMquh27VOaI)}rkv%AW-?^P-7NP1nBGn!-J~eg8I1I{eg* z$3A_sPM6NLz!cf#$Wrpj)K=HYVW4-5%0iC~BvuDtwDB~=HiW zCD{f|NxAW+S6mgGljj~9vf|yzEeCFW>WIne2vghwH|JWf;E?M(c_^H!d79&Rq7@u~ zqT8N)^FZ=csNf7gac0`bC#|)QmUWNXF-bZ(p*(lNk$Gb-tl&5;YcjWOujQoDX?F3V z9Kc&<`q4Qqp5Y*fK&v4cl}7akDEjvE-;B9Yds4Dh98KAnoaU;%9qTso%$&FDlP`46 z*<1RgTuP?5%y)Cnhb1^h6VF0~1j7g{(cuoD=pExqg*OwGI7^s7BtL9f*Kb^lZO$h%ln`&G zCJB}qZkDy)*vJiVOuU9sQ#1|jjpW=C(#ku;)I{kmy&2~cEYtmHAT0+dQzEOSh#Cl? z<+f#OmnA-uA=zS|f3{@IWar{whIF!+Njd)Px2*>5_@wD66BRF7AgnHAhTv?aF7SE5 zkk5*G^svcwfzYt2j{O2(hxdbrc%TBP04jhApaQ6XR|-H;-0Z(;6R^=WuvDQ~4asa! zsz0#N+q|jDA5{Wx=Dobdf zmmX^$WiE8im-`t*yxXHw;#cP=M$NJ`)WJzMHb^hG-Fs@))hQdL+Ryht@~5>8dAuiA YJiI&l)GaM<9(G>G@JTg1#EUlf|0@2$bpQYW literal 0 HcmV?d00001 diff --git a/data/grid_search_results_v2.parquet b/data/grid_search_results_v2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b405dba8a0142689651d1eef88fe9ec98b0ddad2 GIT binary patch literal 30588 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 o~|6aKYNKgE`(2eqrHA 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 128; sampling combos +progress valid=25 best_ann=0.2903 +progress valid=50 best_ann=0.2903 +progress valid=75 best_ann=0.2903 + ann_return ann_vol max_drawdown sharpe trades_per_year sma_fast sma_slow lazy_days min_hold_days replace_score_gap min_score macro_min_breadth macro_down_frac desired_positions_min atr_mult stop_loss_atr profit_tighten_atr atr_mult_profit bias_exit vol_ratio_exit + 0.200517 0.245594 -0.243440 0.816457 64.166667 3 30 4 2 1.6 0.2 0.15 0.75 2 3.2 3.2 6.0 1.5 0.25 3.0 + 0.197072 0.237816 -0.254923 0.828676 70.833333 5 20 4 3 1.6 0.2 0.15 0.85 2 4.0 2.0 8.0 2.0 0.18 4.0 + 0.195256 0.222875 -0.249820 0.876078 67.833333 5 30 4 5 0.8 0.4 0.10 0.85 2 3.2 3.2 6.0 2.0 0.12 3.0 + 0.190109 0.240966 -0.224561 0.788943 64.333333 5 30 4 5 0.5 0.2 0.20 0.80 1 3.2 2.0 6.0 2.5 0.18 3.0 + 0.187824 0.248815 -0.209421 0.754876 50.666667 5 30 6 2 0.5 0.2 0.15 0.75 1 4.0 3.2 8.0 2.5 0.25 4.0 + 0.185986 0.245787 -0.248610 0.756697 60.000000 3 30 4 3 0.5 0.2 0.10 0.75 1 2.5 3.2 4.0 2.5 0.25 3.0 + 0.178070 0.236205 -0.249916 0.753881 78.500000 5 30 8 2 1.2 0.0 0.20 0.75 2 3.2 2.5 8.0 2.5 0.12 4.0 + 0.170204 0.240899 -0.220588 0.706536 59.000000 3 30 6 2 0.5 0.2 0.15 0.80 2 4.0 3.2 8.0 2.5 0.18 4.0 + 0.161948 0.218909 -0.279160 0.739797 73.666667 5 15 8 3 0.5 0.2 0.10 0.80 1 3.2 2.5 8.0 1.5 0.12 3.0 + 0.158855 0.268620 -0.341986 0.591376 71.166667 3 30 6 5 0.5 0.0 0.10 0.85 2 4.0 3.2 6.0 2.5 0.25 4.0 + 0.157707 0.243436 -0.255179 0.647837 65.333333 5 20 4 5 1.2 0.2 0.10 0.80 1 3.2 2.5 4.0 2.5 0.25 3.0 + 0.156077 0.238188 -0.224309 0.655271 51.000000 5 30 5 3 0.5 0.4 0.15 0.80 2 3.2 2.0 4.0 1.5 0.18 3.0 diff --git a/data/opt_state.json b/data/opt_state.json new file mode 100644 index 0000000..1b147b9 --- /dev/null +++ b/data/opt_state.json @@ -0,0 +1,678 @@ +{ + "best": { + "ann_return": 0.29919773587636556, + "ann_vol": 0.2580085666560993, + "max_drawdown": -0.19941147939677484, + "sharpe": 1.1596426419250159, + "trades_per_year": 71.16666666666667, + "max_positions": 3, + "desired_positions_min": 1, + "desired_positions_max": 3, + "rebalance_every": 1, + "replace_score_gap": 0.5, + "max_replaces_per_day": 1, + "sma_fast": 3, + "sma_slow": 30, + "atr_window": 14, + "atr_mult": 2.8, + "profit_tighten_atr": 4.0, + "atr_mult_profit": 1.5, + "stop_loss_atr": 3.6, + "macro_min_breadth": 0.15, + "macro_down_frac": 0.85, + "macro_scale_risk_off": 0.0, + "bias_window": 20, + "bias_exit": 0.25, + "vol_short": 5, + "vol_long": 20, + "vol_ratio_exit": 3.0, + "min_score": 0.0, + "score_vol_denom_floor": 0.02, + "trend_strength_weight": 0.6, + "w_r5": 0.25, + "w_r20": 0.45, + "w_r60": 0.2, + "w_r120": 0.1, + "min_history_days": 120, + "cooldown_days": 5, + "min_hold_days": 3, + "lazy_days": 8, + "rebalance_band": 0.06, + "vol_window": 20, + "max_weight_per_asset": 0.9, + "concentration_power": 2.2, + "port_vol_window": 60, + "target_ann_vol": 0.25, + "new_asset_days": 30, + "new_asset_max_w": 0.2, + "trial": 12, + "seed": 1772857400 + }, + "last_reported_ann_return": 0.26174076561443793, + "history": [ + { + "start": "20200101", + "end": "20251231", + "trials": 60, + "best_ann_return": 0.11864826513365356 + }, + { + "start": "20220101", + "end": "20251231", + "trials": 10, + "best_ann_return": 0.11864826513365356 + }, + { + "start": "20220101", + "end": "20251231", + "trials": 20, + "best_ann_return": 0.14307179229636358 + }, + { + "start": "20220101", + "end": "20251231", + "trials": 120, + "best_ann_return": 0.14307179229636358 + }, + { + "start": "20220101", + "end": "20251231", + "trials": 120, + "best_ann_return": 0.14307179229636358 + }, + { + "start": "20220101", + "end": "20251231", + "trials": 40, + "best_ann_return": 0.14307179229636358 + }, + { + "start": "20200101", + "end": "20251231", + "trials": 40, + "best_ann_return": 0.14307179229636358 + }, + { + "timestamp": "2026-03-05T13:27:54.064975+00:00", + "config": "configs/etf_universe_industry_only.json", + "start": "20200101", + "end": "20251231", + "trials": 240, + "jobs": 8, + "best_ann_return": 0.26174076561443793 + }, + { + "timestamp": "2026-03-06T01:04:17.263332+00:00", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 480, + "jobs": 8, + "best_ann_return": 0.2903126188408862 + }, + { + "timestamp": "2026-03-06T02:18:52.288087+00:00", + "run_id": "20260306T020054Z_seed7", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 240, + "jobs": 8, + "best_ann_return": 0.2903126188408862, + "db": "data/experiments.sqlite" + }, + { + "timestamp": "2026-03-06T09:09:11.754945+00:00", + "run_id": "20260306T085114Z_seed20260306", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 100000, + "jobs": 8, + "best_ann_return": 0.2903126188408862, + "db": "data/experiments.sqlite" + }, + { + "timestamp": "2026-03-07T02:20:53.525889+00:00", + "run_id": "20260307T021714Z_seed1772849832", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.2903126188408862, + "db": "data/experiments.sqlite" + }, + { + "timestamp": "2026-03-07T03:15:34.452214+00:00", + "run_id": "20260307T025817Z_bestlocal_seed1772852295_stops", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.2941324263568994, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "stops" + ] + }, + { + "timestamp": "2026-03-07T03:59:43.476374+00:00", + "run_id": "20260307T034217Z_bestlocal_seed1772854935_stops", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.2941324263568994, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "stops" + ] + }, + { + "timestamp": "2026-03-07T04:19:16.669791+00:00", + "run_id": "20260307T040158Z_bestlocal_seed1772856116_churn", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.2941324263568994, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "churn" + ] + }, + { + "timestamp": "2026-03-07T04:40:34.441399+00:00", + "run_id": "20260307T042322Z_bestlocal_seed1772857400_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-07T05:20:53.615457+00:00", + "run_id": "20260307T050352Z_bestlocal_seed1772859830_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-07T07:49:16.151072+00:00", + "run_id": "20260307T073200Z_bestlocal_seed1772868718_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-07T08:53:25.642488+00:00", + "run_id": "20260307T083612Z_bestlocal_seed1772872570_stops", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "stops" + ] + }, + { + "timestamp": "2026-03-07T09:13:42.148802+00:00", + "run_id": "20260307T085632Z_bestlocal_seed1772873790_stops", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "stops" + ] + }, + { + "timestamp": "2026-03-07T09:35:15.356660+00:00", + "run_id": "20260307T091729Z_bestlocal_seed1772875047_score", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "score" + ] + }, + { + "timestamp": "2026-03-07T09:59:47.627321+00:00", + "run_id": "20260307T094156Z_bestlocal_seed1772876514_score", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "score" + ] + }, + { + "timestamp": "2026-03-07T10:25:19.359544+00:00", + "run_id": "20260307T100722Z_bestlocal_seed1772878040_switches", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "switches" + ] + }, + { + "timestamp": "2026-03-07T10:58:27.176353+00:00", + "run_id": "20260307T104037Z_bestlocal_seed1772880035_positions", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "positions" + ] + }, + { + "timestamp": "2026-03-07T13:25:50.785672+00:00", + "run_id": "20260307T130802Z_bestlocal_seed1772888881_stops", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "stops" + ] + }, + { + "timestamp": "2026-03-08T00:23:31.144317+00:00", + "run_id": "20260308T000519Z_bestlocal_seed1772928317_exits", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "exits" + ] + }, + { + "timestamp": "2026-03-08T00:38:33.229561+00:00", + "run_id": "20260308T003740Z_bestlocal_seed1772930258_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 1, + "jobs": 1, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-08T01:01:47.797863+00:00", + "run_id": "20260308T004337Z_bestlocal_seed1772930615_exits", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "exits" + ] + }, + { + "timestamp": "2026-03-08T01:19:15.300848+00:00", + "run_id": "20260308T011822Z_bestlocal_seed1772932700_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 1, + "jobs": 1, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-08T01:37:54.016182+00:00", + "run_id": "20260308T011935Z_bestlocal_seed1772932773_exits", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "exits" + ] + }, + { + "timestamp": "2026-03-08T02:58:41.399930+00:00", + "run_id": "20260308T024027Z_bestlocal_seed1772937625_exits", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "exits" + ] + }, + { + "timestamp": "2026-03-08T10:23:23.738860+00:00", + "run_id": "20260308T100515Z_bestlocal_seed1772964314_switches", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "switches" + ] + }, + { + "timestamp": "2026-03-08T11:18:06.874222+00:00", + "run_id": "20260308T110022Z_bestlocal_seed1772967620_switches2", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "switches2" + ] + }, + { + "timestamp": "2026-03-08T12:22:32.264081+00:00", + "run_id": "20260308T120437Z_bestlocal_seed1772971475_signal1", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "signal1" + ] + }, + { + "timestamp": "2026-03-08T13:10:31.892686+00:00", + "run_id": "20260308T125232Z_bestlocal_seed1772974350_orth_ma", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "orth_ma" + ] + }, + { + "timestamp": "2026-03-08T13:30:15.331445+00:00", + "run_id": "20260308T131211Z_bestlocal_seed1772975529_orth_weights", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "orth_weights" + ] + }, + { + "timestamp": "2026-03-08T13:51:18.164438+00:00", + "run_id": "20260308T133320Z_bestlocal_seed1772976798_orth_mech", + "code_version": "nogit", + "config": "/home/openclaw/projects/quant-factor-research/configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "/home/openclaw/projects/quant-factor-research/data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "orth_mech" + ] + }, + { + "timestamp": "2026-03-08T14:19:04.111061+00:00", + "run_id": "20260308T140111Z_bestlocal_seed1772978469_asym_fast", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "asym_fast" + ] + }, + { + "timestamp": "2026-03-09T01:44:48.718246+00:00", + "run_id": "20260309T012652Z_bestlocal_seed1773019610_asym_fast", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "asym_fast" + ] + }, + { + "timestamp": "2026-03-09T02:04:28.023489+00:00", + "run_id": "20260309T014623Z_bestlocal_seed1773020781_asym_fast", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "asym_fast" + ] + }, + { + "timestamp": "2026-03-09T05:59:47.135954+00:00", + "run_id": "20260309T054128Z_bestlocal_seed1773034886_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-09T06:51:14.103824+00:00", + "run_id": "20260309T063300Z_bestlocal_seed3511452665_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-09T07:41:55.288441+00:00", + "run_id": "20260309T072400Z_bestlocal_seed3514512955_macro", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "macro" + ] + }, + { + "timestamp": "2026-03-09T08:11:58.360040+00:00", + "run_id": "20260309T075340Z_bestlocal_seed3516292556_exits", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "exits" + ] + }, + { + "timestamp": "2026-03-09T08:33:46.207270+00:00", + "run_id": "20260309T081519Z_bestlocal_seed3517591585_exits", + "code_version": "nogit", + "config": "configs/etf_universe_industry_profiled.json", + "start": "20200101", + "end": "20251231", + "trials": 20, + "jobs": 6, + "best_ann_return": 0.29919773587636556, + "db": "data/experiments.sqlite", + "base_from": "opt_state.best", + "tweaks": [ + "exits" + ] + } + ] +} diff --git a/data/tune_results_2020_2025.parquet b/data/tune_results_2020_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3450d6aaf04b6ad109b90314827cc275d7df4b15 GIT binary patch literal 7742 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 literal 0 HcmV?d00001 diff --git a/data/tune_results_fast_2020_2025.parquet b/data/tune_results_fast_2020_2025.parquet new file mode 100644 index 0000000000000000000000000000000000000000..578a261613f785ae87471f4ea155ca097ed8dd55 GIT binary patch literal 9818 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 TizZ;$TYj*4WDE;M|5f%sdM5DB literal 0 HcmV?d00001 diff --git a/data/universe_profile_extended.parquet b/data/universe_profile_extended.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ad816248bc944bb41a36a47999a83ab263092c42 GIT binary patch literal 9125 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 RYKQ+tjNyMmSilo7{s$pF9B=>t literal 0 HcmV?d00001 diff --git a/docs/ETF_TREND_SYSTEM.md b/docs/ETF_TREND_SYSTEM.md new file mode 100644 index 0000000..9b96f79 --- /dev/null +++ b/docs/ETF_TREND_SYSTEM.md @@ -0,0 +1,63 @@ +# ETF Trend System (K<=4, no leverage) - v2 + +This is a daily-signal / daily-rebalance trend-following system on a configurable ETF universe. + +It is designed for: + +- K<=4 holdings +- no leverage (net exposure <= 100%) +- portfolio vol cap (de-risk only), remainder parked in a rates ETF +- practical execution hygiene (cooldown / new listing protection / turnover band) + +## Signals + +- Trend filter (entry universe): MA(fast) > MA(slow) + - default: MA5 > MA20 +- Ranking score (higher is better): + + `score = (0.5*R20 + 0.3*R60 + 0.2*R120) / max(vol20, floor) + 0.5*trend_strength` + + where `trend_strength = ma_fast/ma_slow - 1`. + +## Entry + +On each rebalance day (daily): + +- Candidate must satisfy: + - `trend_ok == True` (MA cross) + - `score >= min_score` + - `min_history_days` protection (skip too-new series) + - `cooldown_days` protection (after exit, avoid immediate re-entry) + +## Position Sizing + +- Risk parity on `vol20` across selected holdings. +- Per-asset cap: `max_weight_per_asset` (default 0.50) +- Portfolio vol cap (no leverage): + + `scale = min(1, target_ann_vol / port_vol(port_vol_window))` + + Remaining weight (1 - sum(weights)) is parked in `rates_fallback`. + +## Exits (checked daily) + +A position exits if any triggers: + +- Trend break: MA(fast) < MA(slow) +- Chandelier stop: close < highest_close - atr_mult*ATR +- Stop loss from entry: close < entry_price - stop_loss_atr*ATR +- Take profit from entry: close > entry_price + take_profit_atr*ATR + +## Trading Hygiene + +- `rebalance_band`: ignore small weight changes to reduce churn. +- `min_hold_days`: do not rebalance-sell a very fresh position (risk exits still apply). +- `new_asset_days/new_asset_max_w`: cap weight of a newly-eligible asset for its first N tradable days after it passes the history gate. + +## Outputs + +Backtest runner writes 3 artifacts: + +- equity curve parquet: `data/etf_trend_equity_*.parquet` +- weights parquet: `data/etf_trend_equity_*_weights.parquet` +- trades parquet: `data/etf_trend_equity_*_trades.parquet` diff --git a/docs/FACTOR_PIPELINE.md b/docs/FACTOR_PIPELINE.md new file mode 100644 index 0000000..a469d92 --- /dev/null +++ b/docs/FACTOR_PIPELINE.md @@ -0,0 +1,18 @@ +# Factor Pipeline (Draft) + +1) Load universe + prices + fundamentals +2) Compute raw factor values +3) Clean: + - missing handling + - winsorize (per-date cross section) + - z-score (per-date cross section) +4) Neutralize (optional): + - industry + - size +5) Evaluate: + - IC / Rank IC + - decay + - turnover +6) Backtest: + - long-short / top-k + - transaction costs diff --git a/docs/TUSHARE.md b/docs/TUSHARE.md new file mode 100644 index 0000000..d755677 --- /dev/null +++ b/docs/TUSHARE.md @@ -0,0 +1,28 @@ +# Tushare Integration + +## Setup + +1) Add token + +- Create `/home/openclaw/projects/quant-factor-research/.env`: + + - `TUSHARE_TOKEN=...` + - `TUSHARE_TIMEOUT=30` + +Template: `configs/tushare.env.example` + +2) Install dependency into conda env + +- `conda activate qfr` +- Prefer conda-forge where possible; but `tushare` is usually pip: + - `pip install tushare` + +## Download daily bars + +Example: + +- `python scripts/tushare_download_daily.py --ts-code 000001.SZ --start 20250101 --end 20250131 --out data/raw/000001SZ_202501.parquet` + +Notes: + +- Tushare API has rate limits based on your account积分. Cache results locally. diff --git a/docs/dev-flow-checklist.md b/docs/dev-flow-checklist.md new file mode 100644 index 0000000..674cf8d --- /dev/null +++ b/docs/dev-flow-checklist.md @@ -0,0 +1,69 @@ +# QFR 策略开发最小闭环(Checklist) + +目标:让每次改动都能被复现、复算、对比、落库,避免只看日志导致的错觉与过拟合。 + +## 0) 约定 + +- 唯一入口:所有优化结果必须可用 scripts/run_etf_trend_backtest.py 复算。 +- 固定数据窗:同一次实验必须固定 start/end 与 configs 下的 universe json。 +- 落库优先:优化与复算都要写入 data/experiments.sqlite(或输出可追溯 artifacts)。 + +## 1) 提出假设(写清楚再改) + +- 本次改动想提升什么?(ann_return / max_drawdown / ann_vol / sharpe / trades_per_year) +- 风险约束是什么?(例如:max_trades_per_year <= 80,回撤不恶化超过阈值) +- 预期影响:趋势/均值回归/风险控制/换仓逻辑/过滤条件 哪一块在起作用? + +## 2) 实现改动 + 基线自检 + +- 运行一次基线回测(固定 config + 时间窗): + - python scripts/run_etf_trend_backtest.py --config --start --end +- 确认输出 artifacts: + - data/etf_trend_equity.parquet + - data/etf_trend_equity_weights.parquet + - data/etf_trend_equity_trades.parquet(如有) + +## 3) 搜索/优化(iterate_optimize) + +- 固定参数:seed、start/end、config、rawdir +- 记录 run_id(建议用时间戳) +- 让优化写库:data/experiments.sqlite + +## 4) Top-N 复算(必须做) + +目的:避免优化器算出来的 top config 因入口不同/代码变更/数据差异而不可复现。 + +- 复算命令: + - python scripts/verify_topn.py --db data/experiments.sqlite --topn 10 --config --rawdir data/raw + +输出: +- 每个 trial 的原始指标 vs 复算指标差异 +- 标记不一致(超过容忍阈值)的 trial + +## 5) 更新 best 与汇报规则 + +- 只有在满足: + - ann_return 相比 last_reported_ann_return 提升 >= 5pp + - 且 Top-N 复算一致 + - 且风险约束不恶化 + +才更新 data/opt_state.json 的 last_reported_ann_return 并对外汇报。 + +## 6) 借鉴四大流派(落成 模块 + 指标) + +- 趋势:多周期一致性、风险调整动量 +- 均值回归:偏离/回归信号(用于降低回撤/提高夏普) +- 风险/宏观:PCA/absorption ratio/相关性升高时降风险 +- 相对价值/结构:强弱腿替换、组内中性、主题子宇宙 + +要求:每个模块都要 +- 可开关(参数化) +- 可记录原因(trades/日志中写入 reason 字段) +- 可对比(A/B vs baseline) + +## 7) 迭代准则(用户确认) + +- 当已有一个还可以的策略(例如年化 25%+)后: + - 必须以该基础策略为主框架逐步叠加技巧与改进 + - 不要换一套完全不同的思路/框架 + - 每次微调的因子不超过 4 个(单次改动可归因、可回滚、可复现) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8faa1c5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,15 @@ +[build-system] +requires = ["setuptools>=68", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "qfr" +version = "0.1.0" +description = "Quant factor research toolkit" +requires-python = ">=3.11" + +[tool.ruff] +line-length = 100 + +[tool.pytest.ini_options] +pythonpath = ["src"] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..286ef86 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,25 @@ +# Core +numpy +pandas +scipy +statsmodels +scikit-learn + +# Data / IO +pyarrow +pydantic +python-dotenv + +# Viz +matplotlib +seaborn + +# Notebooks +jupyter + +# Dev +pytest +ruff + +# Data sources +tushare diff --git a/scripts/analyze_drawdown.py b/scripts/analyze_drawdown.py new file mode 100644 index 0000000..243bc79 --- /dev/null +++ b/scripts/analyze_drawdown.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +import argparse +from pathlib import Path + +import pandas as pd + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--equity", required=True) + ap.add_argument("--trades", required=True) + ap.add_argument("--top", type=int, default=3) + args = ap.parse_args() + + eq = pd.read_parquet(args.equity) + eq = eq.copy() + eq.index = eq.index.astype(str) + s = eq["equity"].astype(float) + + peak = s.cummax() + dd = s / peak - 1.0 + + # find worst drawdowns by trough + worst = dd.nsmallest(args.top) + + tr = pd.read_parquet(args.trades) + tr = tr.copy() + tr["trade_date"] = tr["trade_date"].astype(str) + + for d, v in worst.items(): + # drawdown start = last peak before d + peak_date = (s.loc[:d]).idxmax() + print("---") + print("trough", d, "dd", float(v)) + print("peak", peak_date, "peak_equity", float(s.loc[peak_date]), "trough_equity", float(s.loc[d])) + w = tr[(tr["trade_date"] >= peak_date) & (tr["trade_date"] <= d)] + print("trades in window", len(w)) + if not w.empty: + cols = [c for c in ["trade_date", "ts_code", "side", "reason", "weight_before", "weight_after", "price"] if c in w.columns] + print(w[cols].tail(25).to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/auto_tune_etf_trend.py b/scripts/auto_tune_etf_trend.py new file mode 100644 index 0000000..3dc62b4 --- /dev/null +++ b/scripts/auto_tune_etf_trend.py @@ -0,0 +1,164 @@ +from __future__ import annotations + +import argparse +import itertools +import json +from dataclasses import replace +from pathlib import Path + +import numpy as np +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 4)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy", "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + + return universe, constraints, risk_proxy, rates_fallback + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / f"{a.ts_code.replace('.', '')}.parquet" + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252 ** 0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + calmar = float(ann_ret / abs(dd)) if dd < 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "calmar": calmar} + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("--config", default="configs/etf_universe.json") + p.add_argument("--rawdir", default="data/raw") + p.add_argument("--start", default="20200101") + p.add_argument("--end", default="20251231") + p.add_argument("--out", default="data/tune_results.parquet") + args = p.parse_args() + + config_path = Path(args.config) + raw_dir = Path(args.rawdir) + + universe, constraints, risk_proxy, rates_fallback = load_universe(config_path) + prices = load_prices(raw_dir, universe, args.start, args.end) + + base = TrendParams() + + # small grid to keep runtime reasonable + fast_list = [5, 10] + slow_list = [20, 40] + atr_mult_list = [2.5, 3.0] + vol_window_list = [10, 20] + port_vol_window_list = [40, 60] + max_positions_list = [3, 4] + + rows = [] + + for sma_fast, sma_slow, atr_mult, vol_window, port_vol_window, max_positions in itertools.product( + fast_list, + slow_list, + atr_mult_list, + vol_window_list, + port_vol_window_list, + max_positions_list, + ): + if sma_fast >= sma_slow: + continue + + params = replace( + base, + sma_fast=sma_fast, + sma_slow=sma_slow, + atr_mult=atr_mult, + vol_window=vol_window, + port_vol_window=port_vol_window, + max_positions=max_positions, + rebalance_every=1, + ) + + cons = replace(constraints, max_positions=max_positions) + + equity, _weights = run_backtest( + prices, + universe, + cons, + params, + rates_fallback=rates_fallback, + risk_proxy=risk_proxy, + ) + + st = perf_stats(equity["equity"]) + if not st: + continue + + row = { + "sma_fast": sma_fast, + "sma_slow": sma_slow, + "atr_mult": atr_mult, + "vol_window": vol_window, + "port_vol_window": port_vol_window, + "max_positions": max_positions, + **st, + } + rows.append(row) + + df = pd.DataFrame(rows) + if df.empty: + print("no results") + return + + # filter by vol constraint first, then sort by ann_return + filt = df[df["ann_vol"] <= 0.18].copy() + if filt.empty: + filt = df.copy() + + filt = filt.sort_values(["ann_return", "calmar"], ascending=False) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + filt.to_parquet(out, index=False) + + print("top10") + cols = [ + "ann_return", + "ann_vol", + "max_drawdown", + "calmar", + "sma_fast", + "sma_slow", + "atr_mult", + "vol_window", + "port_vol_window", + "max_positions", + ] + print(filt[cols].head(10).to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/auto_tune_etf_trend_fast.py b/scripts/auto_tune_etf_trend_fast.py new file mode 100644 index 0000000..b3d4bc4 --- /dev/null +++ b/scripts/auto_tune_etf_trend_fast.py @@ -0,0 +1,229 @@ +from __future__ import annotations + +import argparse +import itertools +import json +from dataclasses import replace +from pathlib import Path + +import numpy as np +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, compute_features, portfolio_vol, risk_parity_weights, select_portfolio + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 4)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy", "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + return universe, constraints, risk_proxy, rates_fallback + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / f"{a.ts_code.replace('.', '')}.parquet" + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252 ** 0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + calmar = float(ann_ret / abs(dd)) if dd < 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "calmar": calmar} + + +def run_backtest_cached( + feats: dict[str, pd.DataFrame], + universe: list[UniverseAsset], + constraints: Constraints, + params: TrendParams, + rates_fallback: str, + risk_proxy: str, +) -> pd.DataFrame: + # align dates intersection + dates = None + for f in feats.values(): + d = set(f["trade_date"].astype(str)) + dates = d if dates is None else dates.intersection(d) + if not dates: + raise RuntimeError("No overlapping trade_date") + all_dates = sorted(dates) + + close_px = pd.DataFrame(index=all_dates) + ret1 = pd.DataFrame(index=all_dates) + for ts, f in feats.items(): + g = f.set_index("trade_date").reindex(all_dates) + close_px[ts] = g["close"].astype(float) + ret1[ts] = close_px[ts].pct_change().fillna(0.0) + + if risk_proxy not in close_px.columns: + raise RuntimeError("risk_proxy missing") + + weights = pd.DataFrame(0.0, index=all_dates, columns=close_px.columns) + + in_pos: set[str] = set() + highest_close: dict[str, float] = {} + + atr_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["atr"].astype(float) for ts in close_px.columns} + mf_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["ma_fast"].astype(float) for ts in close_px.columns} + ms_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["ma_slow"].astype(float) for ts in close_px.columns} + + last_reb = -10**9 + + for i, d in enumerate(all_dates): + if i > 0: + weights.loc[d] = weights.iloc[i - 1] + + for ts in list(in_pos): + c = float(close_px.loc[d, ts]) + if np.isfinite(c): + highest_close[ts] = max(highest_close.get(ts, c), c) + + # exits + for ts in list(in_pos): + c = float(close_px.loc[d, ts]) + mf = float(mf_map[ts].loc[d]) + ms = float(ms_map[ts].loc[d]) + atr = float(atr_map[ts].loc[d]) + h = highest_close.get(ts, c) + trend_break = (np.isfinite(mf) and np.isfinite(ms) and (mf < ms)) + chand_break = np.isfinite(atr) and c < (h - params.atr_mult * atr) + if trend_break or chand_break: + weights.loc[d, ts] = 0.0 + in_pos.remove(ts) + highest_close.pop(ts, None) + + if (i - last_reb) >= params.rebalance_every: + rows = [] + for ts in close_px.columns: + f = feats[ts].set_index("trade_date").reindex([d]).iloc[0] + rows.append((ts, bool(f["trend_ok"]) if pd.notna(f["trend_ok"]) else False, + float(f["score_raw"]) if pd.notna(f["score_raw"]) else float("nan"), + float(f["vol"]) if pd.notna(f["vol"]) else float("nan"))) + snap = pd.DataFrame(rows, columns=["ts_code", "trend_ok", "score_raw", "vol"]).set_index("ts_code") + + picks = select_portfolio(snap, universe, constraints) + vol = snap.loc[picks, "vol"].copy() + w = risk_parity_weights(vol, max_w=0.50) + + trailing = ret1[picks].iloc[max(0, i - params.port_vol_window + 1) : i + 1] + pvol = portfolio_vol(trailing, w) + scale = 1.0 + if np.isfinite(pvol) and pvol > 0: + scale = min(1.0, params.target_ann_vol / pvol) + + w_exec = w * scale + weights.loc[d] = 0.0 + for ts, wi in w_exec.items(): + weights.loc[d, ts] = float(wi) + + rem = 1.0 - float(w_exec.sum()) + if rem > 1e-12 and rates_fallback in weights.columns: + weights.loc[d, rates_fallback] += rem + + in_pos = {ts for ts in close_px.columns if weights.loc[d, ts] > 1e-12} + for ts in in_pos: + c = float(close_px.loc[d, ts]) + highest_close[ts] = max(highest_close.get(ts, c), c) + + last_reb = i + + w_lag = weights.shift(1).fillna(0.0) + port_ret = (ret1 * w_lag).sum(axis=1) + equity = (1.0 + port_ret).cumprod().to_frame("equity") + return equity + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + ap.add_argument("--out", default="data/tune_results_fast.parquet") + args = ap.parse_args() + + universe, constraints, risk_proxy, rates_fallback = load_universe(Path(args.config)) + prices = load_prices(Path(args.rawdir), universe, args.start, args.end) + + base = TrendParams(rebalance_every=1) + + # grid (keep small) + fast_list = [3, 5, 8] + slow_list = [15, 20, 30] + atr_mult_list = [2.0, 2.5, 3.0] + vol_window_list = [10, 20] + port_vol_window_list = [40, 60] + max_positions_list = [3, 4] + + rows = [] + + for sma_fast, sma_slow in itertools.product(fast_list, slow_list): + if sma_fast >= sma_slow: + continue + for atr_mult, vol_window, port_vol_window, max_positions in itertools.product( + atr_mult_list, vol_window_list, port_vol_window_list, max_positions_list + ): + params = replace( + base, + max_positions=max_positions, + sma_fast=sma_fast, + sma_slow=sma_slow, + atr_mult=atr_mult, + vol_window=vol_window, + port_vol_window=port_vol_window, + ) + cons = replace(constraints, max_positions=max_positions) + + feats = {ts: compute_features(df, params) for ts, df in prices.items()} + equity = run_backtest_cached(feats, universe, cons, params, rates_fallback, risk_proxy) + st = perf_stats(equity["equity"]) + if not st: + continue + rows.append({ + "sma_fast": sma_fast, + "sma_slow": sma_slow, + "atr_mult": atr_mult, + "vol_window": vol_window, + "port_vol_window": port_vol_window, + "max_positions": max_positions, + **st, + }) + + df = pd.DataFrame(rows) + if df.empty: + print("no results") + return + + filt = df[df["ann_vol"] <= 0.18].sort_values(["ann_return", "calmar"], ascending=False) + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + filt.to_parquet(out, index=False) + + cols = ["ann_return", "ann_vol", "max_drawdown", "calmar", "sma_fast", "sma_slow", "atr_mult", "vol_window", "port_vol_window", "max_positions"] + print("top10") + print(filt[cols].head(10).to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/auto_tune_etf_trend_small.py b/scripts/auto_tune_etf_trend_small.py new file mode 100644 index 0000000..611aad6 --- /dev/null +++ b/scripts/auto_tune_etf_trend_small.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +import argparse +import json +from dataclasses import replace +from pathlib import Path + +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_universe(config_path: Path): + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 4)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + return universe, constraints, cons.get("risk_proxy", "510300.SH"), cons.get("rates_fallback", "511010.SH") + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str): + out = {} + for a in universe: + fn = raw_dir / f"{a.ts_code.replace('.', '')}.parquet" + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series): + r = equity.pct_change().dropna() + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252 ** 0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + return ann_ret, ann_vol, dd + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + args = ap.parse_args() + + universe, constraints, risk_proxy, rates_fallback = load_universe(Path(args.config)) + prices = load_prices(Path(args.rawdir), universe, args.start, args.end) + + base = TrendParams(rebalance_every=1, max_positions=4) + + # A very small candidate set (fast to run) + candidates = [ + (5, 20, 3.0), + (5, 20, 2.5), + (3, 15, 2.5), + (8, 30, 3.0), + (10, 40, 3.0), + (5, 30, 3.0), + ] + + rows = [] + for sma_fast, sma_slow, atr_mult in candidates: + params = replace(base, sma_fast=sma_fast, sma_slow=sma_slow, atr_mult=atr_mult) + equity, _w = run_backtest( + prices, + universe, + constraints, + params, + rates_fallback=rates_fallback, + risk_proxy=risk_proxy, + ) + ann_ret, ann_vol, dd = perf_stats(equity["equity"]) + rows.append({ + "ann_return": ann_ret, + "ann_vol": ann_vol, + "max_drawdown": dd, + "sma_fast": sma_fast, + "sma_slow": sma_slow, + "atr_mult": atr_mult, + }) + + df = pd.DataFrame(rows).sort_values(["ann_return"], ascending=False) + print(df.to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/expand_etf_universe.py b/scripts/expand_etf_universe.py new file mode 100644 index 0000000..624bafc --- /dev/null +++ b/scripts/expand_etf_universe.py @@ -0,0 +1,148 @@ +from __future__ import annotations + +import argparse +import json +import math +from collections import defaultdict +from datetime import date, timedelta +from pathlib import Path + +import pandas as pd + +from qfr.data.tushare_client import load_tushare_config, pro_api + + +def median_amount(cfg, ts_code: str, start: str, end: str) -> float: + api = pro_api(cfg) + df = api.fund_daily(ts_code=ts_code, start_date=start, end_date=end, fields="trade_date,amount") + if df is None or df.empty or "amount" not in df.columns: + return 0.0 + amt = pd.to_numeric(df["amount"], errors="coerce").dropna() + if amt.empty: + return 0.0 + return float(amt.median()) + + +def classify_by_keyword(kw: str) -> str: + # very rough tagging for universe constraints / reporting + equity_kws = { + "半导体", + "芯片", + "通信", + "5G", + "通信设备", + "军工", + "机器人", + "工业母机", + "智能制造", + "消费电子", + "AI", + "算力", + "软件", + "创新药", + "医药", + "新能源", + "光伏", + "锂电", + "电池", + "新材料", + "稀土", + } + commodity_kws = {"黄金", "白银", "有色", "稀土", "矿业", "原油", "油", "煤", "化工", "豆粕", "农业"} + rates_kws = {"国债", "政金债", "债", "短债", "中债"} + + if kw in rates_kws: + return "rates_cn" + if kw in commodity_kws: + return "commodity_cn" + if kw in equity_kws: + return "equity_cn_sector" + return "equity_cn_sector" + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe.json") + ap.add_argument("--out", default=None) + ap.add_argument("--per_keyword", type=int, default=2) + ap.add_argument("--min_median_amount", type=float, default=0.0) + ap.add_argument( + "--keywords", + default=( + "半导体,芯片,通信,5G,通信设备,军工,机器人,工业母机,智能制造,消费电子,AI,算力,软件,创新药,医药,新能源,光伏,锂电,电池," + "矿业,有色,稀土,新材料,黄金,白银,原油,煤,化工,豆粕,农业,国债,政金债" + ), + ) + args = ap.parse_args() + + cfg = load_tushare_config() + api = pro_api(cfg) + + conf_path = Path(args.config) + conf = json.loads(conf_path.read_text(encoding="utf-8")) + + assets = conf.get("assets", []) + have = {a["ts_code"] for a in assets} + + kw_list = [k.strip() for k in str(args.keywords).split(",") if k.strip()] + + fb = api.fund_basic(market="E", status="L", fields="ts_code,name") + if fb is None or fb.empty: + raise RuntimeError("fund_basic returned empty") + + fb = fb.dropna(subset=["ts_code", "name"]).copy() + + end = date.today().strftime("%Y%m%d") + start = (date.today() - timedelta(days=180)).strftime("%Y%m%d") + + buckets: dict[str, list[tuple[str, str]]] = defaultdict(list) + for _, r in fb.iterrows(): + ts_code = str(r["ts_code"]).strip() + name = str(r["name"]).strip() + for kw in kw_list: + if kw in name: + buckets[kw].append((ts_code, name)) + break + + chosen: list[tuple[str, str, str, float, str]] = [] + + for kw in kw_list: + cands = buckets.get(kw, []) + if not cands: + continue + + scored: list[tuple[float, str, str]] = [] + for ts_code, name in cands: + if ts_code in have: + continue + try: + m = median_amount(cfg, ts_code, start, end) + except Exception: + m = 0.0 + if not math.isfinite(m) or m <= 0: + continue + if m < float(args.min_median_amount): + continue + scored.append((m, ts_code, name)) + + scored.sort(reverse=True) + for m, ts_code, name in scored[: int(args.per_keyword)]: + cls = classify_by_keyword(kw) + chosen.append((kw, ts_code, name, m, cls)) + + for kw, ts_code, name, m, cls in chosen: + assets.append({"ts_code": ts_code, "asset_class": cls, "name": name}) + have.add(ts_code) + + conf["assets"] = assets + + out_path = Path(args.out) if args.out else conf_path + out_path.write_text(json.dumps(conf, ensure_ascii=True, indent=2) + "\n", encoding="utf-8") + + print(f"added {len(chosen)} ETFs") + for kw, ts_code, name, m, cls in chosen[:80]: + print(f"{kw}\t{ts_code}\t{m:.0f}\t{cls}\t{name}") + + +if __name__ == "__main__": + main() diff --git a/scripts/filter_universe_by_profile.py b/scripts/filter_universe_by_profile.py new file mode 100644 index 0000000..b32ca5c --- /dev/null +++ b/scripts/filter_universe_by_profile.py @@ -0,0 +1,128 @@ +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +import numpy as np +import pandas as pd + + +def load_prices(raw_dir: Path, ts_code: str) -> pd.DataFrame: + fn = raw_dir / f"{ts_code.replace('.', '')}.parquet" + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df.sort_values("trade_date").reset_index(drop=True) + return df + + +def ann_vol(ret1: pd.Series) -> float: + r = ret1.dropna() + if len(r) < 50: + return float("nan") + return float(r.std(ddof=1) * np.sqrt(252.0)) + + +def max_drawdown(close: pd.Series) -> float: + c = close.astype(float) + if c.isna().all() or len(c) < 50: + return float("nan") + eq = c / float(c.iloc[0]) + dd = eq / eq.cummax() - 1.0 + return float(dd.min()) + + +def bias_stats(close: pd.Series, ma_n: int = 20) -> tuple[float, float]: + c = close.astype(float) + ma = c.rolling(ma_n, min_periods=ma_n).mean() + b = (c / ma - 1.0).dropna() + if len(b) < 50: + return float("nan"), float("nan") + return float(b.mean()), float(b.std(ddof=1)) + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe_industry_only.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + ap.add_argument("--window", type=int, default=504, help="profile window in trading days") + ap.add_argument("--out", default="data/universe_profile.parquet") + + # filters (keep high vol, avoid pathological drawdowns) + ap.add_argument("--min_ann_vol", type=float, default=0.18) + ap.add_argument("--max_dd_floor", type=float, default=-0.65, help="drop assets with max_dd < floor") + ap.add_argument("--min_bias_std", type=float, default=0.02) + ap.add_argument("--max_bias_std", type=float, default=0.20) + + ap.add_argument("--top", type=int, default=40, help="how many to keep after scoring") + ap.add_argument("--out_config", default="configs/etf_universe_industry_profiled.json") + args = ap.parse_args() + + conf = json.loads(Path(args.config).read_text(encoding="utf-8")) + assets = conf["assets"] + + raw = Path(args.rawdir) + + rows = [] + for a in assets: + ts = a["ts_code"] + df = load_prices(raw, ts) + df = df[(df["trade_date"] >= args.start) & (df["trade_date"] <= args.end)] + if len(df) < int(args.window) + 50: + continue + + tail = df.tail(int(args.window)) + close = tail["close"].astype(float) + ret1 = close.pct_change() + + v = ann_vol(ret1) + dd = max_drawdown(close) + bmu, bsd = bias_stats(close, 20) + + rows.append( + { + "ts_code": ts, + "name": a.get("name"), + "asset_class": a.get("asset_class"), + "ann_vol": v, + "max_dd": dd, + "bias20_mean": bmu, + "bias20_std": bsd, + } + ) + + prof = pd.DataFrame(rows) + if prof.empty: + raise SystemExit("no assets profiled") + + prof.to_parquet(args.out, index=False) + + # filter + f = prof.copy() + f = f[np.isfinite(f["ann_vol"]) & np.isfinite(f["max_dd"]) & np.isfinite(f["bias20_std"])].copy() + f = f[(f["ann_vol"] >= float(args.min_ann_vol))] + f = f[(f["max_dd"] >= float(args.max_dd_floor))] + f = f[(f["bias20_std"] >= float(args.min_bias_std)) & (f["bias20_std"] <= float(args.max_bias_std))] + + # score: prefer high vol and stable (less extreme dd). still keep high beta. + # normalize with ranks to avoid scale issues + f["r_vol"] = f["ann_vol"].rank(pct=True) + f["r_dd"] = f["max_dd"].rank(pct=True) # less negative => higher rank + f["score"] = 0.70 * f["r_vol"] + 0.30 * f["r_dd"] + + f = f.sort_values("score", ascending=False) + keep = set(f.head(int(args.top))["ts_code"].tolist()) + + new_conf = conf.copy() + new_conf["assets"] = [a for a in assets if a["ts_code"] in keep] + Path(args.out_config).write_text(json.dumps(new_conf, ensure_ascii=True, indent=2) + "\n", encoding="utf-8") + + print("profiled", len(prof), "filtered_keep", len(new_conf["assets"])) + print(f.head(15)[["ts_code", "ann_vol", "max_dd", "bias20_std", "score"]].to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/grid_search_opt.py b/scripts/grid_search_opt.py new file mode 100644 index 0000000..6bff2fd --- /dev/null +++ b/scripts/grid_search_opt.py @@ -0,0 +1,159 @@ +from __future__ import annotations + +import argparse +import itertools +import json +import random +from dataclasses import asdict, replace +from pathlib import Path + +import numpy as np +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 4)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy", "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + return universe, constraints, risk_proxy, rates_fallback + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / f"{a.ts_code.replace('.', '')}.parquet" + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252 ** 0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + sharpe = float(ann_ret / ann_vol) if ann_vol > 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "sharpe": sharpe} + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + ap.add_argument("--out", default="data/grid_search_results.parquet") + ap.add_argument("--seed", type=int, default=1) + ap.add_argument("--max_combos", type=int, default=400, help="Randomly sample at most this many combos") + args = ap.parse_args() + + universe, constraints, risk_proxy, rates_fallback = load_universe(Path(args.config)) + prices = load_prices(Path(args.rawdir), universe, args.start, args.end) + + base = TrendParams(target_ann_vol=0.25) + + # Keep grid small. We will sample max_combos from the full cartesian product. + grid = { + "sma_fast": [3, 5, 8], + "sma_slow": [15, 20, 30, 40], + "lazy_days": [2, 5], + "rebalance_band": [0.03, 0.06], + "atr_mult": [2.5, 3.2, 4.0], + "profit_tighten_atr": [3.0, 4.0], + "atr_mult_profit": [1.5, 2.0], + "stop_loss_atr": [2.5, 3.2], + "bias_exit": [0.12, 0.18], + "vol_ratio_exit": [2.0, 3.0], + "max_weight_per_asset": [0.7, 0.9], + "concentration_power": [1.6, 2.2], + } + + keys = list(grid.keys()) + combos = list(itertools.product(*(grid[k] for k in keys))) + + random.seed(int(args.seed)) + if int(args.max_combos) > 0 and len(combos) > int(args.max_combos): + combos = random.sample(combos, int(args.max_combos)) + + rows = [] + + for vals in combos: + kw = dict(zip(keys, vals)) + if int(kw["sma_fast"]) >= int(kw["sma_slow"]): + continue + + params = replace(base, **kw, rebalance_every=1, max_positions=constraints.max_positions) + + try: + equity, _w, _tr = run_backtest( + prices, + universe, + constraints, + params, + rates_fallback=rates_fallback, + risk_proxy=risk_proxy, + ) + except Exception: + continue + + st = perf_stats(equity["equity"]) + if not st: + continue + + row = {**st, **asdict(params)} + rows.append(row) + + df = pd.DataFrame(rows) + if df.empty: + print("no results") + return + + df = df[df["ann_vol"] <= 0.25].copy() + df = df.sort_values(["ann_return", "sharpe"], ascending=False) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + df.to_parquet(out, index=False) + + cols = [ + "ann_return", + "ann_vol", + "max_drawdown", + "sharpe", + "sma_fast", + "sma_slow", + "lazy_days", + "rebalance_band", + "atr_mult", + "profit_tighten_atr", + "atr_mult_profit", + "stop_loss_atr", + "bias_exit", + "vol_ratio_exit", + "max_weight_per_asset", + "concentration_power", + ] + + print("top10") + print(df[cols].head(10).to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/grid_search_stage_a.py b/scripts/grid_search_stage_a.py new file mode 100644 index 0000000..2bf5135 --- /dev/null +++ b/scripts/grid_search_stage_a.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +import argparse +import itertools +import json +from dataclasses import asdict, replace +from pathlib import Path + +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 4)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy", "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + return universe, constraints, risk_proxy, rates_fallback + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / f"{a.ts_code.replace('.', '')}.parquet" + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252 ** 0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + sharpe = float(ann_ret / ann_vol) if ann_vol > 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "sharpe": sharpe} + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + ap.add_argument("--out", default="data/grid_stage_a.parquet") + args = ap.parse_args() + + universe, constraints, risk_proxy, rates_fallback = load_universe(Path(args.config)) + prices = load_prices(Path(args.rawdir), universe, args.start, args.end) + + base = TrendParams(target_ann_vol=0.25) + + sma_fast_list = [3, 5, 8] + sma_slow_list = [15, 20, 30, 40] + lazy_days_list = [1, 2, 5, 10] + band_list = [0.03, 0.05, 0.08] + atr_mult_list = [2.5, 3.0, 3.2, 4.0] + + rows = [] + + for sma_fast, sma_slow, lazy_days, band, atr_mult in itertools.product( + sma_fast_list, sma_slow_list, lazy_days_list, band_list, atr_mult_list + ): + if sma_fast >= sma_slow: + continue + + params = replace( + base, + rebalance_every=1, + max_positions=constraints.max_positions, + sma_fast=sma_fast, + sma_slow=sma_slow, + lazy_days=lazy_days, + rebalance_band=band, + atr_mult=float(atr_mult), + ) + + try: + equity, _w, _tr = run_backtest( + prices, + universe, + constraints, + params, + rates_fallback=rates_fallback, + risk_proxy=risk_proxy, + ) + except Exception: + continue + + st = perf_stats(equity["equity"]) + if not st: + continue + + row = {**st, **asdict(params)} + rows.append(row) + + df = pd.DataFrame(rows) + if df.empty: + print("no results") + return + + df = df[df["ann_vol"] <= 0.25].copy() + df = df.sort_values(["ann_return", "sharpe"], ascending=False) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + df.to_parquet(out, index=False) + + cols = ["ann_return", "ann_vol", "max_drawdown", "sharpe", "sma_fast", "sma_slow", "lazy_days", "rebalance_band", "atr_mult"] + print("top10") + print(df[cols].head(10).to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/iterate_best_local.py b/scripts/iterate_best_local.py new file mode 100644 index 0000000..ccb7b28 --- /dev/null +++ b/scripts/iterate_best_local.py @@ -0,0 +1,472 @@ +from __future__ import annotations + +import argparse +import json +import random +import sqlite3 +from dataclasses import asdict, fields, replace +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +import numpy as np +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 3)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy") or (universe[0].ts_code if universe else "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + return universe, constraints, str(risk_proxy), str(rates_fallback) + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / (a.ts_code.replace(".", "") + ".parquet") + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252**0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + sharpe = float(ann_ret / ann_vol) if ann_vol > 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "sharpe": sharpe} + + +def trades_per_year(trades: pd.DataFrame | None, start: str, end: str) -> float: + if trades is None or getattr(trades, "empty", True): + return 0.0 + years = max(1, (int(end[:4]) - int(start[:4]) + 1)) + return float(len(trades) / years) + + +def ensure_db(db_path: Path, param_cols: list[str]) -> None: + db_path.parent.mkdir(parents=True, exist_ok=True) + with sqlite3.connect(str(db_path)) as con: + con.execute("PRAGMA journal_mode=WAL") + con.execute("PRAGMA synchronous=NORMAL") + con.execute( + """ + CREATE TABLE IF NOT EXISTS trials ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + run_id TEXT NOT NULL, + ts_utc TEXT NOT NULL, + code_version TEXT, + config_path TEXT, + start TEXT, + end TEXT, + seed INTEGER, + trial INTEGER, + jobs INTEGER, + ann_return REAL, + ann_vol REAL, + max_drawdown REAL, + sharpe REAL, + trades_per_year REAL + ) + """ + ) + for c in param_cols: + try: + con.execute(f"ALTER TABLE trials ADD COLUMN {c} REAL") + except sqlite3.OperationalError: + pass + + +def insert_rows(db_path: Path, param_cols: list[str], rows: list[dict[str, Any]]) -> None: + if not rows: + return + cols = [ + "run_id", + "ts_utc", + "code_version", + "config_path", + "start", + "end", + "seed", + "trial", + "jobs", + "ann_return", + "ann_vol", + "max_drawdown", + "sharpe", + "trades_per_year", + *param_cols, + ] + q = ",".join(["?"] * len(cols)) + join_cols = ",".join(cols) + sql = f"INSERT INTO trials ({join_cols}) VALUES ({q})" + vals = [] + for r in rows: + vals.append([r.get(c) for c in cols]) + with sqlite3.connect(str(db_path)) as con: + con.executemany(sql, vals) + con.commit() + + +def load_state(path: Path) -> dict: + if path.exists(): + return json.loads(path.read_text(encoding="utf-8")) + return {"best": None, "last_reported_ann_return": None, "history": []} + + +def save_state(path: Path, state: dict) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(state, ensure_ascii=True, indent=2) + "\n", encoding="utf-8") + + +def infer_code_version(repo_dir: Path) -> str: + head = repo_dir / ".git" / "HEAD" + if head.exists(): + try: + txt = head.read_text(encoding="utf-8").strip() + if txt.startswith("ref:"): + ref = txt.split(" ", 1)[1] + ref_path = repo_dir / ".git" / ref + if ref_path.exists(): + return ref_path.read_text(encoding="utf-8").strip() + return txt + except Exception: + return "unknown" + return "nogit" + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe_industry_profiled.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + ap.add_argument("--trials", type=int, default=20) + ap.add_argument("--seed", type=int, default=1) + ap.add_argument("--jobs", type=int, default=1) + ap.add_argument("--state", default="data/opt_state.json") + ap.add_argument("--db", default="data/experiments.sqlite") + ap.add_argument("--max_trades_per_year", type=float, default=80.0) + ap.add_argument("--progress_every", type=int, default=5) + ap.add_argument( + "--tweak", + action="append", + default=[], + help=( + "Enable a tweak group. Repeatable. Options: macro, churn, stops, score, switches, switches2, signal1, orth_ma, orth_weights, orth_mech, asym_fast, positions, exits. " + "(Each group adjusts <=4 params around current best.)" + ), + ) + args = ap.parse_args() + + rng = random.Random(int(args.seed)) + np.random.seed(int(args.seed)) + + config_path = Path(args.config) + universe, constraints, risk_proxy, rates_fallback = load_universe(config_path) + prices = load_prices(Path(args.rawdir), universe, str(args.start), str(args.end)) + + state_path = Path(args.state) + state = load_state(state_path) + best_row = state.get("best") + if not best_row: + raise SystemExit("opt_state.json missing best") + + tp_fields = {f.name for f in fields(TrendParams)} + + defaults = TrendParams(max_positions=constraints.max_positions) + best_params = {k: best_row[k] for k in best_row.keys() if k in tp_fields} + + typed: dict[str, Any] = {} + for k, v in best_params.items(): + t = type(getattr(defaults, k)) + if t is int: + typed[k] = int(v) + elif t is float: + typed[k] = float(v) + else: + typed[k] = v + + base = replace(defaults, **typed) + + tweaks = set(args.tweak or []) + + def sample_params() -> TrendParams: + p = base + + if "macro" in tweaks: + p = replace( + p, + macro_min_breadth=float(rng.choice([0.10, 0.12, 0.15, 0.18, 0.20])), + macro_down_frac=float(rng.choice([0.75, 0.78, 0.80, 0.82, 0.85])), + ) + + if "churn" in tweaks: + p = replace( + p, + lazy_days=int(rng.choice([6, 8, 10])), + min_hold_days=int(rng.choice([2, 3, 4, 5])), + replace_score_gap=float(rng.choice([0.5, 0.8, 1.2, 1.6])), + ) + + if "switches" in tweaks: + # switch/constraint knobs (exactly 4 factors) + p = replace( + p, + desired_positions_min=int(rng.choice([1, 2, 3])), + replace_score_gap=float(rng.choice([0.0, 0.3, 0.5, 0.8, 1.2])), + lazy_days=int(rng.choice([4, 6, 8, 10, 12])), + min_hold_days=int(rng.choice([1, 2, 3, 4, 5])), + ) + + if "switches2" in tweaks: + # route D churn control without forcing higher min holdings (desired_positions_min fixed) + # exactly 4 factors: replace_score_gap, lazy_days, min_hold_days, cooldown_days + p = replace( + p, + desired_positions_min=int(1), + replace_score_gap=float(rng.choice([0.5, 0.8, 1.0, 1.2, 1.6])), + lazy_days=int(rng.choice([8, 10, 12, 14, 16])), + min_hold_days=int(rng.choice([3, 5, 7, 10])), + cooldown_days=int(rng.choice([0, 2, 4, 6, 8, 10])), + ) + + if "signal1" in tweaks: + # route D: improve signal quality (exactly 4 factors) + p = replace( + p, + min_score=float(rng.choice([0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30])), + trend_strength_weight=float(rng.choice([0.0, 0.2, 0.4, 0.6, 0.8, 1.0])), + score_vol_denom_floor=float(rng.choice([0.01, 0.02, 0.03, 0.04, 0.05])), + macro_min_breadth=float(rng.choice([0.10, 0.15, 0.20, 0.25, 0.30])), + ) + + + if "orth_ma" in tweaks: + # route R: orthogonal to score/stops/exits; explore timing knobs (exactly 4 factors) + p = replace( + p, + sma_fast=int(rng.choice([3, 5, 7, 9, 12])), + sma_slow=int(rng.choice([20, 30, 40, 60, 90])), + rebalance_every=int(rng.choice([1, 2, 3, 5])), + max_replaces_per_day=int(rng.choice([0, 1, 2])), + ) + if p.sma_fast >= p.sma_slow: + p = replace(p, sma_fast=max(3, int(p.sma_slow // 6))) + + + if "orth_weights" in tweaks: + # route R: orthogonal portfolio weight shape (exactly 4 factors) + max_positions = int(rng.choice([2, 3, 4, 5])) + desired_min = int(rng.choice([1, 2, 3])) + desired_max = int(rng.choice([2, 3, 4, 5])) + desired_min = min(desired_min, desired_max) + desired_max = min(desired_max, max_positions) + desired_min = min(desired_min, desired_max) + p = replace( + p, + max_positions=max_positions, + desired_positions_min=desired_min, + desired_positions_max=desired_max, + max_weight_per_asset=float(rng.choice([0.35, 0.45, 0.60, 0.75, 0.90, 1.00])), + ) + # concentration_power exists in TrendParams; adjust it separately (still counts as one factor) + p = replace(p, concentration_power=float(rng.choice([1.2, 1.6, 2.0, 2.2, 2.6, 3.0]))) + + + if "orth_mech" in tweaks: + # route R: mechanism/turnover knobs (exactly 4 factors) + p = replace( + p, + rebalance_every=int(rng.choice([1, 2, 3, 5])), + replace_score_gap=float(rng.choice([0.0, 0.3, 0.5, 0.8, 1.2])), + max_replaces_per_day=int(rng.choice([0, 1, 2, 3])), + cooldown_days=int(rng.choice([0, 2, 4, 6, 8, 10])), + ) + + + if "asym_fast" in tweaks: + # asymmetric bull/bear risk controls (fast-run) (exactly 4 factors) + p = replace( + p, + regime_confirm_days=int(rng.choice([2, 3, 4, 5])), + bull_atr_mult=float(rng.choice([3.0, 3.2, 3.4, 3.6])), + bear_atr_mult=float(rng.choice([2.0, 2.2, 2.4, 2.6, 2.8])), + bear_stop_loss_atr=float(rng.choice([2.0, 2.2, 2.4, 2.6, 2.8])), + ) + + + if "positions" in tweaks: + # concentration/positioning knobs (exactly 4 factors) + max_positions = int(rng.choice([2, 3, 4])) + desired_min = int(rng.choice([1, 2, 3])) + desired_max = int(rng.choice([2, 3, 4])) + # keep consistent + desired_min = min(desired_min, desired_max) + desired_max = min(desired_max, max_positions) + desired_min = min(desired_min, desired_max) + p = replace( + p, + max_positions=max_positions, + desired_positions_min=desired_min, + desired_positions_max=desired_max, + max_weight_per_asset=float(rng.choice([0.45, 0.60, 0.75, 0.90, 1.00])), + ) + + if "stops" in tweaks: + # risk-control fine search (route D: prefer higher sharpe / lower drawdown) + p = replace( + p, + atr_mult=float(rng.choice([3.0, 3.2, 3.4, 3.6])), + stop_loss_atr=float(rng.choice([2.4, 2.6, 2.8, 3.0, 3.2])), + profit_tighten_atr=float(rng.choice([4.0, 6.0, 8.0])), + atr_mult_profit=float(rng.choice([1.3, 1.5, 1.8, 2.0])), + ) + + if "exits" in tweaks: + # anomaly exits fine search (route D) - exactly 4 factors + p = replace( + p, + bias_window=int(rng.choice([10, 15, 20, 30])), + bias_exit=float(rng.choice([0.12, 0.16, 0.20, 0.25, 0.30])), + vol_short=int(rng.choice([3, 5, 8, 10])), + vol_ratio_exit=float(rng.choice([2.0, 2.5, 3.0, 3.5, 4.0])), + ) + + if "score" in tweaks: + # aggressive weight search for higher ann_return + p = replace( + p, + min_score=float(rng.choice([-0.10, 0.00, 0.05, 0.10, 0.20, 0.30, 0.40])), + trend_strength_weight=float(rng.choice([0.00, 0.20, 0.40, 0.60, 0.80, 1.00])), + w_r20=float(rng.choice([0.20, 0.35, 0.50, 0.65, 0.80])), + w_r60=float(rng.choice([0.00, 0.10, 0.20, 0.35, 0.50])), + ) + remain = 1.0 - (p.w_r20 + p.w_r60) + w_r5 = float(max(0.0, min(0.6, remain * 0.6))) + w_r120 = float(max(0.0, remain - w_r5)) + p = replace(p, w_r5=w_r5, w_r120=w_r120) + + return p + + param_cols = sorted(asdict(base).keys()) + db_path = Path(args.db) + ensure_db(db_path, param_cols=param_cols) + + run_id = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") + f"_bestlocal_seed{int(args.seed)}" + ("_" + "-".join(sorted(tweaks)) if tweaks else "") + code_version = infer_code_version(Path(".")) + + best_ann = float(best_row.get("ann_return") or float("-inf")) + + rows_for_db: list[dict[str, Any]] = [] + valid = 0 + for t in range(int(args.trials)): + p = sample_params() + + equity, _w, tr = run_backtest( + prices, + universe, + constraints, + p, + rates_fallback=rates_fallback, + risk_proxy=risk_proxy, + ) + st = perf_stats(equity["equity"]) + if not st: + continue + + tpy = trades_per_year(tr, str(args.start), str(args.end)) + if tpy > float(args.max_trades_per_year): + continue + + valid += 1 + row = {**st, "trades_per_year": float(tpy), **asdict(p)} + row["trial"] = int(t) + row["seed"] = int(args.seed) + + if float(row["ann_return"]) > best_ann: + best_ann = float(row["ann_return"]) + state["best"] = row + save_state(state_path, state) + + db_row = { + "run_id": run_id, + "ts_utc": datetime.now(timezone.utc).isoformat(), + "code_version": code_version, + "config_path": str(config_path), + "start": str(args.start), + "end": str(args.end), + "seed": int(args.seed), + "trial": int(t), + "jobs": int(args.jobs), + "ann_return": float(row["ann_return"]), + "ann_vol": float(row["ann_vol"]), + "max_drawdown": float(row["max_drawdown"]), + "sharpe": float(row["sharpe"]), + "trades_per_year": float(row["trades_per_year"]), + } + for c in param_cols: + db_row[c] = row.get(c) + rows_for_db.append(db_row) + + if int(args.progress_every) > 0 and valid % int(args.progress_every) == 0: + print(f"progress valid={valid} best_ann={best_ann:.4f}", flush=True) + + if rows_for_db: + insert_rows(db_path, param_cols=param_cols, rows=rows_for_db) + + state.setdefault("history", []).append( + { + "timestamp": datetime.now(timezone.utc).isoformat(), + "run_id": run_id, + "code_version": code_version, + "config": str(args.config), + "start": str(args.start), + "end": str(args.end), + "trials": int(args.trials), + "jobs": int(args.jobs), + "best_ann_return": float(best_ann) if np.isfinite(best_ann) else None, + "db": str(args.db), + "base_from": "opt_state.best", + "tweaks": sorted(tweaks), + } + ) + save_state(state_path, state) + + df = pd.DataFrame(rows_for_db).sort_values(["ann_return"], ascending=False) + view_cols = [ + "ann_return", + "ann_vol", + "max_drawdown", + "sharpe", + "trades_per_year", + "atr_mult", + "stop_loss_atr", + "profit_tighten_atr", + "atr_mult_profit", + ] + view_cols = [c for c in view_cols if c in df.columns] + print("run_id", run_id) + print(df[view_cols].head(8).to_string(index=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/iterate_optimize.py b/scripts/iterate_optimize.py new file mode 100644 index 0000000..d49c282 --- /dev/null +++ b/scripts/iterate_optimize.py @@ -0,0 +1,499 @@ +from __future__ import annotations + +import argparse +import json +import os +import random +import sqlite3 +from dataclasses import asdict, replace +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +import numpy as np +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + +# Globals for multiprocessing (fork mode shares memory COW) +_G_PRICES: dict[str, pd.DataFrame] | None = None +_G_UNIVERSE: list[UniverseAsset] | None = None +_G_CONSTRAINTS: Constraints | None = None +_G_RISK_PROXY: str | None = None +_G_RATES_FALLBACK: str | None = None + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 3)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy") or (universe[0].ts_code if universe else "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + return universe, constraints, str(risk_proxy), str(rates_fallback) + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / (a.ts_code.replace(".", "") + ".parquet") + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252**0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + sharpe = float(ann_ret / ann_vol) if ann_vol > 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "sharpe": sharpe} + + +def trades_per_year(trades: pd.DataFrame, start: str, end: str) -> float: + if trades is None or trades.empty: + return 0.0 + years = max(1, (int(end[:4]) - int(start[:4]) + 1)) + return float(len(trades) / years) + + +def load_state(path: Path) -> dict: + if path.exists(): + return json.loads(path.read_text(encoding="utf-8")) + return {"best": None, "last_reported_ann_return": None, "history": []} + + +def save_state(path: Path, state: dict) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(state, ensure_ascii=True, indent=2) + "\n", encoding="utf-8") + + +def infer_code_version(repo_dir: Path) -> str: + # Prefer git commit hash if available. + head = repo_dir / ".git" / "HEAD" + if head.exists(): + try: + txt = head.read_text(encoding="utf-8").strip() + if txt.startswith("ref:"): + ref = txt.split(" ", 1)[1] + ref_path = repo_dir / ".git" / ref + if ref_path.exists(): + return ref_path.read_text(encoding="utf-8").strip() + return txt + except Exception: + return "unknown" + return "nogit" + + +def ensure_db(db_path: Path, param_cols: list[str]) -> None: + db_path.parent.mkdir(parents=True, exist_ok=True) + with sqlite3.connect(str(db_path)) as con: + con.execute("PRAGMA journal_mode=WAL") + con.execute("PRAGMA synchronous=NORMAL") + con.execute( + """ + CREATE TABLE IF NOT EXISTS trials ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + run_id TEXT NOT NULL, + ts_utc TEXT NOT NULL, + code_version TEXT, + config_path TEXT, + start TEXT, + end TEXT, + seed INTEGER, + trial INTEGER, + jobs INTEGER, + ann_return REAL, + ann_vol REAL, + max_drawdown REAL, + sharpe REAL, + trades_per_year REAL + ) + """ + ) + # Add param columns if missing (structured fields) + for c in param_cols: + try: + con.execute(f"ALTER TABLE trials ADD COLUMN {c} REAL") + except sqlite3.OperationalError: + pass + + +def insert_rows(db_path: Path, param_cols: list[str], rows: list[dict[str, Any]]) -> None: + if not rows: + return + cols = [ + "run_id", + "ts_utc", + "code_version", + "config_path", + "start", + "end", + "seed", + "trial", + "jobs", + "ann_return", + "ann_vol", + "max_drawdown", + "sharpe", + "trades_per_year", + *param_cols, + ] + q = ",".join(["?"] * len(cols)) + join_cols = ",".join(cols) + sql = f"INSERT INTO trials ({join_cols}) VALUES ({q})" + vals = [] + for r in rows: + vals.append([r.get(c) for c in cols]) + with sqlite3.connect(str(db_path)) as con: + con.executemany(sql, vals) + con.commit() + + + + +def reservoir_sample_product(rng, iterables, k: int): + """Sample up to k combos from cartesian product.""" + import itertools + + sample = [] + n = 0 + for combo in itertools.product(*iterables): + n += 1 + if len(sample) < k: + sample.append(combo) + else: + j = rng.randrange(n) + if j < k: + sample[j] = combo + return sample + + +def _init_globals(prices: dict[str, pd.DataFrame], universe: list[UniverseAsset], constraints: Constraints, risk_proxy: str, rates_fallback: str) -> None: + global _G_PRICES, _G_UNIVERSE, _G_CONSTRAINTS, _G_RISK_PROXY, _G_RATES_FALLBACK + _G_PRICES = prices + _G_UNIVERSE = universe + _G_CONSTRAINTS = constraints + _G_RISK_PROXY = risk_proxy + _G_RATES_FALLBACK = rates_fallback + + +def _eval_one(task: dict[str, Any]) -> dict[str, Any] | None: + assert _G_PRICES is not None + assert _G_UNIVERSE is not None + assert _G_CONSTRAINTS is not None + assert _G_RISK_PROXY is not None + assert _G_RATES_FALLBACK is not None + + params = TrendParams() + params = replace(params, **task["params"]) + + try: + equity, _w, tr = run_backtest( + _G_PRICES, + _G_UNIVERSE, + _G_CONSTRAINTS, + params, + rates_fallback=_G_RATES_FALLBACK, + risk_proxy=_G_RISK_PROXY, + ) + except Exception: + return None + + st = perf_stats(equity["equity"]) + if not st: + return None + + tpy = trades_per_year(tr, task["start"], task["end"]) + if tpy > float(task["max_trades_per_year"]): + return None + + row = {**st, "trades_per_year": float(tpy), **asdict(params)} + row["trial"] = int(task["trial"]) + row["seed"] = int(task["seed"]) + return row + + +MAX_GRID_COMBOS = 128 + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--config", default="configs/etf_universe_industry_profiled.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default="20200101") + ap.add_argument("--end", default="20251231") + ap.add_argument("--trials", type=int, default=240) + ap.add_argument("--mode", choices=["random", "grid"], default="random") + ap.add_argument("--max_grid", type=int, default=MAX_GRID_COMBOS) + ap.add_argument("--seed", type=int, default=1) + ap.add_argument("--jobs", type=int, default=1, help="Parallel workers (processes), up to 8") + ap.add_argument("--state", default="data/opt_state.json") + ap.add_argument("--db", default="data/experiments.sqlite") + ap.add_argument("--baseline", type=float, default=None) + ap.add_argument("--report_step", type=float, default=0.05) + ap.add_argument("--max_trades_per_year", type=float, default=80.0) + ap.add_argument("--progress_every", type=int, default=25) + args = ap.parse_args() + jobs = max(1, min(8, int(args.jobs))) + + random.seed(args.seed) + np.random.seed(args.seed) + + config_path = Path(args.config) + universe, constraints, risk_proxy, rates_fallback = load_universe(config_path) + prices = load_prices(Path(args.rawdir), universe, args.start, args.end) + _init_globals(prices, universe, constraints, risk_proxy, rates_fallback) + + state_path = Path(args.state) + state = load_state(state_path) + + best = state.get("best") + best_ann = float(best["ann_return"]) if best else float("-inf") + + baseline = args.baseline + if baseline is None: + baseline = best_ann if np.isfinite(best_ann) else 0.0 + + last_rep = state.get("last_reported_ann_return") + if last_rep is None: + last_rep = baseline + + params0 = TrendParams(max_positions=constraints.max_positions) + params0_dict = asdict(params0) + + # Parameter columns to persist as structured fields in SQLite + param_cols = sorted(params0_dict.keys()) + + db_path = Path(args.db) + ensure_db(db_path, param_cols=param_cols) + + run_id = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") + f"_seed{int(args.seed)}" + code_version = infer_code_version(Path(".")) + + tasks: list[dict[str, Any]] = [] + + rng = random.Random(int(args.seed)) + + if str(args.mode) == "grid": + grids = { + "sma_fast": [3, 5], + "sma_slow": [15, 20, 30], + "lazy_days": [4, 5, 6, 8], + "min_hold_days": [2, 3, 5], + "replace_score_gap": [0.5, 0.8, 1.2, 1.6], + "min_score": [0.0, 0.2, 0.4, 0.6], + "desired_positions_min": [1, 2], + "macro_min_breadth": [0.10, 0.15, 0.20, 0.30], + "macro_down_frac": [0.75, 0.80, 0.85], + "atr_mult": [2.5, 3.2, 4.0], + "stop_loss_atr": [2.0, 2.5, 3.2], + "profit_tighten_atr": [4.0, 6.0, 8.0], + "atr_mult_profit": [1.5, 2.0, 2.5], + "bias_exit": [0.12, 0.18, 0.25], + "vol_ratio_exit": [3.0, 4.0], + } + + keys = list(grids.keys()) + iters = [list(grids[k]) for k in keys] + total = 1 + for xs in iters: + total *= max(1, len(xs)) + max_grid = max(1, int(args.max_grid)) + if total > max_grid: + print(f"grid combos {total} > {max_grid}; sampling combos", flush=True) + combos = reservoir_sample_product(rng, iters, max_grid) + else: + import itertools + combos = list(itertools.product(*iters)) + + for t, combo in enumerate(combos): + vals = dict(zip(keys, combo)) + sma_fast = int(vals["sma_fast"]) + sma_slow = int(vals["sma_slow"]) + if sma_fast >= sma_slow: + continue + p = replace( + params0, + sma_fast=sma_fast, + sma_slow=sma_slow, + lazy_days=int(vals["lazy_days"]), + min_hold_days=int(vals["min_hold_days"]), + replace_score_gap=float(vals["replace_score_gap"]), + min_score=float(vals["min_score"]), + desired_positions_min=int(vals["desired_positions_min"]), + desired_positions_max=int(3), + macro_min_breadth=float(vals["macro_min_breadth"]), + macro_down_frac=float(vals["macro_down_frac"]), + atr_mult=float(vals["atr_mult"]), + stop_loss_atr=float(vals["stop_loss_atr"]), + profit_tighten_atr=float(vals["profit_tighten_atr"]), + atr_mult_profit=float(vals["atr_mult_profit"]), + bias_exit=float(vals["bias_exit"]), + vol_ratio_exit=float(vals["vol_ratio_exit"]), + rebalance_every=1, + ) + + tasks.append({ + "trial": int(t), + "seed": int(args.seed), + "start": str(args.start), + "end": str(args.end), + "max_trades_per_year": float(args.max_trades_per_year), + "params": {k: asdict(p)[k] for k in param_cols}, + }) + else: + for t in range(int(args.trials)): + sma_fast = rng.choice([3, 5]) + sma_slow = rng.choice([15, 20, 30]) + if sma_fast >= sma_slow: + continue + lazy_days = rng.choice([4, 5, 6, 8]) + min_hold = rng.choice([2, 3, 5]) + replace_gap = rng.choice([0.5, 0.8, 1.2, 1.6]) + min_score = rng.choice([0.0, 0.2, 0.4, 0.6]) + dmin = rng.choice([1, 2]) + dmax = 3 + macro_min_breadth = rng.choice([0.10, 0.15, 0.20, 0.30]) + macro_down_frac = rng.choice([0.75, 0.80, 0.85]) + atr_mult = rng.choice([2.5, 3.2, 4.0]) + stop_loss_atr = rng.choice([2.0, 2.5, 3.2]) + profit_tighten_atr = rng.choice([4.0, 6.0, 8.0]) + atr_mult_profit = rng.choice([1.5, 2.0, 2.5]) + bias_exit = rng.choice([0.12, 0.18, 0.25]) + vol_ratio_exit = rng.choice([3.0, 4.0]) + p = replace(params0, sma_fast=int(sma_fast), sma_slow=int(sma_slow), lazy_days=int(lazy_days), min_hold_days=int(min_hold), replace_score_gap=float(replace_gap), min_score=float(min_score), desired_positions_min=int(dmin), desired_positions_max=int(dmax), macro_min_breadth=float(macro_min_breadth), macro_down_frac=float(macro_down_frac), atr_mult=float(atr_mult), stop_loss_atr=float(stop_loss_atr), profit_tighten_atr=float(profit_tighten_atr), atr_mult_profit=float(atr_mult_profit), bias_exit=float(bias_exit), vol_ratio_exit=float(vol_ratio_exit), rebalance_every=1) + tasks.append({"trial": int(t), "seed": int(args.seed), "start": str(args.start), "end": str(args.end), "max_trades_per_year": float(args.max_trades_per_year), "params": {k: asdict(p)[k] for k in param_cols}}) + + + results: list[dict[str, Any]] = [] + rows_for_db: list[dict[str, Any]] = [] + + def record_row(row: dict[str, Any]) -> None: + nonlocal best_ann + results.append(row) + + if float(row["ann_return"]) > best_ann: + best_ann = float(row["ann_return"]) + state["best"] = row + save_state(state_path, state) + + db_row = { + "run_id": run_id, + "ts_utc": datetime.now(timezone.utc).isoformat(), + "code_version": code_version, + "config_path": str(config_path), + "start": str(args.start), + "end": str(args.end), + "seed": int(args.seed), + "trial": int(row.get("trial", -1)), + "jobs": int(jobs), + "ann_return": float(row["ann_return"]), + "ann_vol": float(row["ann_vol"]), + "max_drawdown": float(row["max_drawdown"]), + "sharpe": float(row["sharpe"]), + "trades_per_year": float(row["trades_per_year"]), + } + for c in param_cols: + db_row[c] = row.get(c) + rows_for_db.append(db_row) + + if len(rows_for_db) >= 200: + insert_rows(db_path, param_cols=param_cols, rows=rows_for_db) + rows_for_db.clear() + + if jobs == 1: + for task in tasks: + row = _eval_one(task) + if row is None: + continue + record_row(row) + if int(args.progress_every) > 0 and (len(results) % int(args.progress_every) == 0): + print(f"progress valid={len(results)} best_ann={best_ann:.4f}", flush=True) + else: + import multiprocessing as mp + from concurrent.futures import ProcessPoolExecutor, as_completed + + ctx = mp.get_context("fork") + with ProcessPoolExecutor(max_workers=jobs, mp_context=ctx) as ex: + futs = [ex.submit(_eval_one, task) for task in tasks] + for fut in as_completed(futs): + row = fut.result() + if row is None: + continue + record_row(row) + if int(args.progress_every) > 0 and (len(results) % int(args.progress_every) == 0): + print(f"progress valid={len(results)} best_ann={best_ann:.4f}", flush=True) + + if rows_for_db: + insert_rows(db_path, param_cols=param_cols, rows=rows_for_db) + rows_for_db.clear() + + state["history"].append( + { + "timestamp": datetime.now(timezone.utc).isoformat(), + "run_id": run_id, + "code_version": code_version, + "config": str(args.config), + "start": str(args.start), + "end": str(args.end), + "trials": int(args.trials), + "jobs": int(jobs), + "best_ann_return": float(best_ann) if np.isfinite(best_ann) else None, + "db": str(args.db), + } + ) + save_state(state_path, state) + + if not results: + print("no valid trials") + return + + df = pd.DataFrame(results).sort_values(["ann_return"], ascending=False) + + cols = [ + "ann_return", + "ann_vol", + "max_drawdown", + "sharpe", + "trades_per_year", + "sma_fast", + "sma_slow", + "lazy_days", + "min_hold_days", + "replace_score_gap", + "min_score", + "macro_min_breadth", + "macro_down_frac", + "desired_positions_min", + "atr_mult", + "stop_loss_atr", + "profit_tighten_atr", + "atr_mult_profit", + "bias_exit", + "vol_ratio_exit", + ] + cols = [c for c in cols if c in df.columns] + print(df[cols].head(12).to_string(index=False)) + + if best_ann >= float(last_rep) + float(args.report_step): + state["last_reported_ann_return"] = float(best_ann) + save_state(state_path, state) + print("REPORT_TRIGGER", float(best_ann), "baseline", float(last_rep)) + + +if __name__ == "__main__": + main() diff --git a/scripts/report_last_run.py b/scripts/report_last_run.py new file mode 100644 index 0000000..0d1e3b0 --- /dev/null +++ b/scripts/report_last_run.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +import argparse +import json +import sqlite3 +from pathlib import Path +from typing import Any + + +def fetch_top(con: sqlite3.Connection, run_id: str, limit: int) -> list[dict[str, Any]]: + cols = [r[1] for r in con.execute("PRAGMA table_info(trials)")] + sql = "SELECT * FROM trials WHERE run_id = ? ORDER BY ann_return DESC LIMIT ?" + rows = [] + for r in con.execute(sql, [run_id, int(limit)]): + rows.append(dict(zip(cols, r))) + return rows + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--state", default="data/opt_state.json") + ap.add_argument("--db", default="data/experiments.sqlite") + ap.add_argument("--top", type=int, default=5) + args = ap.parse_args() + + state_path = Path(args.state) + state = json.loads(state_path.read_text(encoding="utf-8")) + + hist = state.get("history") or [] + if not hist: + raise SystemExit("no history in opt_state.json") + + last = hist[-1] + run_id = str(last.get("run_id")) + + best = state.get("best") + + print("last_run_id", run_id) + print("last_run", {k: last.get(k) for k in ["timestamp", "seed", "trials", "jobs", "best_ann_return", "code_version"] if k in last}) + if best: + print( + "global_best", + { + "ann_return": best.get("ann_return"), + "ann_vol": best.get("ann_vol"), + "max_drawdown": best.get("max_drawdown"), + "sharpe": best.get("sharpe"), + "trades_per_year": best.get("trades_per_year"), + }, + ) + + db_path = Path(args.db) + with sqlite3.connect(str(db_path)) as con: + rows = fetch_top(con, run_id=run_id, limit=int(args.top)) + + if not rows: + print("no rows for run_id") + return + + def slim(r: dict[str, Any]) -> dict[str, Any]: + keys = [ + "id", + "trial", + "ann_return", + "ann_vol", + "max_drawdown", + "sharpe", + "trades_per_year", + "sma_fast", + "sma_slow", + "lazy_days", + "min_hold_days", + "replace_score_gap", + "min_score", + "macro_min_breadth", + "macro_down_frac", + "desired_positions_min", + "atr_mult", + "stop_loss_atr", + "profit_tighten_atr", + "atr_mult_profit", + "bias_exit", + "vol_ratio_exit", + ] + return {k: r.get(k) for k in keys if k in r} + + print("top_trials") + for r in rows: + print(json.dumps(slim(r), ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/run_etf_trend_backtest.py b/scripts/run_etf_trend_backtest.py new file mode 100644 index 0000000..50b1e4a --- /dev/null +++ b/scripts/run_etf_trend_backtest.py @@ -0,0 +1,158 @@ +from __future__ import annotations + +import argparse +import json +from dataclasses import fields +from pathlib import Path + +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset]) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / f"{a.ts_code.replace('.', '')}.parquet" + if not fn.exists(): + raise FileNotFoundError(f"missing data file: {fn}") + df = pd.read_parquet(fn) + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252**0.5)) + dd = (equity / equity.cummax() - 1.0).min() + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": float(dd)} + + +def add_trendparams_args(p: argparse.ArgumentParser) -> None: + # Expose a subset of TrendParams for fast experiments / grid search verification. + # Keep names stable and CLI-friendly (kebab-case). + tp_fields = {f.name: f for f in fields(TrendParams)} + + def add(name: str, arg: str, typ, help_: str) -> None: + if name not in tp_fields: + return + p.add_argument(arg, type=typ, default=None, help=help_) + + add("sma_fast", "--sma-fast", int, "SMA fast window") + add("sma_slow", "--sma-slow", int, "SMA slow window") + add("lazy_days", "--lazy-days", int, "Min days between switches") + add("min_hold_days", "--min-hold-days", int, "Min hold days before trend-exit/switch") + add("replace_score_gap", "--replace-score-gap", float, "Replace weakest only if score gap >= this") + add("min_score", "--min-score", float, "Entry score threshold (allow empty if not met)") + add("macro_down_frac", "--macro-down-frac", float, "Down-day breadth threshold for consistent down") + add("desired_positions_min", "--desired-positions-min", int, "Desired min positions (allow empty)") + add("desired_positions_max", "--desired-positions-max", int, "Desired max positions") + add("rebalance_band", "--rebalance-band", float, "Ignore small weight changes") + + add("atr_mult", "--atr-mult", float, "Chandelier ATR multiple") + add("profit_tighten_atr", "--profit-tighten-atr", float, "Tighten trailing after profit >= N*ATR") + add("atr_mult_profit", "--atr-mult-profit", float, "Chandelier ATR multiple after tighten") + add("stop_loss_atr", "--stop-loss-atr", float, "Hard stop loss from entry in ATR") + + add("bias_exit", "--bias-exit", float, "Exit when abs(bias) >= threshold") + add("vol_ratio_exit", "--vol-ratio-exit", float, "Exit when volume/amount ratio >= threshold") + + add("max_weight_per_asset", "--max-weight-per-asset", float, "Max weight per risky asset") + add("concentration_power", "--concentration-power", float, "Weight concentration power") + + add("macro_min_breadth", "--macro-min-breadth", float, "Min equity breadth to be risk-on") + add("macro_scale_risk_off", "--macro-scale-risk-off", float, "Scale risky weights in risk-off") + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("--config", default="configs/etf_universe.json") + p.add_argument("--rawdir", default="data/raw") + p.add_argument("--out", default="data/etf_trend_equity.parquet") + p.add_argument("--start", default="20200101", help="Filter start trade_date YYYYMMDD (inclusive)") + p.add_argument("--end", default="20251231", help="Filter end trade_date YYYYMMDD (inclusive)") + add_trendparams_args(p) + args = p.parse_args() + + conf = json.loads(Path(args.config).read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 4)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 1)), + must_rates=int(cons.get("must_include", {}).get("rates", 1)), + must_equity=int(cons.get("must_include", {}).get("equity", 1)), + ) + + params = TrendParams(max_positions=constraints.max_positions) + + # apply CLI overrides + overrides = { + "sma_fast": args.sma_fast, + "sma_slow": args.sma_slow, + "lazy_days": args.lazy_days, + "min_hold_days": getattr(args, "min_hold_days", None), + "replace_score_gap": getattr(args, "replace_score_gap", None), + "min_score": getattr(args, "min_score", None), + "macro_down_frac": getattr(args, "macro_down_frac", None), + "desired_positions_min": getattr(args, "desired_positions_min", None), + "desired_positions_max": getattr(args, "desired_positions_max", None), + "rebalance_band": args.rebalance_band, + "atr_mult": args.atr_mult, + "profit_tighten_atr": args.profit_tighten_atr, + "atr_mult_profit": args.atr_mult_profit, + "stop_loss_atr": args.stop_loss_atr, + "bias_exit": args.bias_exit, + "vol_ratio_exit": args.vol_ratio_exit, + "max_weight_per_asset": args.max_weight_per_asset, + "concentration_power": args.concentration_power, + "macro_min_breadth": args.macro_min_breadth, + "macro_scale_risk_off": args.macro_scale_risk_off, + } + overrides = {k: v for k, v in overrides.items() if v is not None} + if overrides: + params = TrendParams(**{**params.__dict__, **overrides}) + + risk_proxy = cons.get("risk_proxy", "510300.SH") + + rates_fallback = cons.get("rates_fallback") + if rates_fallback is None: + for a in universe: + if a.asset_class.startswith("rates"): + rates_fallback = a.ts_code + break + if not rates_fallback: + raise RuntimeError("universe must include a rates asset for fallback") + + prices = load_prices(Path(args.rawdir), universe) + for k, df in prices.items(): + d = df.copy() + d["trade_date"] = d["trade_date"].astype(str) + d = d[(d["trade_date"] >= str(args.start)) & (d["trade_date"] <= str(args.end))] + prices[k] = d + + equity, weights, trades = run_backtest(prices, universe, constraints, params, rates_fallback=rates_fallback, risk_proxy=risk_proxy) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + equity.to_parquet(out) + + weights_path = out.with_name(out.stem + "_weights" + out.suffix) + trades_path = out.with_name(out.stem + "_trades" + out.suffix) + weights.to_parquet(weights_path) + if trades is not None and not trades.empty: + trades.to_parquet(trades_path, index=False) + print(f"wrote trades -> {trades_path}") + + st = perf_stats(equity["equity"]) + print("perf", st) + print("last equity", float(equity["equity"].iloc[-1])) + print("last weights", weights.iloc[-1].sort_values(ascending=False).head(10).to_dict()) + + +if __name__ == "__main__": + main() diff --git a/scripts/run_iter20_loop.sh b/scripts/run_iter20_loop.sh new file mode 100755 index 0000000..e69de29 diff --git a/scripts/run_macro20.sh b/scripts/run_macro20.sh new file mode 100644 index 0000000..e69de29 diff --git a/scripts/smoke.py b/scripts/smoke.py new file mode 100644 index 0000000..c2edea1 --- /dev/null +++ b/scripts/smoke.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +import numpy as np +import pandas as pd + +from qfr.factors import winsorize_by_date, zscore_by_date +from qfr.metrics import information_coefficient + + +def main() -> None: + dates = pd.to_datetime(["2026-01-01", "2026-01-02", "2026-01-03"]) + assets = ["A", "B", "C", "D"] + idx = pd.MultiIndex.from_product([dates, assets], names=["date", "asset"]) + + rng = np.random.default_rng(42) + factor = pd.Series(rng.normal(size=len(idx)), index=idx) + fwd_ret = pd.Series(rng.normal(scale=0.01, size=len(idx)), index=idx) + + factor2 = zscore_by_date(winsorize_by_date(factor)) + ic = information_coefficient(factor2, fwd_ret) + + print("IC mean:", float(ic.mean())) + + +if __name__ == "__main__": + main() diff --git a/scripts/tushare_download_daily.py b/scripts/tushare_download_daily.py new file mode 100644 index 0000000..efccdd9 --- /dev/null +++ b/scripts/tushare_download_daily.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +import argparse +from pathlib import Path + +from qfr.data.tushare_client import fetch_daily, load_tushare_config + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("--env", default=None, help="Path to .env (default: auto-detect)") + p.add_argument("--ts-code", default=None, help="e.g. 000001.SZ") + p.add_argument("--start", dest="start_date", default=None, help="YYYYMMDD") + p.add_argument("--end", dest="end_date", default=None, help="YYYYMMDD") + p.add_argument("--trade-date", default=None, help="YYYYMMDD") + p.add_argument("--out", default="data/raw/tushare_daily.parquet") + args = p.parse_args() + + cfg = load_tushare_config(args.env) + df = fetch_daily( + cfg, + ts_code=args.ts_code, + trade_date=args.trade_date, + start_date=args.start_date, + end_date=args.end_date, + ) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + df.to_parquet(out, index=False) + print(f"wrote {len(df)} rows -> {out}") + + +if __name__ == "__main__": + main() diff --git a/scripts/tushare_download_universe.py b/scripts/tushare_download_universe.py new file mode 100644 index 0000000..63a449c --- /dev/null +++ b/scripts/tushare_download_universe.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +import pandas as pd + +from qfr.data.tushare_client import fetch_fund_daily, load_tushare_config + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("--env", default=None, help="Path to .env") + p.add_argument("--config", default="configs/etf_universe.json") + p.add_argument("--start", dest="start_date", default=None, help="YYYYMMDD") + p.add_argument("--end", dest="end_date", default=None, help="YYYYMMDD") + p.add_argument("--outdir", default="data/raw") + args = p.parse_args() + + cfg = load_tushare_config(args.env) + + conf = json.loads(Path(args.config).read_text(encoding="utf-8")) + assets = conf["assets"] + outdir = Path(args.outdir) + outdir.mkdir(parents=True, exist_ok=True) + + for a in assets: + ts_code = a["ts_code"] + df = fetch_fund_daily(cfg, ts_code=ts_code, start_date=args.start_date, end_date=args.end_date) + if df is None or df.empty: + print(f"skip {ts_code}: empty") + continue + + # standardize columns expected by backtest + # fund_daily provides: ts_code, trade_date, open, high, low, close, vol, amount + keep = [c for c in ["ts_code", "trade_date", "open", "high", "low", "close", "vol", "amount"] if c in df.columns] + df = df[keep].copy() + df = df.sort_values("trade_date") + + out = outdir / f"{ts_code.replace('.', '')}.parquet" + df.to_parquet(out, index=False) + print(f"wrote {ts_code}: {len(df)} rows -> {out}") + + +if __name__ == "__main__": + main() diff --git a/scripts/verify_topn.py b/scripts/verify_topn.py new file mode 100644 index 0000000..2a81b93 --- /dev/null +++ b/scripts/verify_topn.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +import argparse +import json +import sqlite3 +from dataclasses import fields +from pathlib import Path +from typing import Any + +import pandas as pd + +from qfr.strategy.etf_trend import Constraints, TrendParams, UniverseAsset, run_backtest + + +def load_universe(config_path: Path) -> tuple[list[UniverseAsset], Constraints, str, str]: + conf = json.loads(config_path.read_text(encoding="utf-8")) + universe = [UniverseAsset(**a) for a in conf["assets"]] + + cons = conf.get("constraints", {}) + constraints = Constraints( + max_positions=int(cons.get("max_positions", 3)), + must_commodity=int(cons.get("must_include", {}).get("commodity", 0)), + must_rates=int(cons.get("must_include", {}).get("rates", 0)), + must_equity=int(cons.get("must_include", {}).get("equity", 0)), + ) + + risk_proxy = cons.get("risk_proxy") or (universe[0].ts_code if universe else "510300.SH") + rates_fallback = cons.get("rates_fallback", "511010.SH") + return universe, constraints, str(risk_proxy), str(rates_fallback) + + +def load_prices(raw_dir: Path, universe: list[UniverseAsset], start: str, end: str) -> dict[str, pd.DataFrame]: + out: dict[str, pd.DataFrame] = {} + for a in universe: + fn = raw_dir / (a.ts_code.replace(".", "") + ".parquet") + df = pd.read_parquet(fn) + df = df.copy() + df["trade_date"] = df["trade_date"].astype(str) + df = df[(df["trade_date"] >= start) & (df["trade_date"] <= end)] + out[a.ts_code] = df + return out + + +def perf_stats(equity: pd.Series) -> dict[str, float]: + r = equity.pct_change().dropna() + if r.empty: + return {} + ann_ret = float((equity.iloc[-1] / equity.iloc[0]) ** (252 / len(r)) - 1) + ann_vol = float(r.std(ddof=1) * (252**0.5)) + dd = float((equity / equity.cummax() - 1.0).min()) + sharpe = float(ann_ret / ann_vol) if ann_vol > 0 else float("nan") + return {"ann_return": ann_ret, "ann_vol": ann_vol, "max_drawdown": dd, "sharpe": sharpe} + + +def table_columns(con: sqlite3.Connection, table: str) -> list[str]: + return [row[1] for row in con.execute(f"PRAGMA table_info({table})")] + + +def fetch_topn(db_path: Path, run_id: str | None, topn: int) -> tuple[list[str], list[dict[str, Any]]]: + with sqlite3.connect(str(db_path)) as con: + cols = table_columns(con, "trials") + where = "" + params: list[Any] = [] + if run_id: + where = "WHERE run_id = ?" + params.append(run_id) + sql = f"SELECT * FROM trials {where} ORDER BY ann_return DESC LIMIT ?" + rows: list[dict[str, Any]] = [] + for r in con.execute(sql, [*params, int(topn)]): + rows.append(dict(zip(cols, r))) + return cols, rows + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--db", default="data/experiments.sqlite") + ap.add_argument("--run_id", default=None) + ap.add_argument("--topn", type=int, default=10) + ap.add_argument("--config", default="configs/etf_universe_industry_profiled.json") + ap.add_argument("--rawdir", default="data/raw") + ap.add_argument("--start", default=None) + ap.add_argument("--end", default=None) + ap.add_argument("--tol", type=float, default=1e-6) + args = ap.parse_args() + + db_path = Path(args.db) + cols, rows = fetch_topn(db_path, args.run_id, args.topn) + if not rows: + print("no trials found") + return + + config_path = Path(args.config) + universe, constraints, risk_proxy, rates_fallback = load_universe(config_path) + + tp_fields = {f.name for f in fields(TrendParams)} + # Coerce param types: sqlite stores numerics as REAL, so ints may come back as floats. + _defaults = TrendParams() + _field_types = {name: type(getattr(_defaults, name)) for name in tp_fields} + + def _coerce(name: str, v): + if v is None: + return None + t = _field_types.get(name) + if t is int: + return int(round(float(v))) + if t is bool: + return bool(int(round(float(v)))) + return float(v) + + + mismatches = 0 + for idx, row in enumerate(rows, start=1): + start = str(args.start or row.get("start") or "20200101") + end = str(args.end or row.get("end") or "20251231") + + prices = load_prices(Path(args.rawdir), universe, start, end) + + params_dict: dict[str, Any] = {} + for k in cols: + if k in tp_fields and row.get(k) is not None: + params_dict[k] = _coerce(k, row[k]) + params_dict.setdefault("max_positions", constraints.max_positions) + + tp = TrendParams(**params_dict) + equity, _weights, _trades = run_backtest( + prices, + universe, + constraints, + tp, + rates_fallback=rates_fallback, + risk_proxy=risk_proxy, + ) + + st = perf_stats(equity["equity"]) + diffs = {k: float(st[k] - float(row.get(k) or 0.0)) for k in ["ann_return", "ann_vol", "max_drawdown", "sharpe"]} + bad = any(abs(v) > float(args.tol) for v in diffs.values()) + if bad: + mismatches += 1 + + tag = "MISMATCH" if bad else "OK" + print(f"[{idx}] {tag} id={row.get('id')} run_id={row.get('run_id')} start={start} end={end}") + print(" orig:", {k: row.get(k) for k in ["ann_return", "ann_vol", "max_drawdown", "sharpe"]}) + print(" re :", st) + print(" diff:", diffs) + + print(f"done. mismatches={mismatches}/{len(rows)}") + + +if __name__ == "__main__": + main() diff --git a/src/qfr.egg-info/PKG-INFO b/src/qfr.egg-info/PKG-INFO new file mode 100644 index 0000000..aeffead --- /dev/null +++ b/src/qfr.egg-info/PKG-INFO @@ -0,0 +1,5 @@ +Metadata-Version: 2.4 +Name: qfr +Version: 0.1.0 +Summary: Quant factor research toolkit +Requires-Python: >=3.11 diff --git a/src/qfr.egg-info/SOURCES.txt b/src/qfr.egg-info/SOURCES.txt new file mode 100644 index 0000000..8a694f9 --- /dev/null +++ b/src/qfr.egg-info/SOURCES.txt @@ -0,0 +1,12 @@ +README.md +pyproject.toml +src/qfr/__init__.py +src/qfr/factors.py +src/qfr/metrics.py +src/qfr.egg-info/PKG-INFO +src/qfr.egg-info/SOURCES.txt +src/qfr.egg-info/dependency_links.txt +src/qfr.egg-info/top_level.txt +src/qfr/data/__init__.py +src/qfr/data/tushare_client.py +src/qfr/strategy/etf_trend.py \ No newline at end of file diff --git a/src/qfr.egg-info/dependency_links.txt b/src/qfr.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/qfr.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/qfr.egg-info/top_level.txt b/src/qfr.egg-info/top_level.txt new file mode 100644 index 0000000..82c3cab --- /dev/null +++ b/src/qfr.egg-info/top_level.txt @@ -0,0 +1 @@ +qfr diff --git a/src/qfr/__init__.py b/src/qfr/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qfr/data/__init__.py b/src/qfr/data/__init__.py new file mode 100644 index 0000000..0db88ae --- /dev/null +++ b/src/qfr/data/__init__.py @@ -0,0 +1 @@ +"""Data access layer.""" diff --git a/src/qfr/data/tushare_client.py b/src/qfr/data/tushare_client.py new file mode 100644 index 0000000..9469e8c --- /dev/null +++ b/src/qfr/data/tushare_client.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import os +from dataclasses import dataclass + +import pandas as pd +from dotenv import load_dotenv + + +@dataclass(frozen=True) +class TushareConfig: + token: str + timeout: int = 30 + + +def load_tushare_config(env_path: str | None = None) -> TushareConfig: + if env_path: + load_dotenv(env_path) + else: + load_dotenv() + + token = os.getenv("TUSHARE_TOKEN", "").strip() + if not token: + raise RuntimeError("TUSHARE_TOKEN is required (set it in .env)") + + timeout_s = os.getenv("TUSHARE_TIMEOUT", "30").strip() or "30" + try: + timeout = int(timeout_s) + except ValueError: + timeout = 30 + + return TushareConfig(token=token, timeout=timeout) + + +def pro_api(cfg: TushareConfig): + import tushare as ts + + ts.set_token(cfg.token) + return ts.pro_api(timeout=cfg.timeout) + + +def fetch_stock_daily( + cfg: TushareConfig, + ts_code: str | None = None, + trade_date: str | None = None, + start_date: str | None = None, + end_date: str | None = None, + fields: str | None = None, +) -> pd.DataFrame: + api = pro_api(cfg) + return api.daily( + ts_code=ts_code, + trade_date=trade_date, + start_date=start_date, + end_date=end_date, + fields=fields, + ) + + +def fetch_fund_daily( + cfg: TushareConfig, + ts_code: str | None = None, + trade_date: str | None = None, + start_date: str | None = None, + end_date: str | None = None, + fields: str | None = None, +) -> pd.DataFrame: + """Fetch ETF/fund daily bars via Tushare Pro `fund_daily`.""" + api = pro_api(cfg) + return api.fund_daily( + ts_code=ts_code, + trade_date=trade_date, + start_date=start_date, + end_date=end_date, + fields=fields, + ) diff --git a/src/qfr/factors.py b/src/qfr/factors.py new file mode 100644 index 0000000..6ee95c2 --- /dev/null +++ b/src/qfr/factors.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +import pandas as pd + + +def winsorize_by_date(x: pd.Series, lower_q: float = 0.01, upper_q: float = 0.99) -> pd.Series: + """Winsorize cross-sectional values per date. + + Expects x to have a MultiIndex with level 0 as date, or a DatetimeIndex. + """ + if isinstance(x.index, pd.MultiIndex): + level = 0 + def _clip(s: pd.Series) -> pd.Series: + lo = s.quantile(lower_q) + hi = s.quantile(upper_q) + return s.clip(lo, hi) + out = x.groupby(level=level).apply(_clip) + # groupby(...).apply adds the group key as an extra outer index level + return out.droplevel(0) + + # single-index (treated as one cross section) + lo = x.quantile(lower_q) + hi = x.quantile(upper_q) + return x.clip(lo, hi) + + +def zscore_by_date(x: pd.Series) -> pd.Series: + """Z-score cross-sectional values per date.""" + if isinstance(x.index, pd.MultiIndex): + level = 0 + def _z(s: pd.Series) -> pd.Series: + std = s.std(ddof=0) + if std == 0 or pd.isna(std): + return s * 0 + return (s - s.mean()) / std + out = x.groupby(level=level).apply(_z) + return out.droplevel(0) + + std = x.std(ddof=0) + if std == 0 or pd.isna(std): + return x * 0 + return (x - x.mean()) / std diff --git a/src/qfr/metrics.py b/src/qfr/metrics.py new file mode 100644 index 0000000..5a5c21e --- /dev/null +++ b/src/qfr/metrics.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +import pandas as pd + + +def information_coefficient(factor: pd.Series, forward_return: pd.Series, method: str = "spearman") -> pd.Series: + """Compute per-date IC between factor and next-period return. + + Inputs should be aligned Series with a MultiIndex (date, asset). + Returns a Series indexed by date. + """ + if not isinstance(factor.index, pd.MultiIndex) or not isinstance(forward_return.index, pd.MultiIndex): + raise ValueError("factor and forward_return must be MultiIndex (date, asset)") + + df = pd.concat({"factor": factor, "ret": forward_return}, axis=1).dropna() + if df.empty: + return pd.Series(dtype=float) + + def _ic(g: pd.DataFrame) -> float: + if g["factor"].nunique() < 2 or g["ret"].nunique() < 2: + return float("nan") + return g["factor"].corr(g["ret"], method=method) + + return df.groupby(level=0).apply(_ic) diff --git a/src/qfr/strategy/etf_trend.py b/src/qfr/strategy/etf_trend.py new file mode 100644 index 0000000..0565ce2 --- /dev/null +++ b/src/qfr/strategy/etf_trend.py @@ -0,0 +1,584 @@ +from __future__ import annotations + +from dataclasses import dataclass + +import numpy as np +import pandas as pd + + +@dataclass(frozen=True) +class TrendParams: + # portfolio construction + max_positions: int = 3 + desired_positions_min: int = 2 + desired_positions_max: int = 3 + + # signal update frequency (days) + rebalance_every: int = 1 + + # event-driven replacement (avoid frequent weight tweaking) + replace_score_gap: float = 0.80 # replace weakest if candidate_score >= weakest_score + gap + max_replaces_per_day: int = 1 + + # trend filter: MA cross + sma_fast: int = 5 + sma_slow: int = 20 + + # exits (risk control) + atr_window: int = 14 + + # base chandelier stop (acts as trailing stop) + atr_mult: float = 3.2 + + # profit-protection: once a position is "in profit enough", tighten the trailing stop + profit_tighten_atr: float = 4.0 # activate when (highest_close-entry) >= this*ATR + atr_mult_profit: float = 2.0 # chandelier multiplier after activation + + # hard stop-loss from entry + stop_loss_atr: float = 3.2 # close < entry - stop_loss_atr*ATR + + # asymmetric risk control (fast-run style) + regime_confirm_days: int = 3 # require N consecutive days to switch regimes + bull_atr_mult: float = 3.2 # risk-on trailing stop multiplier + bear_atr_mult: float = 2.6 # risk-off trailing stop multiplier (tighter) + bear_stop_loss_atr: float = 2.6 # risk-off hard stop (tighter) + + asym_enabled: bool = False # default off: preserve baseline behavior + + # macro regime / market consistency (coarse, pandas/numpy native) + macro_min_breadth: float = 0.15 # min fraction of equity assets trend_ok + macro_down_frac: float = 0.80 # down-day breadth threshold to treat as consistent down + macro_scale_risk_off: float = 0.00 # compatibility (unused; event-driven allows empty) + + # anomaly exits + bias_window: int = 20 # compute bias vs this MA + bias_exit: float = 0.18 # abs(close/MA - 1) >= this => exit + + vol_short: int = 5 + vol_long: int = 20 + vol_ratio_exit: float = 3.0 # volume ratio short/long >= this => exit (blow-off) + + # ranking / entry filters + min_score: float = 0.3 + score_vol_denom_floor: float = 0.02 + trend_strength_weight: float = 0.60 + + # momentum score weights (focus on strong short/mid-term) + w_r5: float = 0.25 + w_r20: float = 0.45 + w_r60: float = 0.20 + w_r120: float = 0.10 + + # trading hygiene + min_history_days: int = 120 # new listing protection: require enough history + cooldown_days: int = 5 # after an exit, avoid immediate re-entry + min_hold_days: int = 3 # do not switch too fast (hard stops still apply) + + # churn controls + lazy_days: int = 5 # minimum days between switches (event-driven) + + # keep these fields for compatibility with older scripts + rebalance_band: float = 0.06 + vol_window: int = 20 + max_weight_per_asset: float = 0.90 + concentration_power: float = 2.2 + port_vol_window: int = 60 + target_ann_vol: float = 0.25 + new_asset_days: int = 30 + new_asset_max_w: float = 0.20 + + +@dataclass +class UniverseAsset: + ts_code: str + asset_class: str + name: str | None = None + + +def classify_asset(asset_class: str) -> str: + if asset_class.startswith("equity"): + return "equity" + if asset_class.startswith("rates"): + return "rates" + if asset_class.startswith("commodity"): + return "commodity" + return "other" + + +@dataclass +class Constraints: + max_positions: int = 3 + + # structural constraints (set to 0 for no restrictions) + must_commodity: int = 0 + must_rates: int = 0 + must_equity: int = 0 + + +def _sma(s: pd.Series, n: int) -> pd.Series: + return s.rolling(n, min_periods=n).mean() + + +def _true_range(high: pd.Series, low: pd.Series, close: pd.Series) -> pd.Series: + prev_close = close.shift(1) + tr1 = high - low + tr2 = (high - prev_close).abs() + tr3 = (low - prev_close).abs() + return pd.concat([tr1, tr2, tr3], axis=1).max(axis=1) + + +def _atr(high: pd.Series, low: pd.Series, close: pd.Series, n: int) -> pd.Series: + tr = _true_range(high, low, close) + return tr.rolling(n, min_periods=n).mean() + + +def compute_features(df: pd.DataFrame, params: TrendParams) -> pd.DataFrame: + out = df.copy() + out = out.sort_values("trade_date").reset_index(drop=True) + + close = out["close"].astype(float) + out["ret1"] = close.pct_change() + + for n in (5, 10, 20, 60, 120, 240): + out[f"r{n}"] = close / close.shift(n) - 1.0 + + out["ma_fast"] = _sma(close, params.sma_fast) + out["ma_slow"] = _sma(close, params.sma_slow) + out["trend_ok"] = out["ma_fast"] > out["ma_slow"] + + out["trend_strength"] = (out["ma_fast"] / out["ma_slow"] - 1.0).replace([np.inf, -np.inf], np.nan) + + out["ma_bias"] = _sma(close, params.bias_window) + out["bias"] = (close / out["ma_bias"] - 1.0).replace([np.inf, -np.inf], np.nan) + + if {"high", "low"}.issubset(out.columns): + high = out["high"].astype(float) + low = out["low"].astype(float) + out["atr"] = _atr(high, low, close, params.atr_window) + else: + out["atr"] = close.diff().abs().rolling(params.atr_window, min_periods=params.atr_window).mean() + + # volume/amount anomaly detection (Tushare fund_daily provides vol, amount) + if "amount" in out.columns: + amt = pd.to_numeric(out["amount"], errors="coerce") + out["amt_s"] = amt.rolling(params.vol_short, min_periods=params.vol_short).mean() + out["amt_l"] = amt.rolling(params.vol_long, min_periods=params.vol_long).mean() + out["vol_ratio"] = (out["amt_s"] / out["amt_l"]).replace([np.inf, -np.inf], np.nan) + elif "vol" in out.columns: + v = pd.to_numeric(out["vol"], errors="coerce") + out["amt_s"] = v.rolling(params.vol_short, min_periods=params.vol_short).mean() + out["amt_l"] = v.rolling(params.vol_long, min_periods=params.vol_long).mean() + out["vol_ratio"] = (out["amt_s"] / out["amt_l"]).replace([np.inf, -np.inf], np.nan) + else: + out["vol_ratio"] = np.nan + + # vol proxy for score normalization + ret1 = out["ret1"] + vol = ret1.rolling(params.vol_window, min_periods=params.vol_window).std() * np.sqrt(252.0) + out["vol"] = vol + + # additional scoring signals (no new hyper-params) + vol20 = ret1.rolling(20, min_periods=20).std() * np.sqrt(252.0) + out["vol20"] = vol20 + out["dd20"] = close / close.rolling(20, min_periods=20).max() - 1.0 + out["dd60"] = close / close.rolling(60, min_periods=60).max() - 1.0 + + # momentum score + score_raw = params.w_r5 * out["r5"] + params.w_r20 * out["r20"] + params.w_r60 * out["r60"] + params.w_r120 * out["r120"] + + # Add: (a) prefer closer to 20/60-day highs (less negative drawdown) + # and (b) modestly penalize high 20-day realized volatility. + score_raw = score_raw + 0.20 * params.w_r20 * out["dd20"] + 0.20 * params.w_r60 * out["dd60"] - 0.05 * out["vol20"] + + denom = vol.clip(lower=params.score_vol_denom_floor).replace([np.inf, -np.inf], np.nan) + score = score_raw / denom + params.trend_strength_weight * out["trend_strength"] + + out["score_raw"] = score_raw + out["score"] = score + + return out + + +def run_backtest( + prices: dict[str, pd.DataFrame], + universe: list[UniverseAsset], + constraints: Constraints, + params: TrendParams, + rates_fallback: str, + risk_proxy: str, +) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]: + feats: dict[str, pd.DataFrame] = {ts: compute_features(df, params) for ts, df in prices.items()} + + meta = {a.ts_code: a for a in universe} + + if risk_proxy not in feats: + eq = [a.ts_code for a in universe if classify_asset(a.asset_class) == "equity" and a.ts_code in feats] + if not eq: + raise RuntimeError(f"risk_proxy {risk_proxy} not in feats and no equity assets") + risk_proxy = eq[0] + + all_dates = feats[risk_proxy]["trade_date"].astype(str).sort_values().tolist() + if not all_dates: + raise RuntimeError("risk_proxy has no trade_date") + + close_px = pd.DataFrame(index=all_dates) + ret1 = pd.DataFrame(index=all_dates) + for ts, f in feats.items(): + g = f.set_index("trade_date").reindex(all_dates) + close_px[ts] = g["close"].astype(float) + ret1[ts] = close_px[ts].pct_change().fillna(0.0) + + weights = pd.DataFrame(0.0, index=all_dates, columns=close_px.columns) + + # state + in_pos: list[str] = [] + highest_close: dict[str, float] = {} + entry_price: dict[str, float] = {} + entry_idx: dict[str, int] = {} + cooldown_until: dict[str, int] = {} + last_switch_idx = -10**9 + + # regime state (macro risk-off) with confirmation to avoid daily flip-flops + risk_off_state = False + risk_off_streak = 0 + risk_on_streak = 0 + + # first valid index per asset + first_valid_idx: dict[str, int] = {} + for ts, f in feats.items(): + ok = f[["ma_fast", "ma_slow", "vol", "score"]].notna().all(axis=1) + valid_dates = f.loc[ok, "trade_date"].astype(str).tolist() + if not valid_dates: + continue + d0 = valid_dates[0] + try: + first_valid_idx[ts] = all_dates.index(d0) + except ValueError: + pass + + atr_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["atr"].astype(float) for ts in close_px.columns} + mf_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["ma_fast"].astype(float) for ts in close_px.columns} + ms_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["ma_slow"].astype(float) for ts in close_px.columns} + bias_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["bias"].astype(float) for ts in close_px.columns} + vr_map = {ts: feats[ts].set_index("trade_date").reindex(all_dates)["vol_ratio"].astype(float) for ts in close_px.columns} + + trades: list[dict[str, object]] = [] + + def can_trade(ts: str, i: int) -> bool: + fv = first_valid_idx.get(ts) + if fv is None: + return False + if i < fv + params.min_history_days: + return False + cu = cooldown_until.get(ts) + if cu is not None and i < cu: + return False + return True + + def current_holdings_from_weights(d: str) -> list[str]: + return [ts for ts in weights.columns if ts != rates_fallback and float(weights.loc[d, ts]) > 1e-12] + + def set_portfolio(d: str, new_hold: list[str], reason: str) -> None: + # equal weight among holdings; remainder to rates_fallback + w = pd.Series(0.0, index=weights.columns) + k = len(new_hold) + if k > 0: + w_per = 1.0 / k + for ts in new_hold: + if ts in w.index: + w.loc[ts] = w_per + rem = 1.0 - float(w.sum()) + if rem > 1e-12 and rates_fallback in w.index: + w.loc[rates_fallback] += rem + + prev = pd.Series(0.0, index=weights.columns) + if d != all_dates[0]: + prev = weights.loc[all_dates[all_dates.index(d) - 1]].copy() + + weights.loc[d] = w + + for ts in weights.columns: + if ts == rates_fallback: + continue + w0 = float(prev.loc[ts]) + w1 = float(w.loc[ts]) + if abs(w1 - w0) <= 1e-12: + continue + side = "BUY" if w1 > w0 else "SELL" + trades.append( + { + "trade_date": d, + "ts_code": ts, + "side": side, + "reason": reason, + "weight_before": w0, + "weight_after": w1, + "price": float(close_px.loc[d, ts]), + } + ) + + for i, d in enumerate(all_dates): + if i > 0: + weights.loc[d] = weights.iloc[i - 1] + + # update trailing highest close + for ts in list(in_pos): + c = float(close_px.loc[d, ts]) + if np.isfinite(c): + highest_close[ts] = max(highest_close.get(ts, c), c) + + allow_ts = {ts for ts in close_px.columns if can_trade(ts, i)} + + # snapshot (vectorized via reindex on date) + snap_rows = [] + for ts, f in feats.items(): + g = f.set_index("trade_date") + if d not in g.index: + continue + r = g.loc[d] + snap_rows.append( + ( + ts, + bool(r.get("trend_ok")) if pd.notna(r.get("trend_ok")) else False, + float(r.get("score")) if pd.notna(r.get("score")) else float("nan"), + ) + ) + snap = pd.DataFrame(snap_rows, columns=["ts_code", "trend_ok", "score"]).set_index("ts_code") + snap = snap[snap.index.isin(list(allow_ts))] + + # consistency-aware timing: only go risk-off when proxy trend down AND the market is consistently down + proxy_mf = float(mf_map[risk_proxy].loc[d]) + proxy_ms = float(ms_map[risk_proxy].loc[d]) + proxy_down = np.isfinite(proxy_mf) and np.isfinite(proxy_ms) and (proxy_mf < proxy_ms) + + eq_all = [ts for ts, a in meta.items() if classify_asset(a.asset_class) == "equity" and ts in snap.index] + breadth = 1.0 + down_frac = 0.0 + if eq_all: + ok = snap.loc[eq_all, "trend_ok"].fillna(False) + breadth = float(ok.mean()) + rets = ret1.loc[d, eq_all].fillna(0.0) + down_frac = float((rets < 0).mean()) + + consistent_down = proxy_down and (breadth < params.macro_min_breadth) and (down_frac >= params.macro_down_frac) + + # Confirm regime shifts to avoid whipsaw switching + if consistent_down: + risk_off_streak += 1 + risk_on_streak = 0 + else: + risk_on_streak += 1 + risk_off_streak = 0 + + if (not risk_off_state) and risk_off_streak >= int(params.regime_confirm_days): + risk_off_state = True + elif risk_off_state and risk_on_streak >= int(params.regime_confirm_days): + risk_off_state = False + + if not params.asym_enabled: + # Preserve baseline: use raw consistent_down + risk_off = consistent_down + else: + risk_off = risk_off_state + + # DAILY EXITS (hard) + sold_any = False + for ts in list(in_pos): + c = float(close_px.loc[d, ts]) + mf = float(mf_map[ts].loc[d]) + ms = float(ms_map[ts].loc[d]) + atr = float(atr_map[ts].loc[d]) + h = highest_close.get(ts, c) + epx = entry_price.get(ts, c) + e_i = entry_idx.get(ts, i) + + trend_break = np.isfinite(mf) and np.isfinite(ms) and (mf < ms) + if trend_break and (i - e_i) < params.min_hold_days: + trend_break = False + + if params.asym_enabled: + base_mult = params.bear_atr_mult if risk_off else params.bull_atr_mult + use_mult = base_mult + else: + use_mult = params.atr_mult + if np.isfinite(atr) and (h - epx) >= params.profit_tighten_atr * atr: + use_mult = min(use_mult, params.atr_mult_profit) + + chand_break = np.isfinite(atr) and c < (h - use_mult * atr) + if params.asym_enabled: + sl_atr = params.bear_stop_loss_atr if risk_off else params.stop_loss_atr + else: + sl_atr = params.stop_loss_atr + stop_loss = np.isfinite(atr) and c < (epx - sl_atr * atr) + + bias = float(bias_map[ts].loc[d]) + vr = float(vr_map[ts].loc[d]) + bias_exit = np.isfinite(bias) and abs(bias) >= params.bias_exit + vr_exit = np.isfinite(vr) and vr >= params.vol_ratio_exit + + if trend_break or chand_break or stop_loss or bias_exit or vr_exit: + in_pos.remove(ts) + sold_any = True + highest_close.pop(ts, None) + entry_price.pop(ts, None) + entry_idx.pop(ts, None) + cooldown_until[ts] = i + params.cooldown_days + + if risk_off and in_pos: + for ts in list(in_pos): + cooldown_until[ts] = i + params.cooldown_days + in_pos = [] + sold_any = True + + if sold_any: + set_portfolio(d, in_pos, reason="exit") + + # ENTRY / SWITCH: do not churn - only allow switching every lazy_days + if risk_off: + continue + if (i - last_switch_idx) < int(params.lazy_days): + continue + + cand = snap.copy() + cand = cand[cand["trend_ok"].fillna(False)] + cand = cand[cand["score"].fillna(float("-inf")) >= params.min_score] + if cand.empty: + continue + cand = cand.sort_values("score", ascending=False) + + # Diversification constraint: avoid holding multiple highly-correlated assets. + # We gate additions using both 60d and 120d return correlations with a fallback ladder + # to ensure we can still reach desired_positions_min in highly synchronous regimes. + def _build_corr(window: int) -> pd.DataFrame | None: + if i < window: + return None + sub = ret1.iloc[max(0, i - window + 1) : i + 1] + # corr() handles NaNs pairwise; we treat missing pairs as uncorrelated later. + return sub.corr() + + corr60 = _build_corr(60) + corr120 = _build_corr(120) + + def _max_corr(a: str, b: str, use_short: bool, use_long: bool) -> float: + v = float("-inf") + if use_short and corr60 is not None and a in corr60.index and b in corr60.columns: + x = corr60.at[a, b] + if pd.notna(x): + v = max(v, float(x)) + if use_long and corr120 is not None and a in corr120.index and b in corr120.columns: + x = corr120.at[a, b] + if pd.notna(x): + v = max(v, float(x)) + return v + + def _passes_corr(ts: str, held: list[str], thr: float, use_short: bool, use_long: bool, max_buddies: int) -> bool: + if not held: + return True + buddies = 0 + for h in held: + if _max_corr(ts, h, use_short=use_short, use_long=use_long) >= thr: + buddies += 1 + if buddies > max_buddies: + return False + return True + + # Fallback ladder (route D): + # L0-L2 relax threshold; L3 ignore short-term corr; L4 allow one correlated buddy; L5 disable gating. + _policies = [ + dict(thr=0.95, use_short=True, use_long=True, max_buddies=0), + dict(thr=0.93, use_short=True, use_long=True, max_buddies=0), + dict(thr=0.90, use_short=True, use_long=True, max_buddies=0), + dict(thr=0.90, use_short=False, use_long=True, max_buddies=0), + dict(thr=0.90, use_short=False, use_long=True, max_buddies=1), + dict(thr=-1.0, use_short=False, use_long=False, max_buddies=10**9), + ] + _policy_idx = 0 + + changed = False + + # fill up to desired min (do not apply correlation gating here; keep baseline behavior) + while len(in_pos) < int(params.desired_positions_min): + nxt = None + for ts in cand.index.tolist(): + if ts in in_pos: + continue + nxt = ts + break + if nxt is None: + break + in_pos.append(nxt) + c = float(close_px.loc[d, nxt]) + entry_price[nxt] = c + entry_idx[nxt] = i + highest_close[nxt] = c + changed = True + + desired_max = min(int(params.max_positions), max(int(params.desired_positions_min), int(params.desired_positions_max))) + + # add up to desired max (no corr gating; corr is applied replacement-only) + while len(in_pos) < desired_max: + nxt = None + for ts in cand.index.tolist(): + if ts in in_pos: + continue + nxt = ts + break + if nxt is None: + break + + in_pos.append(nxt) + c = float(close_px.loc[d, nxt]) + entry_price[nxt] = c + entry_idx[nxt] = i + highest_close[nxt] = c + changed = True + + # replacement (single) + if len(in_pos) == desired_max and int(params.max_replaces_per_day) > 0: + held_scores = {ts: float(cand.loc[ts, "score"]) if ts in cand.index else float("-inf") for ts in in_pos} + weak = min(held_scores.items(), key=lambda x: x[1])[0] + weak_score = float(held_scores.get(weak, float("-inf"))) + + best = None + best_score = float("-inf") + pol_rep = _policies[_policy_idx] + held_after = [x for x in in_pos if x != weak] + for ts in cand.index.tolist(): + if ts in in_pos: + continue + if not _passes_corr(ts, held_after, thr=float(pol_rep["thr"]), use_short=bool(pol_rep["use_short"]), use_long=bool(pol_rep["use_long"]), max_buddies=int(pol_rep["max_buddies"])): + continue + sc = float(cand.loc[ts, "score"]) if pd.notna(cand.loc[ts, "score"]) else float("-inf") + if sc > best_score: + best_score = sc + best = ts + + if best is not None and np.isfinite(best_score) and best_score >= (weak_score + float(params.replace_score_gap)): + in_pos = [ts for ts in in_pos if ts != weak] + cooldown_until[weak] = i + params.cooldown_days + highest_close.pop(weak, None) + entry_price.pop(weak, None) + entry_idx.pop(weak, None) + + in_pos.append(best) + c = float(close_px.loc[d, best]) + entry_price[best] = c + entry_idx[best] = i + highest_close[best] = c + changed = True + + cur_hold = current_holdings_from_weights(d) + if set(cur_hold) != set(in_pos): + set_portfolio(d, in_pos, reason="switch") + last_switch_idx = i + + # apply 1-day lag + w_lag = weights.shift(1).fillna(0.0) + port_ret = (ret1 * w_lag).sum(axis=1) + equity = (1.0 + port_ret).cumprod().to_frame("equity") + + trades_df = pd.DataFrame(trades) + if not trades_df.empty: + trades_df = trades_df.sort_values(["trade_date", "ts_code"]).reset_index(drop=True) + + return equity, weights, trades_df diff --git a/web/db.sqlite3 b/web/db.sqlite3 new file mode 100644 index 0000000..e69de29 diff --git a/web/django.log b/web/django.log new file mode 100644 index 0000000..ee6b12b --- /dev/null +++ b/web/django.log @@ -0,0 +1,23 @@ +[06/Mar/2026 16:51:04] "GET /lab/top-trials?limit=3 HTTP/1.1" 200 5202 +[06/Mar/2026 16:51:04] "GET /lab/best-artifacts?limit=1 HTTP/1.1" 200 5103 +[06/Mar/2026 16:52:31] "GET /lab/top-trials HTTP/1.1" 200 22279 +Not Found: /favicon.ico +[06/Mar/2026 16:52:32] "GET /favicon.ico HTTP/1.1" 404 2643 +[06/Mar/2026 16:53:04] "GET / HTTP/1.1" 200 395 +[06/Mar/2026 16:53:06] "GET /lab/best-artifacts HTTP/1.1" 200 5103 +[06/Mar/2026 16:53:09] "GET / HTTP/1.1" 200 395 +[06/Mar/2026 16:53:11] "GET /lab/top-trials HTTP/1.1" 200 22279 +[06/Mar/2026 16:53:40] "GET / HTTP/1.1" 200 395 +[06/Mar/2026 16:53:42] "GET /lab/top-trials HTTP/1.1" 200 22279 +[06/Mar/2026 16:53:43] "GET / HTTP/1.1" 200 395 +[06/Mar/2026 16:53:44] "GET /lab/best-artifacts HTTP/1.1" 200 5103 +[06/Mar/2026 16:54:01] "GET / HTTP/1.1" 200 395 +[07/Mar/2026 08:00:05] "GET / HTTP/1.1" 200 395 +[07/Mar/2026 08:06:46] "GET / HTTP/1.1" 200 395 +[07/Mar/2026 08:07:44] "GET / HTTP/1.1" 200 395 +[07/Mar/2026 08:08:43] "GET /lab/top-trials HTTP/1.1" 200 22445 +[07/Mar/2026 08:09:07] "GET / HTTP/1.1" 200 395 +[07/Mar/2026 08:24:56] "GET / HTTP/1.1" 200 395 +[09/Mar/2026 16:39:05] "GET / HTTP/1.1" 200 395 +[09/Mar/2026 16:39:08] "GET / HTTP/1.1" 200 395 +[11/Mar/2026 15:40:28] "GET / HTTP/1.1" 200 395 diff --git a/web/django.pid b/web/django.pid new file mode 100644 index 0000000..df7fda0 --- /dev/null +++ b/web/django.pid @@ -0,0 +1 @@ +1503125 diff --git a/web/lab/__init__.py b/web/lab/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/lab/admin.py b/web/lab/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/web/lab/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/web/lab/apps.py b/web/lab/apps.py new file mode 100644 index 0000000..f835608 --- /dev/null +++ b/web/lab/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class LabConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'lab' diff --git a/web/lab/migrations/__init__.py b/web/lab/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/lab/models.py b/web/lab/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/web/lab/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/web/lab/templates/lab/best_artifacts.html b/web/lab/templates/lab/best_artifacts.html new file mode 100644 index 0000000..e098def --- /dev/null +++ b/web/lab/templates/lab/best_artifacts.html @@ -0,0 +1,43 @@ + + + + + Best Artifacts + + + +

Best Artifacts

+

limit={{ limit }}

+

Home

+ + + + + + + + + {% for r in rows %} + + + + + + + + + + + + + + {% endfor %} + +
idts_utcann_returnann_volmax_ddtpyequityweightstradesconfigparams
{{ r.id }}{{ r.ts_utc }}{{ r.ann_return }}{{ r.ann_vol }}{{ r.max_drawdown }}{{ r.trades_per_year }}{{ r.out_equity }}{{ r.out_weights }}{{ r.out_trades }}{{ r.config_path }}
{{ r.params_json }}
+ + diff --git a/web/lab/templates/lab/index.html b/web/lab/templates/lab/index.html new file mode 100644 index 0000000..b714296 --- /dev/null +++ b/web/lab/templates/lab/index.html @@ -0,0 +1,15 @@ + + + + + QFR Lab + + +

QFR Lab

+

Experiments DB: {{ db_path }}

+ + + diff --git a/web/lab/templates/lab/top_trials.html b/web/lab/templates/lab/top_trials.html new file mode 100644 index 0000000..799431c --- /dev/null +++ b/web/lab/templates/lab/top_trials.html @@ -0,0 +1,42 @@ + + + + + Top Trials + + + +

Top Trials (ann_return)

+

Summary: {{ summary }}

+

limit={{ limit }}

+

Home

+ + + + + + + + + + {% for r in rows %} + + + + + + + + + + + + {% endfor %} + +
idann_returnann_volmax_drawdownsharpetpyts_utcrun_idconfig
{{ r.id }}{{ r.ann_return }}{{ r.ann_vol }}{{ r.max_drawdown }}{{ r.sharpe }}{{ r.trades_per_year }}{{ r.ts_utc }}{{ r.run_id }}{{ r.config_path }}
+ + diff --git a/web/lab/tests.py b/web/lab/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/web/lab/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/web/lab/urls.py b/web/lab/urls.py new file mode 100644 index 0000000..8ab9ef0 --- /dev/null +++ b/web/lab/urls.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from django.urls import path + +from . import views + +urlpatterns = [ + path("", views.index, name="index"), + path("lab/top-trials", views.top_trials, name="top_trials"), + path("lab/best-artifacts", views.best_artifacts, name="best_artifacts"), +] diff --git a/web/lab/views.py b/web/lab/views.py new file mode 100644 index 0000000..7e5bd4a --- /dev/null +++ b/web/lab/views.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +import sqlite3 +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +from django.conf import settings +from django.http import HttpRequest, HttpResponse +from django.shortcuts import render + + +@dataclass +class TrialRow: + ann_return: float | None + ann_vol: float | None + max_drawdown: float | None + sharpe: float | None + trades_per_year: float | None + ts_utc: str | None + run_id: str | None + config_path: str | None + + +def _db_path() -> Path: + return Path(getattr(settings, "QFR_EXPERIMENTS_DB")) + + +def _connect() -> sqlite3.Connection: + con = sqlite3.connect(str(_db_path())) + con.row_factory = sqlite3.Row + return con + + +def index(request: HttpRequest) -> HttpResponse: + return render( + request, + "lab/index.html", + { + "db_path": str(_db_path()), + }, + ) + + +def top_trials(request: HttpRequest) -> HttpResponse: + limit = int(request.GET.get("limit", "50")) + limit = max(10, min(500, limit)) + + rows: list[dict[str, Any]] = [] + summary: dict[str, Any] = {} + with _connect() as con: + cur = con.execute( + """ + SELECT ann_return, ann_vol, max_drawdown, sharpe, trades_per_year, ts_utc, run_id, config_path + FROM trials + WHERE ann_return IS NOT NULL + ORDER BY ann_return DESC + LIMIT ? + """, + (limit,), + ) + rows = [dict(r) for r in cur.fetchall()] + + cur2 = con.execute( + """ + SELECT + COUNT(*) AS n, + MAX(ann_return) AS best_ann, + MIN(max_drawdown) AS worst_dd, + MIN(trades_per_year) AS min_tpy, + MAX(trades_per_year) AS max_tpy + FROM trials + """ + ) + summary = dict(cur2.fetchone()) + + return render( + request, + "lab/top_trials.html", + { + "rows": rows, + "summary": summary, + "limit": limit, + }, + ) + + +def best_artifacts(request: HttpRequest) -> HttpResponse: + limit = int(request.GET.get("limit", "50")) + limit = max(10, min(500, limit)) + + rows: list[dict[str, Any]] = [] + with _connect() as con: + cur = con.execute( + """ + SELECT id, ts_utc, config_path, out_equity, out_weights, out_trades, + ann_return, ann_vol, max_drawdown, trades_per_year, params_json + FROM best_artifacts + ORDER BY id DESC + LIMIT ? + """, + (limit,), + ) + rows = [dict(r) for r in cur.fetchall()] + + return render( + request, + "lab/best_artifacts.html", + { + "rows": rows, + "limit": limit, + }, + ) diff --git a/web/manage.py b/web/manage.py new file mode 100755 index 0000000..b1d9cbf --- /dev/null +++ b/web/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'qfrweb.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/web/qfrweb/__init__.py b/web/qfrweb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web/qfrweb/asgi.py b/web/qfrweb/asgi.py new file mode 100644 index 0000000..059ce64 --- /dev/null +++ b/web/qfrweb/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for qfrweb project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'qfrweb.settings') + +application = get_asgi_application() diff --git a/web/qfrweb/settings.py b/web/qfrweb/settings.py new file mode 100644 index 0000000..5104f21 --- /dev/null +++ b/web/qfrweb/settings.py @@ -0,0 +1,127 @@ +""" +Django settings for qfrweb project. + +Generated by 'django-admin startproject' using Django 5.0.3. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-mi&&j81fxs8ni#1x%9y64h0^k+&@7xd*=q-5=4_i@+dasay7q1' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ["*"] + + +# Application definition + +INSTALLED_APPS = [ + "lab", + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'qfrweb.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'qfrweb.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Asia/Shanghai' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.0/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# QFR +QFR_EXPERIMENTS_DB = BASE_DIR.parent / 'data' / 'experiments.sqlite' diff --git a/web/qfrweb/urls.py b/web/qfrweb/urls.py new file mode 100644 index 0000000..14722cf --- /dev/null +++ b/web/qfrweb/urls.py @@ -0,0 +1,23 @@ +""" +URL configuration for qfrweb project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path("", include("lab.urls")), + path('admin/', admin.site.urls), +] diff --git a/web/qfrweb/wsgi.py b/web/qfrweb/wsgi.py new file mode 100644 index 0000000..3a3d3a1 --- /dev/null +++ b/web/qfrweb/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for qfrweb project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'qfrweb.settings') + +application = get_wsgi_application()