From 07c6288c7a41df566883e5ed976e94556cc753d2 Mon Sep 17 00:00:00 2001 From: Anto Date: Mon, 30 Mar 2026 15:12:41 +0200 Subject: [PATCH 01/10] feat: first commit --- .cursor/rules/coding-conventions.mdc | 21 + .cursor/rules/project-overview.mdc | 136 ++ .cursor/rules/testing-conventions.mdc | 25 + .dockerignore | 5 + .env.example | 12 + .github/SECURITY.md | 3 + .github/workflows/ci.yml | 68 + .github/workflows/lint.yml | 46 + .gitignore | 4 + Dockerfile | 15 + LICENSE | 21 + README.md | 202 ++ TODO.md | 25 + eslint.config.js | 49 + example.docker-compose.yaml | 7 + grafana/dashboard.json | 2722 ++++++++++++++++++++++ grafana/preview.png | Bin 0 -> 160046 bytes package-lock.json | 2025 ++++++++++++++++ package.json | 30 + src/abis.js | 70 + src/chain.js | 19 + src/config.js | 214 ++ src/grafana/build.ts | 218 ++ src/grafana/dashboard.ts | 561 +++++ src/grafana/panels.ts | 166 ++ src/index.js | 177 ++ src/metrics/definitions.js | 234 ++ src/metrics/server.js | 31 + src/monitors/efficiencyMonitor.js | 24 + src/monitors/healthMonitor.js | 33 + src/monitors/vaultMonitor.js | 382 +++ src/monitors/withdrawalMonitor.js | 12 + src/networks.json | 20 + src/notifications/discord.js | 191 ++ tests/abis.test.js | 25 + tests/config.test.js | 134 ++ tests/grafana/build.test.ts | 36 + tests/grafana/dashboard.test.ts | 40 + tests/grafana/panels.test.ts | 43 + tests/metrics/definitions.test.js | 46 + tests/metrics/server.test.js | 21 + tests/monitors/efficiencyMonitor.test.js | 21 + tests/monitors/healthMonitor.test.js | 33 + tests/monitors/vaultMonitor.test.js | 229 ++ tests/monitors/withdrawalMonitor.test.js | 12 + tests/notifications/discord.test.js | 138 ++ 46 files changed, 8546 insertions(+) create mode 100644 .cursor/rules/coding-conventions.mdc create mode 100644 .cursor/rules/project-overview.mdc create mode 100644 .cursor/rules/testing-conventions.mdc create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .github/SECURITY.md create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 TODO.md create mode 100644 eslint.config.js create mode 100644 example.docker-compose.yaml create mode 100644 grafana/dashboard.json create mode 100644 grafana/preview.png create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/abis.js create mode 100644 src/chain.js create mode 100644 src/config.js create mode 100644 src/grafana/build.ts create mode 100644 src/grafana/dashboard.ts create mode 100644 src/grafana/panels.ts create mode 100644 src/index.js create mode 100644 src/metrics/definitions.js create mode 100644 src/metrics/server.js create mode 100644 src/monitors/efficiencyMonitor.js create mode 100644 src/monitors/healthMonitor.js create mode 100644 src/monitors/vaultMonitor.js create mode 100644 src/monitors/withdrawalMonitor.js create mode 100644 src/networks.json create mode 100644 src/notifications/discord.js create mode 100644 tests/abis.test.js create mode 100644 tests/config.test.js create mode 100644 tests/grafana/build.test.ts create mode 100644 tests/grafana/dashboard.test.ts create mode 100644 tests/grafana/panels.test.ts create mode 100644 tests/metrics/definitions.test.js create mode 100644 tests/metrics/server.test.js create mode 100644 tests/monitors/efficiencyMonitor.test.js create mode 100644 tests/monitors/healthMonitor.test.js create mode 100644 tests/monitors/vaultMonitor.test.js create mode 100644 tests/monitors/withdrawalMonitor.test.js create mode 100644 tests/notifications/discord.test.js diff --git a/.cursor/rules/coding-conventions.mdc b/.cursor/rules/coding-conventions.mdc new file mode 100644 index 0000000..bb45296 --- /dev/null +++ b/.cursor/rules/coding-conventions.mdc @@ -0,0 +1,21 @@ +--- +description: Coding conventions for stvaults-watcher +globs: src/**/*.js +alwaysApply: false +--- + +# Coding conventions + +- **Language**: JavaScript ESM (`"type": "module"` in package.json). No TypeScript in `src/**/*.js`. **`src/grafana/**` is TypeScript** (Grafana Foundation SDK); run `npm run grafana:build` for `grafana/dashboard.json`. +- **Runtime**: Node.js 24+. Use native `fetch`, `crypto`, `http` - avoid unnecessary dependencies. +- **On-chain reads**: Use viem `readContract` with human-readable ABIs from `src/abis.js`. +- **Metrics**: prom-client Gauges/Counters. Labels: `vault`, `vault_name`, `chain`. Values in ETH (divide wei by 1e18), not raw wei. +- **Logs**: Use `console.log('INFO msg')` / `console.log('WARN msg')` / `console.log('ERROR msg')`. Always use `console.log` (never `console.warn`/`console.error`) so all output goes to stdout. This ensures Docker labels all lines as `stream=stdout` and Loki can detect the level reliably. +- **Comments**: Only for non-obvious intent. English for code (variables, functions, comments). User-facing messages (Discord alerts) in English. +- **Config**: All configuration via env vars loaded in `src/config.js`. Required vars throw on missing. Optional vars have defaults. +- **Error handling**: WithdrawalQueue reads wrapped in try/catch (contract may revert when queue is empty). Individual Discord alert sends wrapped in `.catch()` to not break the poll loop. +- **No write operations**: This watcher is read-only. Never send transactions. + +## Living documentation + +When conventions change, update this file and `.cursor/rules/project-overview.mdc` accordingly. These rules must always reflect the current state of the project. diff --git a/.cursor/rules/project-overview.mdc b/.cursor/rules/project-overview.mdc new file mode 100644 index 0000000..644b7b7 --- /dev/null +++ b/.cursor/rules/project-overview.mdc @@ -0,0 +1,136 @@ +--- +description: stvaults-watcher project overview and architecture +alwaysApply: true +--- + +# stvaults-watcher + +Node.js 24 ESM app that monitors Lido V3 stVaults with DeFi Wrapper pools. Runs in Docker, exposes Prometheus metrics, sends Discord alerts. + +## Architecture + +- **Polling loop** (`src/index.js`): Every `POLL_INTERVAL_MIN` minutes reads on-chain data via viem, updates Prometheus gauges, evaluates alert conditions, sends Discord webhooks. +- **No CLI dependency**: All reads are direct contract calls via viem. Lido CLI is only used by the operator separately for write operations (finalize withdrawals, submit reports, exit validators). + +## Key files + +| File | Purpose | +|------|---------| +| `src/index.js` | Entry point, polling loop, alert evaluation, graceful shutdown | +| `src/config.js` | Loads and validates env vars; resolves network constants from `networks.json` | +| `src/networks.json` | Per-network constants: chainId, explorerUrl, Lido contract addresses (vaultHub, stEth, pdg) | +| `src/chain.js` | Creates viem `publicClient` | +| `src/abis.js` | Human-readable ABIs (one-liner per method) for VaultHub, StakingVault, WithdrawalQueue, Pool, stETH | +| `src/monitors/vaultMonitor.js` | Orchestrator: reads all contract data, updates metrics, returns snapshots for alerting | +| `src/monitors/healthMonitor.js` | Health factor and utilization ratio computation | +| `src/monitors/efficiencyMonitor.js` | Inactive ETH detection (available - staged) | +| `src/monitors/withdrawalMonitor.js` | Withdrawal queue helpers | +| `src/metrics/definitions.js` | All Prometheus Gauge/Counter definitions (`vault` metrics use `vault`, `vault_name`, `chain`; watcher/contract-info metrics use their own label sets) | +| `src/metrics/server.js` | HTTP server on `/metrics` (native `http` module) | +| `src/notifications/discord.js` | Discord embeds with per-alert-type cooldown | +| `src/grafana/panels.ts` | Reusable panel builder helpers (statPanel, timeseriesPanel) | +| `src/grafana/dashboard.ts` | Dashboard definition (config-driven rows + panels) | +| `src/grafana/build.ts` | Script that compiles dashboard to `grafana/dashboard.json` | + +## Grafana dashboard + +Dashboard is defined as code in `src/grafana/` using the [Grafana Foundation SDK](https://grafana.com/docs/grafana/latest/observability-as-code/foundation-sdk) (TypeScript). Run `npm run grafana:build` at repo root to compile to `grafana/dashboard.json`. On import, Grafana prompts for **Prometheus** and **Loki** via `__inputs` (`DS_PROMETHEUS`, `DS_LOKI`) injected by `src/grafana/build.ts`. Panel datasources reference `${DS_PROMETHEUS}` / `${DS_LOKI}` (`DATASOURCE_VAR` in `src/grafana/panels.ts`, `LOKI_DS_VAR` in `src/grafana/dashboard.ts`). Template variables at runtime: **Chain**, **Vault**, etc. — not datasource pickers in the row. + +## Contracts read + +- **VaultHub** (global): `isVaultHealthy`, `healthShortfallShares`, `liabilityShares`, `totalMintingCapacityShares`, `isReportFresh`, `withdrawableValue`, `totalValue` +- **stETH** (global): `getPooledEthByShares` (converts liability shares AND minting capacity shares to ETH) +- **StakingVault** (per vault): `availableBalance`, `stagedBalance`, `nodeOperator` +- **WithdrawalQueue** (auto-discovered from pool): `unfinalizedRequestsNumber`, `unfinalizedAssets`, `getLastRequestId`, `getLastFinalizedRequestId` +- **Pool** (per vault): `WITHDRAWAL_QUEUE()`, `DASHBOARD()` (called once at startup for auto-discovery) +- **Dashboard** (per vault): `accruedFee`, `pdgPolicy` +- **PredepositGuarantee** (global): `nodeOperatorBalance`, `unlockedBalance`, `pendingActivations` + +## Metrics + +All values in ETH (not wei) unless the metric name indicates shares, IDs, or counters. Most gauges use labels `vault`, `vault_name`, `chain` (mainnet/hoodi). **Full list:** root `README.md` § Metrics. + +Highlighted PDG-related gauges: +- `lido_vault_node_operator_fee_eth`: Undisbursed node operator fee in ETH from `Dashboard.accruedFee()`. +- `lido_vault_pdg_total_eth`: Total PDG guarantee balance in ETH. +- `lido_vault_pdg_locked_eth`: PDG guarantee currently locked by active predeposits. +- `lido_vault_pdg_unlocked_eth`: PDG guarantee available for new predeposits. +- `lido_vault_pdg_pending_activations`: Validators pending activation in PDG flow. +- `lido_vault_pdg_policy`: Dashboard PDG policy enum (`0=STRICT`, `1=ALLOW_PROVE`, `2=ALLOW_DEPOSIT_AND_PROVE`). + +## Alerts (Discord) + +Only when `DISCORD_WEBHOOK_URL` is set. No recovery messages. Cooldown per alert type per vault (`ALERT_COOLDOWN_MIN`, default 30 min). Severities: warning (yellow), critical (red). Implemented in `src/index.js` + `src/notifications/discord.js`. + +- **Inactive ETH**: inactive buffer above `INACTIVE_ETH_THRESHOLD`. +- **Withdrawal Requests Pending**: `unfinalizedRequests > 0` (shows pending ETH, vault balance, deficit context where applicable). +- **Health — warning**: health factor below `HEALTH_WARNING_THRESHOLD` (and not in critical branch). +- **Health — critical**: health factor below `HEALTH_CRITICAL_THRESHOLD`. +- **Forced rebalance**: `healthShortfallShares > 0` and not `MAX_UINT256` sentinel. +- **Utilization high**: utilization at or above `UTILIZATION_WARNING_THRESHOLD`. +- **Vault unhealthy**: `!isHealthy` from VaultHub. + +## Metrics – special + +- `lido_vault_contracts_info` (labels: `vault_addr`, `pool_addr`, `wq_addr`, `dashboard_addr`, `vault_name`, `chain`): Set once at startup. Carries contract addresses for dashboard display. + +## Config + +Required env vars: `RPC_URL`, `CHAIN`, `VAULT_CONFIGS`. See `.env.example`. + +`CHAIN` accepts `mainnet` or `hoodi`. Chain ID and all Lido contract addresses (VaultHub, stETH, PDG) are resolved automatically from `src/networks.json` — no need to set them in the env. + +`VAULT_CONFIGS` is a JSON array. Each entry requires `vault` and `vault_name`. `pool` is optional. Vaults without a DeFi Wrapper pool skip WQ/dashboard **auto**-discovery; all VaultHub and StakingVault metrics still work. `withdrawalQueue` and `dashboard` can be set manually even without `pool`. + +Optional env (not in `.env.example`): e.g. `UTILIZATION_WARNING_THRESHOLD` (default `95`) — see `src/config.js` and root `README.md` § Configuration. + +## Network addresses + +Lido protocol addresses are defined in `src/networks.json` and loaded automatically based on `CHAIN`. + +### Hoodi + +- VaultHub: `0x4C9fFC325392090F789255b9948Ab1659b797964` +- stETH: `0x3508A952176b3c15387C97BE809eaffB1982176a` +- PDG: `0xa5F55f3402beA2B14AE15Dae1b6811457D43581d` +- Vault (Stakely): `0xC821709e31a9Dc9de2d56e332b031ee841CAa420` +- Pool: `0xC6B9509E24F9aE488eDd3dCD488559f85678C552` +- Strategy: `0xbF4797De82787A60101e5e45CEc7f29b27d83D98` + +### Mainnet + +- VaultHub: `0x1d201BE093d847f6446530Efb0E8Fb426d176709` +- stETH: `0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84` +- PDG: `0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3` + +## ABI notes + +- Uses viem `parseAbi` with human-readable strings. If Lido upgrades a contract and changes a method signature, update the corresponding string in `src/abis.js`. +- `vaultConnection()` struct is now read via raw ABI tuple in `vaultConnectionAbi` (not `parseAbi`). The `forcedRebalanceThresholdBP` is read from contract at each poll; env `FORCED_REBALANCE_THRESHOLD_BP` is only a fallback if the read fails. +- WithdrawalQueue methods are `getLastRequestId` / `getLastFinalizedRequestId` (not `lastRequestId`). + +## Versioning + +Uses [Semantic Versioning](https://semver.org/) in `package.json`. The version is read at startup and exposed via `stvaults_watcher_info{version="..."}`. + +- **Patch** (`x.y.Z`): bug fixes, dependency bumps, config tweaks. +- **Minor** (`x.Y.0`): new metrics, alerts, dashboard sections, env var changes, non-breaking features. +- **Major** (`X.0.0`): breaking changes (renamed env vars, removed metrics, incompatible config format). + +Bump the version in `package.json` when shipping meaningful changes. + +## Living documentation + +This documentation MUST be kept up to date. When you make changes to the project: + +- **New file or module**: Add it to the "Key files" table above. +- **New contract method**: Add it to "Contracts read". +- **New metric or label**: Update "Metrics" / PDG highlights here and the full catalog in root `README.md` § Metrics. +- **New alert type**: Update "Alerts" section. +- **New env var**: Update "Config" section. +- **New network/addresses**: Add to "Hoodi addresses" or create a new section. +- **ABI gotchas**: Document in "ABI notes". +- **Version bump**: Update version in `package.json` following semver rules above. +- **Coding convention changes**: Update `.cursor/rules/coding-conventions.mdc`. + +Rules location: `.cursor/rules/project-overview.mdc` (this file) and `.cursor/rules/coding-conventions.mdc`. diff --git a/.cursor/rules/testing-conventions.mdc b/.cursor/rules/testing-conventions.mdc new file mode 100644 index 0000000..a9cb894 --- /dev/null +++ b/.cursor/rules/testing-conventions.mdc @@ -0,0 +1,25 @@ +--- +description: Testing conventions for stvaults-watcher +globs: tests/**/*.* +alwaysApply: false +--- + +# Testing conventions + +- **Runner**: Use Node's built-in test runner (`node:test`). +- **Folder layout**: Keep all tests inside `tests/`, mirroring `src/` by domain (`tests/monitors`, `tests/metrics`, `tests/notifications`, `tests/grafana`). +- **File naming**: Use `*.test.js` for JavaScript modules and `*.test.ts` only for Grafana TypeScript builders. +- **No extra frameworks**: Do not add Jest, Mocha, Vitest, Sinon, or other test dependencies. +- **Mocking strategy**: + - Use plain mocks/stubs for `client.readContract` in monitor tests. + - Override `process.env` in config tests and restore it after tests. + - Mock `globalThis.fetch` and `Date.now` for Discord tests. +- **Assertions**: Use `node:assert/strict` for deterministic assertions. +- **Coverage focus**: Prioritize exported pure functions first, then integration-style tests for server/metrics and contract polling orchestration. +- **Grafana tests**: + - Run TypeScript tests with `tsx --test`. + - Validate both builder output (`buildDashboard`, panel helpers) and generated `grafana/dashboard.json` patch expectations. +- **CI requirements**: + - Run `npm run test:all`. + - Build dashboard (`npm run grafana:build`) and ensure `grafana/dashboard.json` is in sync. + - Build Docker image to validate `Dockerfile`. diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d750706 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules +.env +.git +*.log +.DS_Store diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..9fe8edf --- /dev/null +++ b/.env.example @@ -0,0 +1,12 @@ +# Required environment variables only. +# For optional overrides and default values, see README.md +RPC_URL=https://ethereum-json-rpc.stakely.io +CHAIN=mainnet +# Vaults (JSON array) +# Required fields: vault, vault_name +# Optional fields: pool (DeFi Wrapper), withdrawalQueue, dashboard +# Examples: +# With pool: {"vault":"0x...","pool":"0x...","vault_name":"my-vault"} +# Without pool: {"vault":"0x...","vault_name":"my-vault"} +# Multi-vault: [{"vault":"0x...","pool":"0x...","vault_name":"vault-a"},{"vault":"0x...","vault_name":"vault-b"}] +VAULT_CONFIGS=[{"vault":"0x0000","pool":"0x000","vault_name":"vault-name"}] diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..f343235 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,3 @@ +# Security Policy + +If you discover any security related issues, please contact with admin@stakely.io \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f064aeb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,68 @@ +# Validates Node app + Grafana dashboard as code. +# Note: Grafana's official dashboard-linter (github.com/grafana/dashboard-linter) enforces +# kubernetes-mixin-style rules (job/instance matchers, datasource variable names, editable:false, etc.) +# and does not match this project's PromQL; use JSON + build sync checks instead. + +name: CI + +on: + push: + branches: [develop] + pull_request: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-node@v6 + with: + node-version: "24" + cache: npm + + - run: npm ci + + - name: Run tests + run: npm run test:all + + - name: Build Docker image + run: docker build -t stvaults-watcher:ci . + + - name: Build Grafana dashboard from TypeScript + run: npm run grafana:build + + - name: Ensure committed dashboard matches generated output + run: | + if ! git diff --exit-code -- grafana/dashboard.json; then + echo "::error::grafana/dashboard.json is out of date. Run npm run grafana:build and commit the result." + exit 1 + fi + + - name: Validate dashboard JSON structure + run: | + node <<'NODE' + const fs = require("fs"); + const raw = fs.readFileSync("grafana/dashboard.json", "utf8"); + let d; + try { + d = JSON.parse(raw); + } catch (e) { + console.error("Invalid JSON:", e.message); + process.exit(1); + } + if (typeof d.schemaVersion !== "number") { + console.error("Expected dashboard.schemaVersion to be a number"); + process.exit(1); + } + if (!Array.isArray(d.panels)) { + console.error("Expected dashboard.panels to be an array"); + process.exit(1); + } + console.log("dashboard.json: valid JSON and minimal Grafana shape OK"); + NODE diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..c587898 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,46 @@ +name: Lint (auto-fix on develop) + +on: + push: + branches: [develop] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: write + +jobs: + lint-and-fix: + runs-on: ubuntu-latest + if: github.actor != 'github-actions[bot]' + steps: + - uses: actions/checkout@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: actions/setup-node@v6 + with: + node-version: "24" + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Lint + auto-fix + run: npm run lint:fix + + - name: Commit and push if changed + run: | + if git diff --quiet; then + echo "No lint changes to commit." + exit 0 + fi + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add -A + git commit -m "chore: lint (auto-fix)" + git push + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..daf1dd0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +.env +*.log +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b8cef41 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:24-alpine + +WORKDIR /app + +COPY package.json package-lock.json* ./ +RUN npm ci --omit=dev + +COPY src ./src + +RUN chown -R node:node /app + +ENV NODE_ENV=production + +USER node +CMD ["node", "src/index.js"] \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6f457e4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Stakely + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 207b61f..04046f8 100644 --- a/README.md +++ b/README.md @@ -1 +1,203 @@ # stvaults-watcher + +[![CI](https://github.com/stakely/stvaults-watcher/actions/workflows/ci.yml/badge.svg)](https://github.com/stakely/stvaults-watcher/actions/workflows/ci.yml) +[![Node](https://img.shields.io/badge/node-%3E%3D24-brightgreen)](https://nodejs.org) +[![Version](https://img.shields.io/github/package-json/v/stakely/stvaults-watcher)](package.json) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) + +Monitoring watcher for [Lido V3](https://docs.lido.fi) stVaults with DeFi Wrapper pools. Reads on-chain data via [viem](https://viem.sh), exposes Prometheus metrics, and sends Discord alerts for health and withdrawal events. + +

+ Grafana Dashboard +

+ +## Features + +- **Multi-vault**: monitor multiple stVaults from a single instance, each with a human-readable `vault_name` +- **Prometheus metrics**: health factor, utilization ratio, inactive ETH, withdrawal queue, and more +- **Discord alerts**: health warnings/criticals and pending withdrawal requests, with per-vault cooldowns +- **Ethereum mainnet and Hoodi testnet** support + +## Requirements + +- Node.js ≥ 24 **or** Docker +- An Ethereum/Hoodi JSON-RPC endpoint (`RPC_URL`) +- Discord webhook URL *(optional; only needed for alerts)* + +## Quick start + +**Docker Compose (recommended)** + +```bash +cp .env.example .env +# Edit .env with your RPC URL and vault addresses +docker compose -f example.docker-compose.yaml up -d +``` + +**Node.js** + +```bash +npm ci +cp .env.example .env +# Edit .env with your RPC URL and vault addresses +node src/index.js +``` + +Metrics will be available at `http://localhost:9600/metrics`. + +## Configuration + +Copy `.env.example` to `.env` and adjust the values. + +| Variable | Required | Default | Description | +|---|---|---|---| +| `RPC_URL` | ✓ | | Ethereum/Hoodi JSON-RPC endpoint | +| `CHAIN` | ✓ | | `mainnet` · `hoodi` | +| `VAULT_CONFIGS` | ✓ | | JSON array of vault objects; see below | +| `POLL_INTERVAL_MIN` | | `1` | Polling interval in minutes | +| `METRICS_PORT` | | `9600` | Prometheus metrics port | +| `DISCORD_WEBHOOK_URL` | | | Enables Discord alerts when set | +| `DISCORD_USERNAME` | | `stvaults-watcher` | Webhook display name for Discord alerts | +| `DISCORD_AVATAR_URL` | | `https://img.lightshot.app/LsNhkD8gRZaPcHK8lJqnWQ.png` | Webhook avatar URL for Discord alerts | +| `ALERT_COOLDOWN_MIN` | | `30` | Alert cooldown per vault per type (minutes) | +| `HEALTH_WARNING_THRESHOLD` | | `107` | Health factor warning level (%) | +| `HEALTH_CRITICAL_THRESHOLD` | | `102` | Health factor critical level (%) | +| `UTILIZATION_WARNING_THRESHOLD` | | `95` | Utilization ratio warning level (%) | +| `INACTIVE_ETH_THRESHOLD` | | `2` | Inactive ETH alert threshold (ETH amount; integer or decimal, e.g. `2` or `2.5`) | + +`CHAIN` is used to resolve `chainId` and core Lido addresses (VaultHub, stETH, PDG) automatically from `src/networks.json`. + +**`VAULT_CONFIGS` format** + +```json +[ + { "vault": "0x...", "pool": "0x...", "vault_name": "my-vault" }, + { "vault": "0x...", "vault_name": "vault-no-pool" }, + { "vault": "0x...", "withdrawalQueue": "0x...", "dashboard": "0x...", "vault_name": "manual-wrapper-addrs" } +] +``` + +`pool` is optional. Vaults without a DeFi Wrapper pool skip WithdrawalQueue/dashboard auto-discovery; all VaultHub and StakingVault metrics still work. You can set `withdrawalQueue` and `dashboard` manually when there is no `pool`. + +## Alerts (Discord) + +When `DISCORD_WEBHOOK_URL` is set, the watcher sends embeds with a **per-vault, per-alert-type** cooldown (`ALERT_COOLDOWN_MIN`). There are no “recovery” notifications when a condition clears. + +| Alert (type) | When it fires | +|---|---| +| Inactive ETH | Buffer inefficiency above `INACTIVE_ETH_THRESHOLD` | +| Withdrawal requests pending | `unfinalizedRequests > 0` | +| Health — warning | Health factor below `HEALTH_WARNING_THRESHOLD` (and not already critical) | +| Health — critical | Health factor below `HEALTH_CRITICAL_THRESHOLD` | +| Forced rebalance | `healthShortfallShares > 0` and not the sentinel max value | +| Utilization high | Utilization at or above `UTILIZATION_WARNING_THRESHOLD` | +| Vault unhealthy | VaultHub reports not healthy (`!isHealthy`) | + +## Metrics + +All ETH values are in ETH (not wei), except metrics explicitly named as shares/ids/counters. + +### Vault - General + +| Metric | Description | +|---|---| +| `lido_vault_total_value_eth` | Total vault value in ETH | +| `lido_vault_available_balance_eth` | ETH available in vault buffer | +| `lido_vault_staged_balance_eth` | ETH staged for validators | +| `lido_vault_inactive_eth` | Inactive ETH (available − staged) | +| `lido_vault_withdrawable_value_eth` | ETH withdrawable from VaultHub | +| `lido_vault_node_operator_fee_eth` | Undisbursed node operator fee in ETH | + +### Vault - Health & Ratios + +| Metric | Description | +|---|---| +| `lido_vault_health_factor` | Health factor (%) | +| `lido_vault_is_healthy` | `1` if vault is healthy, `0` otherwise | +| `lido_vault_health_shortfall_shares` | Shares needed to restore health | +| `lido_vault_utilization_ratio` | Utilization ratio (%) | +| `lido_vault_report_fresh` | `1` if oracle report is fresh, `0` if stale | +| `lido_vault_forced_rebalance_threshold` | Forced rebalance threshold (%) | +| `lido_vault_reserve_ratio` | Reserve ratio (%) | + +### Vault - stETH + +| Metric | Description | +|---|---| +| `lido_vault_steth_liability_shares` | stETH liability in shares | +| `lido_vault_steth_liability_eth` | stETH liability converted to ETH | +| `lido_vault_minting_capacity_shares` | Total minting capacity in shares | +| `lido_vault_minting_capacity_eth` | Total minting capacity converted to ETH | + +### Vault - PDG + +| Metric | Description | +|---|---| +| `lido_vault_pdg_total_eth` | Total PDG guarantee balance in ETH | +| `lido_vault_pdg_locked_eth` | Locked PDG guarantee balance in ETH | +| `lido_vault_pdg_unlocked_eth` | Unlocked PDG guarantee balance in ETH | +| `lido_vault_pdg_pending_activations` | PDG validators pending activation | +| `lido_vault_pdg_policy` | PDG policy enum (`0=STRICT`, `1=ALLOW_PROVE`, `2=ALLOW_DEPOSIT_AND_PROVE`) | + +### Withdrawal Queue + +| Metric | Description | +|---|---| +| `lido_wq_unfinalized_requests` | Pending withdrawal requests | +| `lido_wq_unfinalized_assets_eth` | ETH pending in the withdrawal queue | +| `lido_wq_last_request_id` | Last withdrawal request ID | +| `lido_wq_last_finalized_id` | Last finalized withdrawal request ID | + +### Watcher & Metadata + +| Metric | Description | +|---|---| +| `lido_vault_contracts_info` | Contract addresses info (set once at startup) | +| `stvaults_watcher_info` | Watcher metadata (`version`, `chain`, `explorer_url`) | +| `stvaults_watcher_last_poll_timestamp` | Unix timestamp of last successful poll | +| `stvaults_watcher_poll_errors_total` | Total polling errors counter | + +Most vault metrics include labels `vault`, `vault_name`, and `chain`. +`lido_vault_contracts_info` and `stvaults_watcher_*` use dedicated label sets. + +## Grafana dashboard + +The dashboard is defined as TypeScript and compiled to `grafana/dashboard.json`. + +```bash +npm run grafana:build # regenerate grafana/dashboard.json +``` + +Import `grafana/dashboard.json` in Grafana: the import wizard asks for **Prometheus** (`DS_PROMETHEUS`) and **Loki** (`DS_LOKI`) — see `src/grafana/build.ts` (`__inputs`). After import, use the **Chain** and **Vault** template variables at the top to filter metrics; log panels use the Loki datasource you picked. + +## Logging (Loki) + +If you're running Grafana Loki, you can ship container logs directly via the Docker Loki logging driver. Add a `logging` block to your service in `docker-compose.yaml`: + +```yaml +services: + stvaults-watcher: + # ... rest of your service definition ... + logging: + driver: loki + options: + loki-url: "https://user:password@lokiserver.com/loki/api/v1/push" + loki-external-labels: "container_name={{.Name}},app=stvaults-watcher,chain=mainnet,instance=stvaults-watcher-mainnet" +``` + +> The driver must be installed first: `docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions` + +All log lines are emitted to **stdout** (the watcher never uses `console.error`/`console.warn`), so Docker labels every line as `stream=stdout`. Log level (`INFO`, `WARN`, `ERROR`) is embedded in the message and can be parsed by Loki pipelines. + +## Development + +```bash +npm ci +npm test +``` + +CI runs on every PR to `main`: unit tests, Grafana dashboard build, and JSON structure validation. + +## License + +[MIT](LICENSE) diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..8b2c077 --- /dev/null +++ b/TODO.md @@ -0,0 +1,25 @@ +# TODO / Known workarounds + +## Grafana Foundation SDK does not support `__inputs` + +**File:** `src/grafana/build.ts` + +**Why post-processing is needed:** The Grafana Foundation SDK has no API to declare +`__inputs` or `__requires`. These top-level fields are what Grafana uses to prompt +the user for Prometheus and Loki datasource selection during import. Without them, +Grafana skips the prompt and renders datasource variables as visible dropdowns. + +**Current approach:** `build.ts` post-processes the SDK output to: +1. Remove `type:"datasource"` entries from `templating.list` (those are the visible dropdowns). +2. Inject `__inputs` (with `${DS_PROMETHEUS}` / `${DS_LOKI}` placeholders) and `__requires`. + +All datasource `uid` refs use `${DS_PROMETHEUS}` / `${DS_LOKI}` because `DATASOURCE_VAR` +in `panels.ts` and `LOKI_DS_VAR` in `dashboard.ts` are set to those names directly. +No string-replacement post-processing is needed. + +**What to do if the SDK adds `__inputs` support:** +1. Move `__inputs` / `__requires` declaration into `dashboard.ts` using the SDK API. +2. Remove `removeSdkDatasourceVars` and `addGrafanaInputs` from `build.ts`. +3. Run `npm run grafana:build` and verify the import prompt works without post-processing. + +**Tracking:** https://github.com/grafana/grafana-foundation-sdk/issues diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..53d055b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,49 @@ +import tsParser from "@typescript-eslint/parser"; +import tsPlugin from "@typescript-eslint/eslint-plugin"; + +export default [ + { + ignores: [ + "node_modules/**", + "grafana/dashboard.json", + ".github/**", + ".cursor/**", + "package-lock.json", + "Dockerfile", + "example.docker-compose.yaml", + ], + }, + { + files: ["**/*.{js,ts}"], + languageOptions: { + ecmaVersion: 2022, + sourceType: "module", + parser: tsParser, + globals: { + fetch: "readonly", + process: "readonly", + console: "readonly", + setTimeout: "readonly", + clearTimeout: "readonly", + setInterval: "readonly", + clearInterval: "readonly", + }, + }, + plugins: { + "@typescript-eslint": tsPlugin, + }, + rules: { + "no-console": "off", + semi: ["error", "always"], + eqeqeq: ["error", "always"], + // Permite `if (x) return y;` sin llaves (lo que ya usa el código actual). + curly: ["error", "multi-line"], + "@typescript-eslint/no-unused-vars": [ + "error", + { args: "none", ignoreRestSiblings: true, varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_" }, + ], + "@typescript-eslint/no-explicit-any": "off", + }, + }, +]; + diff --git a/example.docker-compose.yaml b/example.docker-compose.yaml new file mode 100644 index 0000000..60c043a --- /dev/null +++ b/example.docker-compose.yaml @@ -0,0 +1,7 @@ +services: + stvaults-watcher: + build: . + ports: + - "127.0.0.1:9600:9600" + env_file: .env + restart: unless-stopped diff --git a/grafana/dashboard.json b/grafana/dashboard.json new file mode 100644 index 0000000..66b0836 --- /dev/null +++ b/grafana/dashboard.json @@ -0,0 +1,2722 @@ +{ + "timezone": "browser", + "editable": true, + "graphTooltip": 0, + "fiscalYearStartMonth": 0, + "schemaVersion": 42, + "templating": { + "list": [ + { + "type": "query", + "name": "chain", + "skipUrlSync": false, + "multi": false, + "allowCustomValue": true, + "includeAll": false, + "auto": false, + "auto_min": "10s", + "auto_count": 30, + "label": "Chain", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "query": "label_values(lido_vault_total_value_eth, chain)", + "refresh": 1, + "sort": 1 + }, + { + "type": "query", + "name": "vault_name", + "skipUrlSync": false, + "multi": false, + "allowCustomValue": false, + "includeAll": true, + "auto": false, + "auto_min": "10s", + "auto_count": 30, + "label": "Vault", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "query": "label_values(lido_vault_total_value_eth{chain=~\"$chain\"}, vault_name)", + "refresh": 2, + "sort": 1, + "allValue": ".*" + }, + { + "type": "query", + "name": "explorer_base", + "label": "Explorer", + "hide": 2, + "skipUrlSync": false, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(stvaults_watcher_info{chain=\"$chain\"}, explorer_url)", + "query": { + "query": "label_values(stvaults_watcher_info{chain=\"$chain\"}, explorer_url)", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "sort": 0, + "includeAll": false, + "multi": false, + "allValue": null, + "current": {}, + "options": [] + } + ] + }, + "annotations": {}, + "title": "stvaults-watcher", + "uid": "stvaults-watcher", + "tags": [ + "ETHEREUM", + "LIDO" + ], + "refresh": "1m", + "time": { + "from": "now-6h", + "to": "now" + }, + "panels": [ + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "📊 Status", + "gridPos": { + "x": 0, + "y": 0, + "h": 1, + "w": 24 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Watcher version", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "name", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "stvaults_watcher_info{chain=\"$chain\"}", + "legendFormat": "v{{version}}" + } + ], + "gridPos": { + "x": 0, + "y": 1, + "w": 4, + "h": 5 + }, + "fieldConfig": { + "defaults": { + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#B877D9" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Watcher alive", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "(time() - stvaults_watcher_last_poll_timestamp{chain=~\"$chain\"}) < bool 300", + "legendFormat": "{{chain}}" + } + ], + "description": "YES if the watcher has polled in the last 5 minutes. Calculated as: (current time − last poll timestamp) < 300 seconds.", + "gridPos": { + "x": 4, + "y": 1, + "w": 4, + "h": 5 + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "type": "value", + "options": { + "0": { + "text": "NO", + "color": "#F2495C", + "index": 0 + }, + "1": { + "text": "YES", + "color": "#73BF69", + "index": 1 + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Vault healthy", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_is_healthy{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "description": "Whether the vault is considered healthy by VaultHub (isVaultHealthy on-chain).", + "gridPos": { + "x": 8, + "y": 1, + "w": 4, + "h": 5 + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "type": "value", + "options": { + "0": { + "text": "NO", + "color": "#F2495C", + "index": 0 + }, + "1": { + "text": "YES", + "color": "#73BF69", + "index": 1 + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Unfinalized requests", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_wq_unfinalized_requests{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "description": "Number of withdrawal requests in the queue not yet finalized on L1.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 1, + "color": "#FF9830" + }, + { + "value": 10, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 12, + "y": 1, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Inactive ETH", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_inactive_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 1, + "color": "#FF9830" + }, + { + "value": 32, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "ETH in the vault that is not yet staked (available minus staged). Used for withdrawals and rebalancing.", + "gridPos": { + "x": 16, + "y": 1, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Withdrawal deficit", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "clamp_min(lido_wq_unfinalized_assets_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"} - lido_vault_available_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}, 0)", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 0.01, + "color": "#FF9830" + }, + { + "value": 1, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "ETH needed from validators to cover pending withdrawals (0 = enough liquidity)", + "gridPos": { + "x": 20, + "y": 1, + "w": 4, + "h": 5 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "💰 Vault state", + "gridPos": { + "x": 0, + "y": 6, + "h": 1, + "w": 24 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Total value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "Total value of the vault (VaultHub totalValue) in ETH.", + "gridPos": { + "x": 0, + "y": 7, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Available balance", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_available_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "ETH available in the StakingVault (liquid, not yet staged for staking).", + "gridPos": { + "x": 4, + "y": 7, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Staged balance", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_staged_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "ETH staged in the StakingVault (pending to be staked).", + "gridPos": { + "x": 8, + "y": 7, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Withdrawable value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_withdrawable_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "ETH that can be withdrawn (VaultHub withdrawableValue).", + "gridPos": { + "x": 12, + "y": 7, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Node Operator fee", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_node_operator_fee_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "Undisbursed node operator fee accrued in Dashboard (accruedFee).", + "gridPos": { + "x": 16, + "y": 7, + "w": 4, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Staking efficiency", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "(lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"} - lido_vault_inactive_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}) / lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"} * 100", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 2, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#F2495C" + }, + { + "value": 80, + "color": "#FF9830" + }, + { + "value": 96, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "% of vault ETH actively staked and generating yield. Computed as (total_value − inactive_eth) / total_value × 100.", + "gridPos": { + "x": 20, + "y": 7, + "w": 4, + "h": 5 + } + }, + { + "type": "timeseries", + "transparent": false, + "repeatDirection": "h", + "title": "Total value (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": "eth", + "decimals": 4 + }, + "overrides": [] + }, + "targets": [ + { + "expr": "lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "gridPos": { + "x": 0, + "y": 12, + "w": 12, + "h": 8 + } + }, + { + "type": "timeseries", + "transparent": false, + "repeatDirection": "h", + "title": "Available vs Staged (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": "eth", + "decimals": 4 + }, + "overrides": [] + }, + "targets": [ + { + "expr": "lido_vault_available_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "gridPos": { + "x": 12, + "y": 12, + "w": 12, + "h": 8 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "📋 Contracts", + "gridPos": { + "x": 0, + "y": 20, + "h": 1, + "w": 24 + } + }, + { + "type": "table", + "title": "Contracts", + "description": "Contract addresses. Click an address to open in the block explorer.", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "gridPos": { + "x": 0, + "y": 21, + "w": 24, + "h": 6 + }, + "targets": [ + { + "expr": "lido_vault_contracts_info{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}", + "refId": "A", + "instant": true + } + ], + "transformations": [ + { + "id": "labelsToFields", + "options": { + "mode": "rows", + "keepLabels": [ + "vault_addr", + "pool_addr", + "wq_addr", + "dashboard_addr" + ] + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "renameByName": { + "label": "Name", + "value": "Contract" + } + } + }, + { + "id": "filterByValue", + "options": { + "type": "include", + "match": "any", + "filters": [ + { + "fieldName": "Contract", + "config": { + "id": "isNotNull" + } + } + ] + } + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + } + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Contract" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "title": "Open in Explorer", + "url": "${explorer_base}/address/${__value.raw}", + "targetBlank": true + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "vault_addr": { + "text": "Vault", + "color": "green", + "index": 0 + } + } + }, + { + "type": "value", + "options": { + "pool_addr": { + "text": "Pool", + "color": "blue", + "index": 1 + } + } + }, + { + "type": "value", + "options": { + "wq_addr": { + "text": "Withdrawal Queue", + "color": "orange", + "index": 2 + } + } + }, + { + "type": "value", + "options": { + "dashboard_addr": { + "text": "Dashboard", + "color": "purple", + "index": 3 + } + } + } + ] + } + ] + } + ] + }, + "options": { + "showHeader": true, + "cellHeight": "sm", + "footer": { + "show": false, + "reducer": [ + "sum" + ], + "countRows": false, + "fields": "" + } + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "🏥 Health", + "gridPos": { + "x": 0, + "y": 27, + "h": 1, + "w": 24 + } + }, + { + "type": "gauge", + "transparent": false, + "repeatDirection": "h", + "title": "Health factor", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto", + "minVizWidth": 75, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "minVizHeight": 75, + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_health_factor{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 2, + "min": 0, + "max": 200, + "mappings": [ + { + "type": "range", + "options": { + "from": 9999, + "to": null, + "result": { + "text": "∞", + "color": "#73BF69" + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#F2495C" + }, + { + "value": 102, + "color": "#FF9830" + }, + { + "value": 107, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 28, + "w": 6, + "h": 7 + } + }, + { + "type": "gauge", + "transparent": false, + "repeatDirection": "h", + "title": "stETH Minted", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto", + "minVizWidth": 75, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "minVizHeight": 75, + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_utilization_ratio{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 2, + "min": 0, + "max": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 80, + "color": "#FF9830" + }, + { + "value": 95, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "% of stETH minting capacity used (liabilityShares / mintingCapacityShares)", + "gridPos": { + "x": 6, + "y": 28, + "w": 6, + "h": 7 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Forced rebalance threshold", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "none", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_forced_rebalance_threshold{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 2 + }, + "overrides": [] + }, + "description": "If Health Factor falls below 100% (based on this threshold), the vault is subject to forced rebalancing", + "gridPos": { + "x": 12, + "y": 28, + "w": 3, + "h": 7 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Reserve ratio", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "none", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_reserve_ratio{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 2 + }, + "overrides": [] + }, + "description": "% of Total Value reserved as collateral; stETH cannot be minted against this amount", + "gridPos": { + "x": 15, + "y": 28, + "w": 3, + "h": 7 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Oracle report", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_report_fresh{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "gridPos": { + "x": 18, + "y": 28, + "w": 3, + "h": 7 + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "type": "value", + "options": { + "0": { + "text": "STALE", + "color": "#5794F2", + "index": 0 + }, + "1": { + "text": "FRESH", + "color": "#73BF69", + "index": 1 + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Health shortfall", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_health_shortfall_shares{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "description": "Shares needed to restore health (0 = healthy)", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 1, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 21, + "y": 28, + "w": 3, + "h": 7 + } + }, + { + "type": "timeseries", + "transparent": false, + "repeatDirection": "h", + "title": "Health factor %", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": "percent", + "decimals": 2, + "mappings": [ + { + "type": "range", + "options": { + "from": 9999, + "to": null, + "result": { + "text": "∞", + "color": "#73BF69" + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#F2495C" + }, + { + "value": 102, + "color": "#FF9830" + }, + { + "value": 107, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "targets": [ + { + "expr": "clamp_max(lido_vault_health_factor{chain=~\"$chain\",vault_name=~\"$vault_name\"}, 9999)", + "legendFormat": "{{vault_name}}" + } + ], + "gridPos": { + "x": 0, + "y": 35, + "w": 12, + "h": 8 + } + }, + { + "type": "timeseries", + "transparent": false, + "repeatDirection": "h", + "title": "stETH Minted %", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": "percent", + "decimals": 2, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 80, + "color": "#FF9830" + }, + { + "value": 95, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "targets": [ + { + "expr": "lido_vault_utilization_ratio{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "gridPos": { + "x": 12, + "y": 35, + "w": 12, + "h": 8 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "🪙 stETH liability", + "gridPos": { + "x": 0, + "y": 43, + "h": 1, + "w": 24 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "stETH liability", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_steth_liability_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 44, + "w": 8, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Minting capacity", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_minting_capacity_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 8, + "y": 44, + "w": 8, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Withdrawable value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_withdrawable_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 16, + "y": 44, + "w": 8, + "h": 5 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "📤 Withdrawal queue", + "gridPos": { + "x": 0, + "y": 49, + "h": 1, + "w": 24 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Unfinalized requests", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_wq_unfinalized_requests{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 1, + "color": "#FF9830" + }, + { + "value": 10, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 50, + "w": 6, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Unfinalized assets", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "area", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_wq_unfinalized_assets_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 6, + "y": 50, + "w": 6, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Last request ID", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "none", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_wq_last_request_id{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "decimals": 0 + }, + "overrides": [] + }, + "gridPos": { + "x": 12, + "y": 50, + "w": 6, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Last finalized ID", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "none", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_wq_last_finalized_id{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "decimals": 0 + }, + "overrides": [] + }, + "gridPos": { + "x": 18, + "y": 50, + "w": 6, + "h": 5 + } + }, + { + "type": "timeseries", + "transparent": false, + "repeatDirection": "h", + "title": "Unfinalized assets (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": "eth", + "decimals": 4 + }, + "overrides": [] + }, + "targets": [ + { + "expr": "lido_wq_unfinalized_assets_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "gridPos": { + "x": 0, + "y": 55, + "w": 24, + "h": 8 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "🛡️ PDG (Predeposit Guarantee)", + "gridPos": { + "x": 0, + "y": 63, + "h": 1, + "w": 24 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "PDG Policy", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_pdg_policy{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "description": "Dashboard policy for PDG flow: 0=STRICT, 1=ALLOW_PROVE, 2=ALLOW_DEPOSIT_AND_PROVE.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [ + { + "type": "value", + "options": { + "0": { + "text": "STRICT", + "color": "#5794F2", + "index": 0 + }, + "1": { + "text": "ALLOW_PROVE", + "color": "#FF9830", + "index": 1 + }, + "2": { + "text": "ALLOW_DEPOSIT_AND_PROVE", + "color": "#73BF69", + "index": 2 + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#5794F2" + }, + { + "value": 1, + "color": "#FF9830" + }, + { + "value": 2, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 64, + "w": 5, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "PDG Total", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_pdg_total_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "Total guarantee balance in PDG for this vault node operator.", + "gridPos": { + "x": 5, + "y": 64, + "w": 5, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "PDG Locked", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_pdg_locked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "Guarantee currently locked by active predeposits.", + "gridPos": { + "x": 10, + "y": 64, + "w": 5, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "PDG Unlocked", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_pdg_unlocked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "eth", + "decimals": 4, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 0.000001, + "color": "#FF780A" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "description": "Guarantee available for new predeposits (total - locked).", + "gridPos": { + "x": 15, + "y": 64, + "w": 5, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "PDG Pending activations", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "background_solid", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "lido_vault_pdg_pending_activations{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}}" + } + ], + "description": "Validators in PREDEPOSITED/PROVEN stages awaiting activation.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 1, + "color": "#FF9830" + }, + { + "value": 10, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 20, + "y": 64, + "w": 4, + "h": 5 + } + }, + { + "type": "timeseries", + "transparent": false, + "repeatDirection": "h", + "title": "PDG Locked vs Unlocked (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": "eth", + "decimals": 4 + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "locked$" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "#FF9830" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "unlocked$" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "#73BF69" + } + } + ] + } + ] + }, + "targets": [ + { + "expr": "lido_vault_pdg_locked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}} locked" + }, + { + "expr": "lido_vault_pdg_unlocked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", + "legendFormat": "{{vault_name}} unlocked" + } + ], + "gridPos": { + "x": 0, + "y": 69, + "w": 24, + "h": 8 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "🤖 Watcher", + "gridPos": { + "x": 0, + "y": 77, + "h": 1, + "w": 24 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Poll errors", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "increase(stvaults_watcher_poll_errors_total{chain=~\"$chain\"}[$__range])", + "legendFormat": "{{chain}}" + } + ], + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 1, + "color": "#FF780A" + }, + { + "value": 10, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + }, + "noValue": "0" + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 78, + "w": 6, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Last successful poll", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "none", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "stvaults_watcher_last_poll_timestamp{chain=~\"$chain\"} * 1000", + "legendFormat": "{{chain}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "dateTimeFromNow" + }, + "overrides": [] + }, + "gridPos": { + "x": 6, + "y": 78, + "w": 6, + "h": 5 + } + }, + { + "type": "stat", + "transparent": false, + "repeatDirection": "h", + "title": "Time since last poll", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "justifyMode": "auto", + "textMode": "auto", + "wideLayout": true, + "showPercentChange": false, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "percentChangeColorMode": "standard", + "orientation": "auto" + }, + "targets": [ + { + "expr": "time() - stvaults_watcher_last_poll_timestamp{chain=~\"$chain\"}", + "legendFormat": "{{chain}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "s", + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "value": null, + "color": "#73BF69" + }, + { + "value": 120, + "color": "#FF9830" + }, + { + "value": 300, + "color": "#F2495C" + } + ] + }, + "color": { + "mode": "thresholds" + } + }, + "overrides": [] + }, + "gridPos": { + "x": 12, + "y": 78, + "w": 6, + "h": 5 + } + }, + { + "type": "row", + "collapsed": false, + "id": 0, + "panels": [], + "title": "📜 Logs", + "gridPos": { + "x": 0, + "y": 83, + "h": 1, + "w": 24 + } + }, + { + "type": "logs", + "transparent": false, + "repeatDirection": "h", + "title": "Watcher logs", + "datasource": { + "type": "loki", + "uid": "${DS_LOKI}" + }, + "options": { + "showLabels": false, + "showCommonLabels": false, + "showTime": true, + "showLogContextToggle": false, + "wrapLogMessage": true, + "prettifyLogMessage": false, + "enableLogDetails": true, + "sortOrder": "Ascending", + "dedupStrategy": "none", + "fontSize": "sm", + "syntaxHighlighting": true + }, + "targets": [ + { + "expr": "{app=\"stvaults-watcher\", chain=~\"$chain\"}", + "maxLines": 200 + } + ], + "gridPos": { + "x": 0, + "y": 84, + "w": 24, + "h": 12 + } + } + ], + "links": [ + { + "title": "GitHub Repository", + "url": "https://github.com/Stakely/stvaults-watcher", + "targetBlank": true, + "icon": "external link" + } + ], + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus", + "current": { + "selected": false, + "value": "" + } + }, + { + "name": "DS_LOKI", + "label": "Loki", + "type": "datasource", + "pluginId": "loki", + "pluginName": "Loki", + "current": { + "selected": false, + "value": "" + } + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.x" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "2.x" + }, + { + "type": "datasource", + "id": "loki", + "name": "Loki", + "version": "2.x" + } + ] +} \ No newline at end of file diff --git a/grafana/preview.png b/grafana/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..bee59397a7cf9b5ca288e05b0e316b8379ab2b7e GIT binary patch literal 160046 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�E%3NOtq?nLZAE*6SY4 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 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e69fe6f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2025 @@ +{ + "name": "stvaults-watcher", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "stvaults-watcher", + "version": "1.0.0", + "dependencies": { + "prom-client": "^15.1.0", + "viem": "^2.21.0" + }, + "devDependencies": { + "@grafana/grafana-foundation-sdk": "~0.0.12", + "@typescript-eslint/eslint-plugin": "^8.57.1", + "@typescript-eslint/parser": "^8.57.1", + "eslint": "^10.1.0", + "tsx": "^4.21.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", + "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz", + "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.3", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz", + "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.1.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", + "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz", + "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", + "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.1.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@grafana/grafana-foundation-sdk": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@grafana/grafana-foundation-sdk/-/grafana-foundation-sdk-0.0.12.tgz", + "integrity": "sha512-9OXNTXblkwV9o0ToQtXd4GzUG5CmeMvUxTRVge2Xrws7+W/Ytc7fNF80Xs4vnEDRFBOIw7psZIJXpVHDVxVQaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", + "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/type-utils": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.57.2", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", + "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", + "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.57.2", + "@typescript-eslint/types": "^8.57.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", + "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", + "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", + "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", + "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", + "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.57.2", + "@typescript-eslint/tsconfig-utils": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", + "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", + "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/abitype": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", + "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3.22.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", + "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.3", + "@eslint/config-helpers": "^0.5.3", + "@eslint/core": "^1.1.1", + "@eslint/plugin-kit": "^0.6.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isows": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", + "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ox": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.7.tgz", + "integrity": "sha512-zSQ/cfBdolj7U4++NAvH7sI+VG0T3pEohITCgcQj8KlawvTDY4vGVhDT64Atsm0d6adWfIYHDpu88iUBMMp+AQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prom-client": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", + "integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.4.0", + "tdigest": "^0.1.1" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "license": "MIT", + "dependencies": { + "bintrees": "1.0.2" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/viem": { + "version": "2.47.6", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.47.6.tgz", + "integrity": "sha512-zExmbI99NGvMdYa7fmqSTLgkwh48dmhgEqFrUgkpL4kfG4XkVefZ8dZqIKVUhZo6Uhf0FrrEXOsHm9LUyIvI2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.14.7", + "ws": "8.18.3" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3358768 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "stvaults-watcher", + "version": "1.0.0", + "description": "Monitor for Lido stVaults. Prometheus metrics and Discord alerts", + "type": "module", + "main": "src/index.js", + "scripts": { + "start": "node src/index.js", + "test": "node --test tests/**/*.test.js", + "test:grafana": "tsx --test tests/grafana/build.test.ts tests/grafana/dashboard.test.ts tests/grafana/panels.test.ts", + "test:all": "npm test && npm run test:grafana", + "lint": "eslint . --ext .js,.ts", + "lint:fix": "eslint . --ext .js,.ts --fix", + "grafana:build": "tsx src/grafana/build.ts" + }, + "engines": { + "node": ">=20" + }, + "dependencies": { + "prom-client": "^15.1.0", + "viem": "^2.21.0" + }, + "devDependencies": { + "@grafana/grafana-foundation-sdk": "~0.0.12", + "@typescript-eslint/eslint-plugin": "^8.57.1", + "@typescript-eslint/parser": "^8.57.1", + "eslint": "^10.1.0", + "tsx": "^4.21.0" + } +} diff --git a/src/abis.js b/src/abis.js new file mode 100644 index 0000000..28eb652 --- /dev/null +++ b/src/abis.js @@ -0,0 +1,70 @@ +import { parseAbi } from 'viem'; + +/** Human-readable ABIs for Lido V3 stVaults monitoring (read-only methods). */ + +export const vaultHubAbi = parseAbi([ + 'function isVaultHealthy(address vault) view returns (bool)', + 'function healthShortfallShares(address vault) view returns (uint256)', + 'function liabilityShares(address vault) view returns (uint256)', + 'function totalMintingCapacityShares(address vault, int256 deltaValue) view returns (uint256)', + 'function isReportFresh(address vault) view returns (bool)', + 'function withdrawableValue(address vault) view returns (uint256)', + 'function totalValue(address vault) view returns (uint256)', +]); + +export const vaultConnectionAbi = [{ + name: 'vaultConnection', + type: 'function', + stateMutability: 'view', + inputs: [{ name: '_vault', type: 'address' }], + outputs: [{ + name: '', + type: 'tuple', + components: [ + { name: 'owner', type: 'address' }, + { name: 'shareLimit', type: 'uint96' }, + { name: 'vaultIndex', type: 'uint96' }, + { name: 'disconnectInitiatedTs', type: 'uint48' }, + { name: 'reserveRatioBP', type: 'uint16' }, + { name: 'forcedRebalanceThresholdBP', type: 'uint16' }, + { name: 'infraFeeBP', type: 'uint16' }, + { name: 'liquidityFeeBP', type: 'uint16' }, + { name: 'reservationFeeBP', type: 'uint16' }, + { name: 'beaconChainDepositsPauseIntent', type: 'bool' }, + ], + }], +}]; + +export const stakingVaultAbi = parseAbi([ + 'function availableBalance() view returns (uint256)', + 'function stagedBalance() view returns (uint256)', + 'function valuation() view returns (uint256)', + 'function nodeOperator() view returns (address)', +]); + +export const withdrawalQueueAbi = parseAbi([ + 'function unfinalizedRequestsNumber() view returns (uint256)', + 'function unfinalizedAssets() view returns (uint256)', + 'function getLastRequestId() view returns (uint256)', + 'function getLastFinalizedRequestId() view returns (uint256)', +]); + +export const poolAbi = parseAbi([ + 'function WITHDRAWAL_QUEUE() view returns (address)', + 'function DASHBOARD() view returns (address)', +]); + +export const dashboardAbi = parseAbi([ + 'function accruedFee() view returns (uint256)', + 'function pdgPolicy() view returns (uint8)', +]); + +export const stEthAbi = parseAbi([ + 'function getPooledEthByShares(uint256 shares) view returns (uint256)', +]); + +export const pdgAbi = parseAbi([ + 'function nodeOperatorBalance(address _nodeOperator) view returns (uint128 total, uint128 locked)', + 'function unlockedBalance(address _nodeOperator) view returns (uint256)', + 'function pendingActivations(address _vault) view returns (uint256)', +]); diff --git a/src/chain.js b/src/chain.js new file mode 100644 index 0000000..fcd931e --- /dev/null +++ b/src/chain.js @@ -0,0 +1,19 @@ +import { createPublicClient, http } from 'viem'; + +/** + * Create a viem public client for read-only contract calls. + * @param {string} rpcUrl - Ethereum RPC URL + * @param {number} chainId - Chain ID + * @returns {import('viem').PublicClient} + */ +export function createClient(rpcUrl, chainId) { + return createPublicClient({ + chain: { + id: chainId, + name: `Chain ${chainId}`, + nativeCurrency: { name: 'ETH', symbol: 'ETH', decimals: 18 }, + rpcUrls: { default: { http: [rpcUrl] } }, + }, + transport: http(rpcUrl), + }); +} diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..7c56e3f --- /dev/null +++ b/src/config.js @@ -0,0 +1,214 @@ +/** + * Load and validate configuration from environment variables. + * Network-specific constants (chainId, contract addresses) are read from + * src/networks.json — the user only needs to set CHAIN=mainnet|hoodi. + */ + +import { createRequire } from 'module'; + +const require = createRequire(import.meta.url); +const NETWORKS = require('./networks.json'); + +const SUPPORTED_CHAINS = Object.keys(NETWORKS); + +const requiredEnvVars = [ + 'RPC_URL', + 'CHAIN', + 'VAULT_CONFIGS', +]; + +const optionalEnvVars = { + POLL_INTERVAL_MIN: 1, + METRICS_PORT: 9600, + ALERT_COOLDOWN_MIN: 30, + DISCORD_USERNAME: 'stvaults-watcher', + DISCORD_AVATAR_URL: 'https://img.lightshot.app/LsNhkD8gRZaPcHK8lJqnWQ.png', + // Default inactive ETH threshold (in ETH). + // Note: on-chain comparisons operate in wei, so we convert this when loading config. + INACTIVE_ETH_THRESHOLD: 2, + HEALTH_WARNING_THRESHOLD: 107, + HEALTH_CRITICAL_THRESHOLD: 102, + UTILIZATION_WARNING_THRESHOLD: 95, + FORCED_REBALANCE_THRESHOLD_BP: 1000, // 10%, used for health factor calculation if vaultConnection not read +}; + +/** + * Parse a human ETH amount (e.g. "32", "32.5") into wei (1e18 fixed-point). + * This is used for `INACTIVE_ETH_THRESHOLD` so operators can work in ETH. + * @param {string} raw + * @returns {bigint} + */ +function parseEthToWeiBigInt(raw) { + const s = String(raw ?? '').trim(); + if (!s) throw new Error('empty'); + if (/[eE]/.test(s)) throw new Error('scientific notation is not supported'); + if (s.startsWith('-')) throw new Error('negative not supported'); + + // Integer ETH + if (/^\d+$/.test(s)) { + return BigInt(s) * 10n ** 18n; + } + + // Decimal ETH with up to 18 decimals + const m = s.match(/^(\d+)?\.(\d+)$/); + if (!m) throw new Error('invalid eth format'); + + const intPart = m[1] ? BigInt(m[1]) : 0n; + const fracRaw = m[2]; + if (fracRaw.length > 18) throw new Error('too many decimals'); + const fracPadded = fracRaw.padEnd(18, '0'); + + return intPart * 10n ** 18n + BigInt(fracPadded); +} + +/** + * @typedef {Object} VaultConfig + * @property {string} vault - Vault contract address + * @property {string} [pool] - Pool (DeFi Wrapper) address. Optional; vaults without pool skip WQ/dashboard discovery. + * @property {string} vault_name - Human-readable vault id for metrics and alerts + * @property {string} [withdrawalQueue] - Optional, auto-discovered from pool if empty + * @property {string} [dashboard] - Optional, auto-discovered from pool if empty + */ + +/** + * @typedef {Object} Config + * @property {string} rpcUrl + * @property {number} chainId + * @property {string} chain - Chain name for metrics (e.g. mainnet, hoodi) + * @property {string} explorerUrl - Block explorer base URL for this chain + * @property {VaultConfig[]} vaults + * @property {string} vaultHubAddress + * @property {string} stEthAddress + * @property {string} pdgAddress - PredepositGuarantee contract address + * @property {number} pollIntervalMs + * @property {number} metricsPort + * @property {string} [discordWebhookUrl] + * @property {number} alertCooldownMs + * @property {bigint} inactiveEthThresholdWei + * @property {number} healthWarningThreshold + * @property {number} healthCriticalThreshold + * @property {number} utilizationWarningThreshold + */ + +/** + * Parse VAULT_CONFIGS JSON array and validate each entry. + * @param {string} raw + * @returns {VaultConfig[]} + */ +function parseVaultConfigs(raw) { + let arr; + try { + arr = JSON.parse(raw); + } catch (e) { + throw new Error(`VAULT_CONFIGS must be a valid JSON array: ${e.message}`); + } + if (!Array.isArray(arr) || arr.length === 0) { + throw new Error('VAULT_CONFIGS must be a non-empty JSON array'); + } + const vaults = []; + for (let i = 0; i < arr.length; i++) { + const v = arr[i]; + if (!v || typeof v !== 'object') { + throw new Error(`VAULT_CONFIGS[${i}] must be an object`); + } + const vault = String(v.vault ?? '').trim(); + const pool = String(v.pool ?? '').trim(); + const vaultName = String(v.vault_name ?? `vault-${i}`).trim() || `vault-${i}`; + if (!vault) { + throw new Error(`VAULT_CONFIGS[${i}] must have a "vault" address`); + } + if (!/^0x[a-fA-F0-9]{40}$/.test(vault)) { + throw new Error(`VAULT_CONFIGS[${i}] vault must be a valid 0x40-hex address`); + } + if (pool && !/^0x[a-fA-F0-9]{40}$/.test(pool)) { + throw new Error(`VAULT_CONFIGS[${i}] pool must be a valid 0x40-hex address`); + } + const withdrawalQueue = String(v.withdrawalQueue ?? '').trim(); + const dashboard = String(v.dashboard ?? '').trim(); + if (withdrawalQueue && !/^0x[a-fA-F0-9]{40}$/.test(withdrawalQueue)) { + throw new Error(`VAULT_CONFIGS[${i}] withdrawalQueue must be a valid 0x40-hex address`); + } + if (dashboard && !/^0x[a-fA-F0-9]{40}$/.test(dashboard)) { + throw new Error(`VAULT_CONFIGS[${i}] dashboard must be a valid 0x40-hex address`); + } + vaults.push({ + vault, + pool, + vault_name: vaultName, + withdrawalQueue, + dashboard, + }); + } + return vaults; +} + +/** + * @returns {Config} + */ +export function loadConfig() { + const missing = requiredEnvVars.filter((k) => !process.env[k]?.trim()); + if (missing.length > 0) { + throw new Error(`Missing required env vars: ${missing.join(', ')}`); + } + + const chain = process.env.CHAIN.trim(); + const network = NETWORKS[chain]; + if (!network) { + throw new Error( + `Unsupported CHAIN "${chain}". Supported values: ${SUPPORTED_CHAINS.join(', ')}` + ); + } + + const { chainId, explorerUrl, contracts } = network; + + const vaults = parseVaultConfigs(process.env.VAULT_CONFIGS); + + const pollIntervalMin = parseFloat(process.env.POLL_INTERVAL_MIN) || optionalEnvVars.POLL_INTERVAL_MIN; + const pollIntervalMs = Math.round(pollIntervalMin * 60_000); + const metricsPort = parseInt(process.env.METRICS_PORT, 10) || optionalEnvVars.METRICS_PORT; + const alertCooldownMin = parseFloat(process.env.ALERT_COOLDOWN_MIN) || optionalEnvVars.ALERT_COOLDOWN_MIN; + const alertCooldownMs = Math.round(alertCooldownMin * 60_000); + const healthWarningThreshold = parseInt(process.env.HEALTH_WARNING_THRESHOLD, 10) || optionalEnvVars.HEALTH_WARNING_THRESHOLD; + const healthCriticalThreshold = parseInt(process.env.HEALTH_CRITICAL_THRESHOLD, 10) || optionalEnvVars.HEALTH_CRITICAL_THRESHOLD; + const utilizationWarningThreshold = parseInt(process.env.UTILIZATION_WARNING_THRESHOLD, 10) || optionalEnvVars.UTILIZATION_WARNING_THRESHOLD; + + let inactiveEthThresholdWei = parseEthToWeiBigInt(optionalEnvVars.INACTIVE_ETH_THRESHOLD); + + if ('INACTIVE_ETH_THRESHOLD' in process.env) { + const raw = (process.env.INACTIVE_ETH_THRESHOLD ?? '').trim(); + if (!raw) throw new Error('INACTIVE_ETH_THRESHOLD must not be empty'); + try { + inactiveEthThresholdWei = parseEthToWeiBigInt(raw); + } catch (e) { + throw new Error(`INACTIVE_ETH_THRESHOLD is invalid: ${e.message}`); + } + } + + const forcedRebalanceThresholdBP = + parseInt(process.env.FORCED_REBALANCE_THRESHOLD_BP, 10) || optionalEnvVars.FORCED_REBALANCE_THRESHOLD_BP; + + const discordUsername = process.env.DISCORD_USERNAME?.trim() || optionalEnvVars.DISCORD_USERNAME; + const discordAvatarUrl = process.env.DISCORD_AVATAR_URL?.trim() || optionalEnvVars.DISCORD_AVATAR_URL; + + return { + rpcUrl: process.env.RPC_URL.trim(), + chainId, + chain, + explorerUrl, + vaults, + vaultHubAddress: contracts.vaultHub, + stEthAddress: contracts.stEth, + pdgAddress: contracts.pdg, + pollIntervalMs, + metricsPort, + discordWebhookUrl: process.env.DISCORD_WEBHOOK_URL?.trim() || undefined, + discordUsername, + discordAvatarUrl, + alertCooldownMs, + inactiveEthThresholdWei, + healthWarningThreshold, + healthCriticalThreshold, + utilizationWarningThreshold, + forcedRebalanceThresholdBP, + }; +} diff --git a/src/grafana/build.ts b/src/grafana/build.ts new file mode 100644 index 0000000..afec97e --- /dev/null +++ b/src/grafana/build.ts @@ -0,0 +1,218 @@ +/** + * Compiles the dashboard definition to grafana/dashboard.json. + * + * Post-processes the SDK output because the Grafana Foundation SDK does not + * support `__inputs` natively. The post-process: + * 1. Replaces the stat "Contracts" panel with a proper table panel. + * 2. Injects the hidden `explorer_base` query variable. + * 3. Patches the Logs panel with syntaxHighlighting. + * 4. Removes SDK-generated datasource variables and injects `__inputs` / + * `__requires` so Grafana prompts for Prometheus and Loki on import. + * + * Invoked via: npm run grafana:build + */ + +import { writeFileSync } from "fs"; +import { resolve } from "path"; +import { buildDashboard } from "./dashboard.js"; + +function replaceContractsPanelWithTable(dashboard: any) { + const panels = dashboard.panels ?? []; + const idx = panels.findIndex((p: any) => p.title === "Contracts"); + if (idx === -1) return; + const old = panels[idx]; + const gridPos = old.gridPos ?? { x: 0, y: 12, w: 24, h: 6 }; + + const explorerLink = { + title: "Open in Explorer", + url: "${explorer_base}/address/${__value.raw}", + targetBlank: true, + }; + + // One row per contract type using labelsToFields (rows mode). + // This avoids transpose entirely, which has a Grafana bug where the first row + // always gets the column header as its value instead of the actual data. + panels[idx] = { + type: "table", + title: "Contracts", + description: "Contract addresses. Click an address to open in the block explorer.", + datasource: { type: "prometheus", uid: "${DS_PROMETHEUS}" }, + gridPos, + targets: [ + { + expr: 'lido_vault_contracts_info{chain=~"$chain",vault_name=~"$vault_name"}', + legendFormat: "{{vault_name}}", + refId: "A", + instant: true, + // No format:"table"; labelsToFields needs the time-series frame with labels attached + }, + ], + transformations: [ + { + // Pivots each Prometheus label into its own row: Name=label_key, Value=label_value + id: "labelsToFields", + options: { + mode: "rows", + keepLabels: ["vault_addr", "pool_addr", "wq_addr", "dashboard_addr"], + }, + }, + { + // labelsToFields emits lowercase "label" and "value" columns + id: "organize", + options: { + excludeByName: { Time: true }, + renameByName: { label: "Name", value: "Contract" }, + }, + }, + { + // Keep only rows where the contract address is not null (hides pool/WQ/dashboard rows for vaults without those contracts) + id: "filterByValue", + options: { + type: "include", + match: "any", + filters: [{ fieldName: "Contract", config: { id: "isNotNull" } }], + }, + }, + ], + fieldConfig: { + defaults: { custom: { align: "auto", cellOptions: { type: "auto" } } }, + overrides: [ + { + matcher: { id: "byName", options: "Contract" }, + properties: [{ id: "links", value: [explorerLink] }], + }, + { + matcher: { id: "byName", options: "Name" }, + properties: [ + { + id: "mappings", + value: [ + { type: "value", options: { vault_addr: { text: "Vault", color: "green", index: 0 } } }, + { type: "value", options: { pool_addr: { text: "Pool", color: "blue", index: 1 } } }, + { type: "value", options: { wq_addr: { text: "Withdrawal Queue", color: "orange", index: 2 } } }, + { type: "value", options: { dashboard_addr: { text: "Dashboard", color: "purple", index: 3 } } }, + ], + }, + ], + }, + ], + }, + options: { showHeader: true, cellHeight: "sm", footer: { show: false, reducer: ["sum"], countRows: false, fields: "" } }, + }; +} + +function addExplorerBaseVariable(dashboard: any) { + const list = dashboard.templating?.list ?? []; + // Query variable: reads explorer_url label from stvaults_watcher_info filtered by $chain. + // When the user switches chain, Grafana re-runs label_values() and automatically picks + // the correct explorer URL (https://etherscan.io or https://hoodi.etherscan.io). + list.push({ + type: "query", + name: "explorer_base", + label: "Explorer", + hide: 2, + skipUrlSync: false, + datasource: { type: "prometheus", uid: "${DS_PROMETHEUS}" }, + definition: `label_values(stvaults_watcher_info{chain="$chain"}, explorer_url)`, + query: { + query: `label_values(stvaults_watcher_info{chain="$chain"}, explorer_url)`, + refId: "StandardVariableQuery", + }, + refresh: 2, + sort: 0, + includeAll: false, + multi: false, + allValue: null, + current: {}, + options: [], + }); +} + +function addRepositoryLink(dashboard: any) { + const links = dashboard.links ?? []; + links.push({ + title: "GitHub Repository", + url: "https://github.com/Stakely/stvaults-watcher", + targetBlank: true, + icon: "external link", + }); + dashboard.links = links; +} + +function patchPollErrorsPanel(dashboard: any) { + const panel = (dashboard.panels ?? []).find((p: any) => p.title === "Poll errors"); + if (!panel) return; + panel.fieldConfig = panel.fieldConfig ?? {}; + panel.fieldConfig.defaults = panel.fieldConfig.defaults ?? {}; + panel.fieldConfig.defaults.noValue = "0"; +} + +function patchLogsPanel(dashboard: any) { + const panels = dashboard.panels ?? []; + const logsPanel = panels.find((p: any) => p.type === "logs"); + if (!logsPanel) return; + logsPanel.options = logsPanel.options ?? {}; + // Enable predefined coloring scheme for log line highlighting (not exposed by SDK yet) + logsPanel.options.syntaxHighlighting = true; +} + +const built = buildDashboard(); +replaceContractsPanelWithTable(built); +addExplorerBaseVariable(built); +addRepositoryLink(built); +patchPollErrorsPanel(built); +patchLogsPanel(built); + +// Names used by DatasourceVariableBuilder in dashboard.ts / panels.ts. +// The SDK emits these as `type:"datasource"` entries in templating.list; we remove +// them because datasource selection is handled via __inputs at import time instead. +const DS_VAR_NAMES = new Set(["DS_PROMETHEUS", "DS_LOKI"]); + +function removeSdkDatasourceVars(dashboard: any) { + // The SDK always emits `type:"datasource"` entries in templating.list for each + // DatasourceVariableBuilder. Grafana renders these as visible dropdown variables; + // we want datasource selection to happen only at import time via __inputs. + const list = dashboard?.templating?.list; + if (Array.isArray(list)) { + dashboard.templating.list = list.filter( + (v: any) => !(v?.type === "datasource" && DS_VAR_NAMES.has(v?.name)), + ); + } +} + +function addGrafanaInputs(dashboard: any) { + // Grafana's import wizard prompts for datasource selection only when the JSON + // declares top-level `__inputs` entries. Each entry maps a placeholder name + // (e.g. ${DS_PROMETHEUS}) to a real datasource chosen by the user at import time. + dashboard.__inputs = [ + { + name: "DS_PROMETHEUS", + label: "Prometheus", + type: "datasource", + pluginId: "prometheus", + pluginName: "Prometheus", + current: { selected: false, value: "" }, + }, + { + name: "DS_LOKI", + label: "Loki", + type: "datasource", + pluginId: "loki", + pluginName: "Loki", + current: { selected: false, value: "" }, + }, + ]; + + dashboard.__requires = [ + { type: "grafana", id: "grafana", name: "Grafana", version: "10.x" }, + { type: "datasource", id: "prometheus", name: "Prometheus", version: "2.x" }, + { type: "datasource", id: "loki", name: "Loki", version: "2.x" }, + ]; +} + +removeSdkDatasourceVars(built); +addGrafanaInputs(built); + +const outPath = resolve("grafana", "dashboard.json"); +writeFileSync(outPath, JSON.stringify(built, null, 2), "utf-8"); +console.log(`Dashboard written to ${outPath}`); diff --git a/src/grafana/dashboard.ts b/src/grafana/dashboard.ts new file mode 100644 index 0000000..ae21181 --- /dev/null +++ b/src/grafana/dashboard.ts @@ -0,0 +1,561 @@ +/** + * stvaults-watcher - Grafana dashboard defined as code. + * + * Uses the Grafana Foundation SDK builder pattern. + * Each row combines stat/gauge panels with inline timeseries. + * Variables: Prometheus datasource selector + chain filter (hoodi/mainnet). + * + * Build output: grafana/dashboard.json (via `npm run grafana:build`) + */ + +import { + DashboardBuilder, + DatasourceVariableBuilder, + QueryVariableBuilder, + RowBuilder, + VariableHide, +} from "@grafana/grafana-foundation-sdk/dashboard"; +import { PanelBuilder as LogsPanelBuilder } from "@grafana/grafana-foundation-sdk/logs"; +import { DataqueryBuilder as LokiQueryBuilder } from "@grafana/grafana-foundation-sdk/loki"; +import { PanelBuilder as RawStatBuilder } from "@grafana/grafana-foundation-sdk/stat"; +import { DataqueryBuilder } from "@grafana/grafana-foundation-sdk/prometheus"; +import { ReduceDataOptionsBuilder } from "@grafana/grafana-foundation-sdk/common"; +import { statPanel, gaugePanel, timeseriesPanel, DATASOURCE_VAR } from "./panels.js"; + +const LOKI_DS_VAR = "DS_LOKI"; +const LOKI_DS = { type: "loki" as const, uid: `\${${LOKI_DS_VAR}}` }; + +// --------------------------------------------------------------------------- +// Threshold palettes +// --------------------------------------------------------------------------- + +const GREEN = "#73BF69"; +const YELLOW = "#FF9830"; +const ORANGE = "#FF780A"; +const RED = "#F2495C"; +const BLUE = "#5794F2"; +const PURPLE = "#B877D9"; + +const healthThresholds = [{ value: null as any, color: RED }, { value: 105, color: YELLOW }, { value: 120, color: GREEN }]; +const utilizationThresh = [{ value: null as any, color: GREEN }, { value: 80, color: YELLOW }, { value: 95, color: RED }]; +const booleanGreen = [{ value: null as any, color: RED }, { value: 1, color: GREEN }]; +const booleanFresh = [{ value: null as any, color: BLUE }, { value: 1, color: GREEN }]; +const ethThresholds = [{ value: null as any, color: BLUE }]; +const boolMappings = [ + { type: "value" as const, options: { "0": { text: "NO", color: RED, index: 0 }, "1": { text: "YES", color: GREEN, index: 1 } } }, +]; +const freshMappings = [ + { type: "value" as const, options: { "0": { text: "STALE", color: BLUE, index: 0 }, "1": { text: "FRESH", color: GREEN, index: 1 } } }, +]; +const pdgPolicyMappings = [ + { + type: "value" as const, + options: { + "0": { text: "STRICT", color: BLUE, index: 0 }, + "1": { text: "ALLOW_PROVE", color: YELLOW, index: 1 }, + "2": { text: "ALLOW_DEPOSIT_AND_PROVE", color: GREEN, index: 2 }, + }, + }, +]; + +// --------------------------------------------------------------------------- +// Layout (Grafana grid = 24 cols) +// --------------------------------------------------------------------------- + +function pos(x: number, y: number, w: number, h: number) { + return { x, y, w, h }; +} + +function q(metric: string) { + return `${metric}{chain=~"$chain",vault_name=~"$vault_name"}`; +} + +// --------------------------------------------------------------------------- +// Dashboard +// --------------------------------------------------------------------------- + +export function buildDashboard(): object { + const builder = new DashboardBuilder("stvaults-watcher") + .uid("stvaults-watcher") + .tags(["ETHEREUM", "LIDO"]) + .refresh("1m") + .time({ from: "now-6h", to: "now" }) + .timezone("browser") + .withVariable( + new DatasourceVariableBuilder(DATASOURCE_VAR) + .label("Prometheus") + .type("prometheus") + .hide(VariableHide.HideVariable), + ) + .withVariable( + new QueryVariableBuilder("chain") + .label("Chain") + .datasource({ type: "prometheus", uid: `\${${DATASOURCE_VAR}}` }) + .query("label_values(lido_vault_total_value_eth, chain)") + .refresh(1) + .sort(1) + .includeAll(false), + ) + .withVariable( + new QueryVariableBuilder("vault_name") + .label("Vault") + .datasource({ type: "prometheus", uid: `\${${DATASOURCE_VAR}}` }) + .query('label_values(lido_vault_total_value_eth{chain=~"$chain"}, vault_name)') + .refresh(2) + .sort(1) + .includeAll(true) + .allValue(".*") + .allowCustomValue(false), + ) + .withVariable( + new DatasourceVariableBuilder(LOKI_DS_VAR) + .label("Loki") + .type("loki") + .hide(VariableHide.HideVariable), + ); + + let y = 0; + const S = 5; + const G = 7; + const T = 8; + + // ==================== 📊 Status ==================== + builder.withRow(new RowBuilder("📊 Status")); + y += 1; + + builder + .withPanel(statPanel({ + title: "Watcher version", + expr: `stvaults_watcher_info{chain="$chain"}`, + legendLabel: "v{{version}}", + colorMode: "background_solid", graphMode: "none", textMode: "name", + thresholdSteps: [{ value: null as any, color: PURPLE }], + gridPos: pos(0, y, 4, S), + })) + .withPanel(statPanel({ + title: "Watcher alive", + expr: `(time() - stvaults_watcher_last_poll_timestamp{chain=~"$chain"}) < bool 300`, + legendLabel: "{{chain}}", + description: "YES if the watcher has polled in the last 5 minutes. Calculated as: (current time − last poll timestamp) < 300 seconds.", + colorMode: "background_solid", graphMode: "none", + thresholdSteps: booleanGreen, + valueMappings: boolMappings as any, + gridPos: pos(4, y, 4, S), + })) + .withPanel(statPanel({ + title: "Vault healthy", + expr: q("lido_vault_is_healthy"), + description: "Whether the vault is considered healthy by VaultHub (isVaultHealthy on-chain).", + colorMode: "background_solid", graphMode: "none", + thresholdSteps: booleanGreen, + valueMappings: boolMappings as any, + gridPos: pos(8, y, 4, S), + })) + .withPanel(statPanel({ + title: "Unfinalized requests", + expr: q("lido_wq_unfinalized_requests"), + description: "Number of withdrawal requests in the queue not yet finalized on L1.", + decimals: 0, + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 1, color: YELLOW }, { value: 10, color: RED }], + gridPos: pos(12, y, 4, S), + })) + .withPanel(statPanel({ + title: "Inactive ETH", + expr: q("lido_vault_inactive_eth"), + description: "ETH in the vault that is not yet staked (available minus staged). Used for withdrawals and rebalancing.", + unit: "eth", decimals: 4, + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 1, color: YELLOW }, { value: 32, color: RED }], + gridPos: pos(16, y, 4, S), + })) + .withPanel(statPanel({ + title: "Withdrawal deficit", + expr: `clamp_min(lido_wq_unfinalized_assets_eth{chain=~"$chain",vault_name=~"$vault_name"} - lido_vault_available_balance_eth{chain=~"$chain",vault_name=~"$vault_name"}, 0)`, + unit: "eth", decimals: 4, + description: "ETH needed from validators to cover pending withdrawals (0 = enough liquidity)", + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 0.01, color: YELLOW }, { value: 1, color: RED }], + gridPos: pos(20, y, 4, S), + })); + y += S; + + // ==================== 💰 Vault state ==================== + builder.withRow(new RowBuilder("💰 Vault state")); + y += 1; + + const DS_REF = { type: "prometheus" as const, uid: `\${${DATASOURCE_VAR}}` }; + const ci = `lido_vault_contracts_info{chain=~"$chain",vault_name=~"$vault_name"}`; + builder + .withPanel(statPanel({ + title: "Total value", + expr: q("lido_vault_total_value_eth"), + description: "Total value of the vault (VaultHub totalValue) in ETH.", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(0, y, 4, S), + })) + .withPanel(statPanel({ + title: "Available balance", + expr: q("lido_vault_available_balance_eth"), + description: "ETH available in the StakingVault (liquid, not yet staged for staking).", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(4, y, 4, S), + })) + .withPanel(statPanel({ + title: "Staged balance", + expr: q("lido_vault_staged_balance_eth"), + description: "ETH staged in the StakingVault (pending to be staked).", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(8, y, 4, S), + })) + .withPanel(statPanel({ + title: "Withdrawable value", + expr: q("lido_vault_withdrawable_value_eth"), + description: "ETH that can be withdrawn (VaultHub withdrawableValue).", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(12, y, 4, S), + })) + .withPanel(statPanel({ + title: "Node Operator fee", + expr: q("lido_vault_node_operator_fee_eth"), + description: "Undisbursed node operator fee accrued in Dashboard (accruedFee).", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(16, y, 4, S), + })) + .withPanel(statPanel({ + title: "Staking efficiency", + expr: `(${q("lido_vault_total_value_eth")} - ${q("lido_vault_inactive_eth")}) / ${q("lido_vault_total_value_eth")} * 100`, + description: "% of vault ETH actively staked and generating yield. Computed as (total_value − inactive_eth) / total_value × 100.", + unit: "percent", decimals: 2, + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: RED }, { value: 80, color: YELLOW }, { value: 96, color: GREEN }], + gridPos: pos(20, y, 4, S), + })); + y += S; + + builder + .withPanel(timeseriesPanel({ + title: "Total value (ETH)", + expr: q("lido_vault_total_value_eth"), + unit: "eth", decimals: 4, + gridPos: pos(0, y, 12, T), + })) + .withPanel(timeseriesPanel({ + title: "Available vs Staged (ETH)", + expr: q("lido_vault_available_balance_eth"), + unit: "eth", decimals: 4, + gridPos: pos(12, y, 12, T), + })); + y += T; + + // ==================== 📋 Contracts ==================== + builder.withRow(new RowBuilder("📋 Contracts")); + y += 1; + builder.withPanel( + new RawStatBuilder() + .title("Contracts") + .description("Replaced by build with table.") + .datasource(DS_REF) + .reduceOptions(new ReduceDataOptionsBuilder().calcs(["lastNotNull"])) + .withTarget(new DataqueryBuilder().expr(ci).legendFormat("{{vault_addr}}")) + .gridPos(pos(0, y, 24, 6)), + ); + y += 6; + + // ==================== 🏥 Health ==================== + builder.withRow(new RowBuilder("🏥 Health")); + y += 1; + + builder + .withPanel(gaugePanel({ + title: "Health factor", + expr: q("lido_vault_health_factor"), + unit: "percent", decimals: 2, + min: 0, max: 200, + thresholdSteps: healthThresholds, + valueMappings: [ + { type: "range" as const, options: { from: 9999, to: null as any, result: { text: "∞", color: GREEN } } }, + ] as any, + gridPos: pos(0, y, 6, G), + })) + .withPanel(gaugePanel({ + title: "stETH Minted", + expr: q("lido_vault_utilization_ratio"), + description: "% of stETH minting capacity used (liabilityShares / mintingCapacityShares)", + unit: "percent", decimals: 2, + min: 0, max: 100, + thresholdSteps: utilizationThresh, + gridPos: pos(6, y, 6, G), + })) + .withPanel(statPanel({ + title: "Forced rebalance threshold", + expr: q("lido_vault_forced_rebalance_threshold"), + unit: "percent", decimals: 2, + description: "If Health Factor falls below 100% (based on this threshold), the vault is subject to forced rebalancing", + colorMode: "none", graphMode: "none", + gridPos: pos(12, y, 3, G), + })) + .withPanel(statPanel({ + title: "Reserve ratio", + expr: q("lido_vault_reserve_ratio"), + unit: "percent", decimals: 2, + description: "% of Total Value reserved as collateral; stETH cannot be minted against this amount", + colorMode: "none", graphMode: "none", + gridPos: pos(15, y, 3, G), + })) + .withPanel(statPanel({ + title: "Oracle report", + expr: q("lido_vault_report_fresh"), + colorMode: "background_solid", graphMode: "none", + thresholdSteps: booleanFresh, + valueMappings: freshMappings as any, + gridPos: pos(18, y, 3, G), + })) + .withPanel(statPanel({ + title: "Health shortfall", + expr: q("lido_vault_health_shortfall_shares"), + decimals: 0, + description: "Shares needed to restore health (0 = healthy)", + colorMode: "value", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 1, color: RED }], + gridPos: pos(21, y, 3, G), + })); + y += G; + + builder + .withPanel(timeseriesPanel({ + title: "Health factor %", + // clamp_max: vaults with no minted stETH have +Inf health factor; cap at 9999 so the + // timeseries line stays visible. The raw +Inf value is preserved in Prometheus. + expr: `clamp_max(${q("lido_vault_health_factor")}, 9999)`, + unit: "percent", decimals: 2, + thresholdSteps: healthThresholds, + valueMappings: [ + { type: "range" as const, options: { from: 9999, to: null as any, result: { text: "∞", color: GREEN } } }, + ] as any, + gridPos: pos(0, y, 12, T), + })) + .withPanel(timeseriesPanel({ + title: "stETH Minted %", + expr: q("lido_vault_utilization_ratio"), + unit: "percent", decimals: 2, + thresholdSteps: utilizationThresh, + gridPos: pos(12, y, 12, T), + })); + y += T; + + // ==================== 🪙 stETH liability ==================== + builder.withRow(new RowBuilder("🪙 stETH liability")); + y += 1; + + builder + .withPanel(statPanel({ + title: "stETH liability", + expr: q("lido_vault_steth_liability_eth"), + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(0, y, 8, S), + })) + .withPanel(statPanel({ + title: "Minting capacity", + expr: q("lido_vault_minting_capacity_eth"), + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(8, y, 8, S), + })) + .withPanel(statPanel({ + title: "Withdrawable value", + expr: q("lido_vault_withdrawable_value_eth"), + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(16, y, 8, S), + })); + y += S; + + // ==================== 📤 Withdrawal queue ==================== + builder.withRow(new RowBuilder("📤 Withdrawal queue")); + y += 1; + + builder + .withPanel(statPanel({ + title: "Unfinalized requests", + expr: q("lido_wq_unfinalized_requests"), + decimals: 0, + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 1, color: YELLOW }, { value: 10, color: RED }], + gridPos: pos(0, y, 6, S), + })) + .withPanel(statPanel({ + title: "Unfinalized assets", + expr: q("lido_wq_unfinalized_assets_eth"), + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "area", + thresholdSteps: ethThresholds, + gridPos: pos(6, y, 6, S), + })) + .withPanel(statPanel({ + title: "Last request ID", + expr: q("lido_wq_last_request_id"), + decimals: 0, + colorMode: "none", graphMode: "none", + gridPos: pos(12, y, 6, S), + })) + .withPanel(statPanel({ + title: "Last finalized ID", + expr: q("lido_wq_last_finalized_id"), + decimals: 0, + colorMode: "none", graphMode: "none", + gridPos: pos(18, y, 6, S), + })); + y += S; + + builder + .withPanel(timeseriesPanel({ + title: "Unfinalized assets (ETH)", + expr: q("lido_wq_unfinalized_assets_eth"), + unit: "eth", decimals: 4, + gridPos: pos(0, y, 24, T), + })); + y += T; + + // ==================== 🛡️ PDG ==================== + builder.withRow(new RowBuilder("🛡️ PDG (Predeposit Guarantee)")); + y += 1; + + builder + .withPanel(statPanel({ + title: "PDG Policy", + expr: q("lido_vault_pdg_policy"), + decimals: 0, + description: "Dashboard policy for PDG flow: 0=STRICT, 1=ALLOW_PROVE, 2=ALLOW_DEPOSIT_AND_PROVE.", + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: BLUE }, { value: 1, color: YELLOW }, { value: 2, color: GREEN }], + valueMappings: pdgPolicyMappings as any, + gridPos: pos(0, y, 5, S), + })) + .withPanel(statPanel({ + title: "PDG Total", + expr: q("lido_vault_pdg_total_eth"), + description: "Total guarantee balance in PDG for this vault node operator.", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }], + gridPos: pos(5, y, 5, S), + })) + .withPanel(statPanel({ + title: "PDG Locked", + expr: q("lido_vault_pdg_locked_eth"), + description: "Guarantee currently locked by active predeposits.", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }], + gridPos: pos(10, y, 5, S), + })) + .withPanel(statPanel({ + title: "PDG Unlocked", + expr: q("lido_vault_pdg_unlocked_eth"), + description: "Guarantee available for new predeposits (total - locked).", + unit: "eth", decimals: 4, + colorMode: "value", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 0.000001, color: ORANGE }], + gridPos: pos(15, y, 5, S), + })) + .withPanel(statPanel({ + title: "PDG Pending activations", + expr: q("lido_vault_pdg_pending_activations"), + decimals: 0, + description: "Validators in PREDEPOSITED/PROVEN stages awaiting activation.", + colorMode: "background_solid", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 1, color: YELLOW }, { value: 10, color: RED }], + gridPos: pos(20, y, 4, S), + })); + y += S; + + builder + .withPanel(timeseriesPanel({ + title: "PDG Locked vs Unlocked (ETH)", + expr: q("lido_vault_pdg_locked_eth"), + unit: "eth", decimals: 4, + legendLabel: "{{vault_name}} locked", + additionalTargets: [ + { expr: q("lido_vault_pdg_unlocked_eth"), legendLabel: "{{vault_name}} unlocked" }, + ], + seriesColors: [ + { pattern: "locked$", color: YELLOW }, + { pattern: "unlocked$", color: GREEN }, + ], + gridPos: pos(0, y, 24, T), + })); + y += T; + + // ==================== 🤖 Watcher ==================== + builder.withRow(new RowBuilder("🤖 Watcher")); + y += 1; + + builder + .withPanel(statPanel({ + title: "Poll errors", + expr: `increase(stvaults_watcher_poll_errors_total{chain=~"$chain"}[$__range])`, + legendLabel: "{{chain}}", + decimals: 0, + colorMode: "value", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 1, color: ORANGE }, { value: 10, color: RED }], + gridPos: pos(0, y, 6, S), + })) + .withPanel(statPanel({ + title: "Last successful poll", + expr: `stvaults_watcher_last_poll_timestamp{chain=~"$chain"} * 1000`, + legendLabel: "{{chain}}", + unit: "dateTimeFromNow", + colorMode: "none", graphMode: "none", + gridPos: pos(6, y, 6, S), + })) + .withPanel(statPanel({ + title: "Time since last poll", + expr: `time() - stvaults_watcher_last_poll_timestamp{chain=~"$chain"}`, + legendLabel: "{{chain}}", + unit: "s", decimals: 0, + colorMode: "value", graphMode: "none", + thresholdSteps: [{ value: null as any, color: GREEN }, { value: 120, color: YELLOW }, { value: 300, color: RED }], + gridPos: pos(12, y, 6, S), + })); + + y += S; + + // ==================== 📜 Logs ==================== + builder.withRow(new RowBuilder("📜 Logs")); + y += 1; + + builder.withPanel( + new LogsPanelBuilder() + .title("Watcher logs") + .datasource(LOKI_DS) + .showTime(true) + .wrapLogMessage(true) + .enableLogDetails(true) + .sortOrder("Ascending" as any) + .dedupStrategy("none" as any) + .fontSize("sm" as any) + .withTarget( + new LokiQueryBuilder() + .expr('{app="stvaults-watcher", chain=~"$chain"}') + .maxLines(200) + ) + .gridPos(pos(0, y, 24, 12)), + ); + + return builder.build(); +} diff --git a/src/grafana/panels.ts b/src/grafana/panels.ts new file mode 100644 index 0000000..3e901fb --- /dev/null +++ b/src/grafana/panels.ts @@ -0,0 +1,166 @@ +/** + * Reusable panel builder helpers for the Grafana dashboard. + * Supports stat, gauge and timeseries panels with thresholds, + * value mappings and proper sizing. + */ + +import { ReduceDataOptionsBuilder } from "@grafana/grafana-foundation-sdk/common"; +import { + FieldColorBuilder, + ThresholdsConfigBuilder, + type DataSourceRef, + type GridPos, + type Threshold, + type ValueMapping, +} from "@grafana/grafana-foundation-sdk/dashboard"; +import { DataqueryBuilder } from "@grafana/grafana-foundation-sdk/prometheus"; +import { PanelBuilder as StatPanelBuilder } from "@grafana/grafana-foundation-sdk/stat"; +import { PanelBuilder as GaugePanelBuilder } from "@grafana/grafana-foundation-sdk/gauge"; +import { PanelBuilder as TimeseriesPanelBuilder } from "@grafana/grafana-foundation-sdk/timeseries"; + +export const DATASOURCE_VAR = "DS_PROMETHEUS"; + +const DS: DataSourceRef = { + type: "prometheus", + uid: `\${${DATASOURCE_VAR}}`, +}; + +function reduce() { + return new ReduceDataOptionsBuilder().calcs(["lastNotNull"]); +} + +function thresholds(steps: Threshold[]) { + return new ThresholdsConfigBuilder() + .mode("absolute" as any) + .steps(steps); +} + +// --------------------------------------------------------------------------- +// Panel option types +// --------------------------------------------------------------------------- + +export interface StatOpts { + title: string; + expr: string; + unit?: string; + description?: string; + legendLabel?: string; + decimals?: number; + colorMode?: "background" | "background_solid" | "value" | "none"; + graphMode?: "area" | "line" | "none"; + textMode?: "auto" | "value" | "value_and_name" | "name" | "none"; + thresholdSteps?: Threshold[]; + valueMappings?: ValueMapping[]; + gridPos?: GridPos; +} + +export interface GaugeOpts { + title: string; + expr: string; + unit?: string; + description?: string; + legendLabel?: string; + decimals?: number; + min?: number; + max?: number; + thresholdSteps?: Threshold[]; + valueMappings?: ValueMapping[]; + gridPos?: GridPos; +} + +export interface TsOpts { + title: string; + expr: string; + unit?: string; + legendLabel?: string; + decimals?: number; + thresholdSteps?: Threshold[]; + valueMappings?: ValueMapping[]; + gridPos?: GridPos; + additionalTargets?: { expr: string; legendLabel?: string }[]; + seriesColors?: { pattern: string; color: string }[]; +} + +// --------------------------------------------------------------------------- +// Builders +// --------------------------------------------------------------------------- + +export function statPanel(o: StatOpts): StatPanelBuilder { + const p = new StatPanelBuilder() + .title(o.title) + .datasource(DS) + .reduceOptions(reduce()) + .withTarget(new DataqueryBuilder().expr(o.expr).legendFormat(o.legendLabel ?? "{{vault_name}}")); + + if (o.unit) p.unit(o.unit); + if (o.description) p.description(o.description); + if (o.decimals !== undefined) p.decimals(o.decimals); + if (o.gridPos) p.gridPos(o.gridPos); + if (o.graphMode) p.graphMode(o.graphMode as any); + if (o.colorMode) p.colorMode(o.colorMode as any); + if (o.textMode) p.textMode(o.textMode as any); + if (o.valueMappings) p.mappings(o.valueMappings); + + if (o.thresholdSteps) { + p.thresholds(thresholds(o.thresholdSteps)); + p.colorScheme(new FieldColorBuilder().mode("thresholds" as any)); + } + + return p; +} + +export function gaugePanel(o: GaugeOpts): GaugePanelBuilder { + const p = new GaugePanelBuilder() + .title(o.title) + .datasource(DS) + .reduceOptions(reduce()) + .showThresholdMarkers(true) + .showThresholdLabels(false) + .withTarget(new DataqueryBuilder().expr(o.expr).legendFormat(o.legendLabel ?? "{{vault_name}}")); + + if (o.unit) p.unit(o.unit); + if (o.description) p.description(o.description); + if (o.decimals !== undefined) p.decimals(o.decimals); + if (o.gridPos) p.gridPos(o.gridPos); + if (o.min !== undefined) p.min(o.min); + if (o.max !== undefined) p.max(o.max); + if (o.valueMappings) p.mappings(o.valueMappings); + + if (o.thresholdSteps) { + p.thresholds(thresholds(o.thresholdSteps)); + p.colorScheme(new FieldColorBuilder().mode("thresholds" as any)); + } + + return p; +} + +export function timeseriesPanel(o: TsOpts): TimeseriesPanelBuilder { + const p = new TimeseriesPanelBuilder() + .title(o.title) + .datasource(DS) + .lineWidth(2) + .fillOpacity(15) + .withTarget(new DataqueryBuilder().expr(o.expr).legendFormat(o.legendLabel ?? "{{vault_name}}")); + + if (o.unit) p.unit(o.unit); + if (o.decimals !== undefined) p.decimals(o.decimals); + if (o.gridPos) p.gridPos(o.gridPos); + if (o.valueMappings) p.mappings(o.valueMappings); + if (o.additionalTargets) { + for (const t of o.additionalTargets) { + p.withTarget(new DataqueryBuilder().expr(t.expr).legendFormat(t.legendLabel ?? "{{vault_name}}")); + } + } + if (o.seriesColors) { + for (const s of o.seriesColors) { + p.overrideByRegexp(s.pattern, [{ id: "color", value: { mode: "fixed", fixedColor: s.color } }]); + } + } + + if (o.thresholdSteps) { + p.thresholds(thresholds(o.thresholdSteps)); + p.colorScheme(new FieldColorBuilder().mode("thresholds" as any)); + } + + return p; +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..ca950a8 --- /dev/null +++ b/src/index.js @@ -0,0 +1,177 @@ +import { readFileSync } from 'fs'; +import { loadConfig } from './config.js'; +import { createClient } from './chain.js'; +import { createMetricsServer } from './metrics/server.js'; +import { watcherInfo, watcherLastPollTimestamp, watcherPollErrorsTotal, vaultContractsInfo } from './metrics/definitions.js'; + +const { version: WATCHER_VERSION } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8')); +import { resolvePoolAddresses, pollVaults } from './monitors/vaultMonitor.js'; +import { + setWebhookIdentity, + sendInactiveEthAlert, + sendUnfinalizedRequestsAlert, + sendHealthWarningAlert, + sendHealthCriticalAlert, + sendForcedRebalanceAlert, + sendUtilizationHighAlert, + // sendReportStaleAlert, + sendVaultUnhealthyAlert, +} from './notifications/discord.js'; +import { hasUnfinalizedRequests } from './monitors/withdrawalMonitor.js'; +import { isInactiveEthAboveThreshold } from './monitors/efficiencyMonitor.js'; + +const MAX_UINT256 = 2n ** 256n - 1n; + +function info(msg) { + console.log(`INFO ${msg}`); +} + +function warn(vaultName, msg) { + console.log(`WARNING ⚠️ [${vaultName}] ${msg}`); +} + +function crit(vaultName, msg) { + console.log(`ERROR 🔴 [${vaultName}] ${msg}`); +} + +async function runPoll(config, client, vaultConfigs) { + const chain = config.chain; + try { + const snapshots = await pollVaults( + client, + config, + vaultConfigs, + config.stEthAddress, + config.vaultHubAddress + ); + watcherLastPollTimestamp.set({ chain }, Date.now() / 1000); + for (const s of snapshots) { + const pendingWd = Number(s.unfinalizedRequests); + const wdPart = pendingWd > 0 ? ` · 🕐 wd_pending=${pendingWd}` : ''; + info(`🔄 [${s.vault_name}] Poll OK · chain=${chain} · health=${s.healthFactorPct.toFixed(1)}% · stETH=${s.utilizationPct.toFixed(1)}%${wdPart}`); + } + + for (const s of snapshots) { + if (isInactiveEthAboveThreshold(s.inactiveEthWei, config.inactiveEthThresholdWei)) { + const eth = (Number(s.inactiveEthWei) / 1e18).toFixed(4); + warn(s.vault_name, `Inactive ETH · ${eth} ETH sitting idle (not in validators)`); + } + if (hasUnfinalizedRequests(s.unfinalizedRequests)) { + const count = Number(s.unfinalizedRequests); + const need = (Number(s.unfinalizedAssets) / 1e18).toFixed(4); + const have = (Number(s.availableBalance) / 1e18).toFixed(4); + const deficit = Number(s.unfinalizedAssets) / 1e18 - Number(s.availableBalance) / 1e18; + const deficitPart = deficit > 0 ? ` · ❗ exit ${deficit.toFixed(4)} ETH from validators` : ''; + warn(s.vault_name, `Withdrawal requests pending · ${count} req · ${need} ETH needed · ${have} ETH available${deficitPart}`); + } + if (s.healthFactorPct < config.healthCriticalThreshold) { + crit(s.vault_name, `Health factor critical · ${s.healthFactorPct.toFixed(1)}% (below ${config.healthCriticalThreshold}% threshold)`); + } else if (s.healthFactorPct < config.healthWarningThreshold) { + warn(s.vault_name, `Health factor low · ${s.healthFactorPct.toFixed(1)}% (below ${config.healthWarningThreshold}% threshold)`); + } + if (s.healthShortfallShares > 0n && s.healthShortfallShares !== MAX_UINT256) { + crit(s.vault_name, `Forced rebalance required · shortfall: ${s.healthShortfallShares} shares`); + } + if (s.utilizationPct >= config.utilizationWarningThreshold) { + warn(s.vault_name, `Utilization high · ${s.utilizationPct.toFixed(1)}% (above ${config.utilizationWarningThreshold}% threshold)`); + } + + if (!s.isHealthy) { + crit(s.vault_name, 'Vault unhealthy · check health factor and consider rebalancing'); + } + + if (config.discordWebhookUrl) { + const cooldown = config.alertCooldownMs; + const url = config.discordWebhookUrl; + const discordErr = (vaultName, type) => (e) => + console.log(`ERROR 🔴 [${vaultName}] Discord ${type} notification failed: ${e?.message ?? e}`); + + if (isInactiveEthAboveThreshold(s.inactiveEthWei, config.inactiveEthThresholdWei)) { + await sendInactiveEthAlert(url, cooldown, s.vault_name, s.vault, s.inactiveEthWei) + .catch(discordErr(s.vault_name, 'inactive-eth')); + } + if (hasUnfinalizedRequests(s.unfinalizedRequests)) { + await sendUnfinalizedRequestsAlert( + url, cooldown, s.vault_name, s.vault, + Number(s.unfinalizedRequests), s.unfinalizedAssets, s.availableBalance + ).catch(discordErr(s.vault_name, 'unfinalized-requests')); + } + if (s.healthFactorPct < config.healthCriticalThreshold) { + await sendHealthCriticalAlert(url, cooldown, s.vault_name, s.vault, s.healthFactorPct, config.healthCriticalThreshold) + .catch(discordErr(s.vault_name, 'health-critical')); + } else if (s.healthFactorPct < config.healthWarningThreshold) { + await sendHealthWarningAlert(url, cooldown, s.vault_name, s.vault, s.healthFactorPct, config.healthWarningThreshold) + .catch(discordErr(s.vault_name, 'health-warning')); + } + if (s.healthShortfallShares > 0n && s.healthShortfallShares !== MAX_UINT256) { + await sendForcedRebalanceAlert(url, cooldown, s.vault_name, s.vault, s.healthShortfallShares) + .catch(discordErr(s.vault_name, 'forced-rebalance')); + } + if (s.utilizationPct >= config.utilizationWarningThreshold) { + await sendUtilizationHighAlert(url, cooldown, s.vault_name, s.vault, s.utilizationPct, config.utilizationWarningThreshold) + .catch(discordErr(s.vault_name, 'utilization-high')); + } + if (!s.isHealthy) { + await sendVaultUnhealthyAlert(url, cooldown, s.vault_name, s.vault) + .catch(discordErr(s.vault_name, 'vault-unhealthy')); + } + } + } + } catch (err) { + watcherPollErrorsTotal.inc({ chain: config.chain }); + throw err; + } +} + +async function main() { + const config = loadConfig(); + info(`🚀 Starting stvaults-watcher v${WATCHER_VERSION} · chain=${config.chain} · vaults=${config.vaults.length}`); + watcherInfo.set({ version: WATCHER_VERSION, chain: config.chain, explorer_url: config.explorerUrl }, 1); + setWebhookIdentity({ username: config.discordUsername, avatarUrl: config.discordAvatarUrl }); + const client = createClient(config.rpcUrl, config.chainId); + + const vaultConfigs = []; + for (const vc of config.vaults) { + let resolved = { ...vc }; + if (vc.pool) { + info(`📡 [${vc.vault_name}] Resolving pool addresses...`); + const { withdrawalQueue, dashboard } = await resolvePoolAddresses(client, vc.pool, vc); + resolved.withdrawalQueue = vc.withdrawalQueue || withdrawalQueue; + resolved.dashboard = vc.dashboard || dashboard; + } + vaultConfigs.push(resolved); + vaultContractsInfo.set({ + vault_name: resolved.vault_name, + chain: config.chain, + vault_addr: resolved.vault, + pool_addr: resolved.pool || '', + wq_addr: resolved.withdrawalQueue || '', + dashboard_addr: resolved.dashboard || '', + }, 1); + } + + const metricsServer = createMetricsServer(config.metricsPort); + info(`📊 Metrics on :${config.metricsPort} · polling every ${config.pollIntervalMs / 60_000}min`); + + let pollTimer; + const schedule = () => { + runPoll(config, client, vaultConfigs).catch((err) => { + console.log(`ERROR 🔴 Poll error: ${err?.message ?? err}`); + }); + pollTimer = setTimeout(schedule, config.pollIntervalMs); + }; + schedule(); + + const shutdown = () => { + if (pollTimer) clearTimeout(pollTimer); + metricsServer.close(); + process.exit(0); + }; + process.on('SIGINT', shutdown); + process.on('SIGTERM', shutdown); +} + +main().catch((err) => { + console.log(`ERROR 🔴 Fatal: ${err?.message ?? err}`); + process.exit(1); +}); diff --git a/src/metrics/definitions.js b/src/metrics/definitions.js new file mode 100644 index 0000000..1dd2c40 --- /dev/null +++ b/src/metrics/definitions.js @@ -0,0 +1,234 @@ +import { Registry, Gauge, Counter } from 'prom-client'; + +const defaultLabels = ['vault', 'vault_name', 'chain']; + +export const register = new Registry(); + +// Vault - general state (values in ETH) +export const vaultTotalValueEth = new Gauge({ + name: 'lido_vault_total_value_eth', + help: 'Total value of the vault in ETH', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultAvailableBalanceEth = new Gauge({ + name: 'lido_vault_available_balance_eth', + help: 'ETH available in vault buffer', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultStagedBalanceEth = new Gauge({ + name: 'lido_vault_staged_balance_eth', + help: 'ETH staged for validators', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultInactiveEth = new Gauge({ + name: 'lido_vault_inactive_eth', + help: 'Inefficient ETH not in validators (available minus staged)', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultWithdrawableValueEth = new Gauge({ + name: 'lido_vault_withdrawable_value_eth', + help: 'ETH withdrawable from vault', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultNodeOperatorFeeEth = new Gauge({ + name: 'lido_vault_node_operator_fee_eth', + help: 'Undisbursed node operator fee in ETH (Dashboard.accruedFee)', + labelNames: defaultLabels, + registers: [register], +}); + +// Vault - PDG (PredepositGuarantee) +export const vaultPdgTotalEth = new Gauge({ + name: 'lido_vault_pdg_total_eth', + help: 'Total PDG guarantee balance for the vault node operator in ETH', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultPdgLockedEth = new Gauge({ + name: 'lido_vault_pdg_locked_eth', + help: 'Locked PDG guarantee balance in ETH', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultPdgUnlockedEth = new Gauge({ + name: 'lido_vault_pdg_unlocked_eth', + help: 'Unlocked PDG guarantee balance in ETH', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultPdgPendingActivations = new Gauge({ + name: 'lido_vault_pdg_pending_activations', + help: 'PDG validators pending activation for this vault', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultPdgPolicy = new Gauge({ + name: 'lido_vault_pdg_policy', + help: 'PDG policy enum from Dashboard (0=STRICT, 1=ALLOW_PROVE, 2=ALLOW_DEPOSIT_AND_PROVE)', + labelNames: defaultLabels, + registers: [register], +}); + +// Vault - health +export const vaultHealthFactor = new Gauge({ + name: 'lido_vault_health_factor', + help: 'Health factor (percentage)', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultIsHealthy = new Gauge({ + name: 'lido_vault_is_healthy', + help: '1 if vault is healthy, 0 otherwise', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultHealthShortfallShares = new Gauge({ + name: 'lido_vault_health_shortfall_shares', + help: 'Shares needed to restore vault health', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultUtilizationRatio = new Gauge({ + name: 'lido_vault_utilization_ratio', + help: 'Utilization ratio (percentage)', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultReportFresh = new Gauge({ + name: 'lido_vault_report_fresh', + help: '1 if oracle report is fresh, 0 if stale', + labelNames: defaultLabels, + registers: [register], +}); + +// Vault - connection params (from VaultHub.vaultConnection) +export const vaultForcedRebalanceThreshold = new Gauge({ + name: 'lido_vault_forced_rebalance_threshold', + help: 'Forced rebalance threshold (percentage, e.g. 50 = 50%)', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultReserveRatio = new Gauge({ + name: 'lido_vault_reserve_ratio', + help: 'Reserve ratio (percentage, e.g. 2.5 = 2.5%)', + labelNames: defaultLabels, + registers: [register], +}); + +// Vault - stETH +export const vaultStethLiabilityShares = new Gauge({ + name: 'lido_vault_steth_liability_shares', + help: 'stETH liability in shares', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultStethLiabilityEth = new Gauge({ + name: 'lido_vault_steth_liability_eth', + help: 'stETH liability in ETH', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultMintingCapacityShares = new Gauge({ + name: 'lido_vault_minting_capacity_shares', + help: 'Total stETH minting capacity in shares', + labelNames: defaultLabels, + registers: [register], +}); + +export const vaultMintingCapacityEth = new Gauge({ + name: 'lido_vault_minting_capacity_eth', + help: 'Total stETH minting capacity in ETH', + labelNames: defaultLabels, + registers: [register], +}); + +// Withdrawal queue +export const wqUnfinalizedRequests = new Gauge({ + name: 'lido_wq_unfinalized_requests', + help: 'Number of unfinalized withdrawal requests', + labelNames: defaultLabels, + registers: [register], +}); + +export const wqUnfinalizedAssetsEth = new Gauge({ + name: 'lido_wq_unfinalized_assets_eth', + help: 'ETH pending in withdrawal queue', + labelNames: defaultLabels, + registers: [register], +}); + +export const wqLastRequestId = new Gauge({ + name: 'lido_wq_last_request_id', + help: 'Last withdrawal request ID', + labelNames: defaultLabels, + registers: [register], +}); + +export const wqLastFinalizedId = new Gauge({ + name: 'lido_wq_last_finalized_id', + help: 'Last finalized withdrawal request ID', + labelNames: defaultLabels, + registers: [register], +}); + +// Vault contracts info (addresses as labels, set once at startup) +export const vaultContractsInfo = new Gauge({ + name: 'lido_vault_contracts_info', + help: 'Vault contract addresses (always 1). Labels carry addresses.', + labelNames: ['vault_name', 'chain', 'vault_addr', 'pool_addr', 'wq_addr', 'dashboard_addr'], + registers: [register], +}); + +// Watcher +export const watcherInfo = new Gauge({ + name: 'stvaults_watcher_info', + help: 'Watcher metadata (always 1). Labels carry version, chain and explorer_url.', + labelNames: ['version', 'chain', 'explorer_url'], + registers: [register], +}); + +export const watcherLastPollTimestamp = new Gauge({ + name: 'stvaults_watcher_last_poll_timestamp', + help: 'Timestamp of last successful poll', + labelNames: ['chain'], + registers: [register], +}); + +export const watcherPollErrorsTotal = new Counter({ + name: 'stvaults_watcher_poll_errors_total', + help: 'Total polling errors', + labelNames: ['chain'], + registers: [register], +}); + +/** + * Get label set for a vault. + * @param {string} vault - Vault address + * @param {string} vaultName - Human-readable vault id + * @param {string} chain - Chain name (e.g. mainnet, hoodi) + * @returns {{ vault: string, vault_name: string, chain: string }} + */ +export function vaultLabels(vault, vaultName, chain) { + return { vault, vault_name: vaultName, chain }; +} diff --git a/src/metrics/server.js b/src/metrics/server.js new file mode 100644 index 0000000..76d163c --- /dev/null +++ b/src/metrics/server.js @@ -0,0 +1,31 @@ +import http from 'node:http'; +import { register } from './definitions.js'; + +/** + * Create HTTP server that serves Prometheus metrics at GET /metrics. + * @param {number} port + * @returns {import('http').Server} + */ +export function createMetricsServer(port) { + const server = http.createServer(async (req, res) => { + if (req.method === 'GET' && req.url === '/metrics') { + try { + const metrics = await register.metrics(); + res.setHeader('Content-Type', register.contentType); + res.end(metrics); + } catch (err) { + res.statusCode = 500; + res.end(String(err)); + } + return; + } + res.statusCode = 404; + res.end('Not Found'); + }); + + server.listen(port, () => { + console.log('INFO Metrics server listening on port', port); + }); + + return server; +} diff --git a/src/monitors/efficiencyMonitor.js b/src/monitors/efficiencyMonitor.js new file mode 100644 index 0000000..2be3e8e --- /dev/null +++ b/src/monitors/efficiencyMonitor.js @@ -0,0 +1,24 @@ +/** + * Detection of inefficient ETH (available in vault but not in validators/staged). + */ + +/** + * Compute inactive ETH: available balance minus staged (ETH sitting in buffer not yet in validators). + * @param {bigint} availableBalanceWei + * @param {bigint} stagedBalanceWei + * @returns {bigint} + */ +export function computeInactiveEthWei(availableBalanceWei, stagedBalanceWei) { + if (availableBalanceWei <= stagedBalanceWei) return 0n; + return availableBalanceWei - stagedBalanceWei; +} + +/** + * Check if inactive ETH exceeds threshold (alert condition). + * @param {bigint} inactiveEthWei + * @param {bigint} thresholdWei + * @returns {boolean} + */ +export function isInactiveEthAboveThreshold(inactiveEthWei, thresholdWei) { + return inactiveEthWei > thresholdWei; +} diff --git a/src/monitors/healthMonitor.js b/src/monitors/healthMonitor.js new file mode 100644 index 0000000..3f841b1 --- /dev/null +++ b/src/monitors/healthMonitor.js @@ -0,0 +1,33 @@ +/** + * Health factor and utilization ratio computation from vault/VaultHub data. + */ + +/** + * Compute health factor as percentage. + * Formula: HF = Total Value × (1 - FRT) / Minted stETH (liability in ETH) + * @param {bigint} totalValueWei + * @param {number} forcedRebalanceThresholdBP - e.g. 1000 = 10% + * @param {bigint} liabilityEthWei - stETH liability converted to ETH + * @returns {number} Health factor percentage (e.g. 150 = 150%) + */ +export function computeHealthFactorPct(totalValueWei, forcedRebalanceThresholdBP, liabilityEthWei) { + if (liabilityEthWei === 0n) return Infinity; + const frt = Number(forcedRebalanceThresholdBP) / 10_000; + const numerator = Number(totalValueWei) * (1 - frt); + const pct = (numerator / Number(liabilityEthWei)) * 100; + const clamped = Math.max(0, pct); + // Keep the metric stable/noisy-less: round at source (not in Grafana). + return Math.round(clamped * 100) / 100; +} + +/** + * Compute utilization ratio as percentage. + * UR = (liabilityShares / totalMintingCapacityShares) × 100 + * @param {bigint} liabilityShares + * @param {bigint} mintingCapacityShares + * @returns {number} + */ +export function computeUtilizationRatioPct(liabilityShares, mintingCapacityShares) { + if (mintingCapacityShares === 0n) return 0; + return Number((liabilityShares * 10000n) / mintingCapacityShares) / 100; +} diff --git a/src/monitors/vaultMonitor.js b/src/monitors/vaultMonitor.js new file mode 100644 index 0000000..fc4a23f --- /dev/null +++ b/src/monitors/vaultMonitor.js @@ -0,0 +1,382 @@ +import { + vaultHubAbi, + vaultConnectionAbi, + stakingVaultAbi, + withdrawalQueueAbi, + poolAbi, + dashboardAbi, + stEthAbi, + pdgAbi, +} from '../abis.js'; +import { computeHealthFactorPct, computeUtilizationRatioPct } from './healthMonitor.js'; +import { computeInactiveEthWei } from './efficiencyMonitor.js'; +import { + vaultTotalValueEth, + vaultAvailableBalanceEth, + vaultStagedBalanceEth, + vaultInactiveEth, + vaultWithdrawableValueEth, + vaultNodeOperatorFeeEth, + vaultPdgTotalEth, + vaultPdgLockedEth, + vaultPdgUnlockedEth, + vaultPdgPendingActivations, + vaultPdgPolicy, + vaultHealthFactor, + vaultIsHealthy, + vaultHealthShortfallShares, + vaultUtilizationRatio, + vaultReportFresh, + vaultForcedRebalanceThreshold, + vaultReserveRatio, + vaultStethLiabilityShares, + vaultStethLiabilityEth, + vaultMintingCapacityShares, + vaultMintingCapacityEth, + wqUnfinalizedRequests, + wqUnfinalizedAssetsEth, + wqLastRequestId, + wqLastFinalizedId, + vaultLabels, +} from '../metrics/definitions.js'; + +const WEI_PER_ETH = 1e18; + +function weiToEth(wei) { + return Number(wei) / WEI_PER_ETH; +} + +const MAX_UINT256 = 2n ** 256n - 1n; + +/** + * Resolve withdrawalQueue and dashboard from pool if not set. + * @param {import('viem').PublicClient} client + * @param {string} poolAddress + * @param {{ vault: string, pool: string, vault_name: string, withdrawalQueue: string, dashboard: string }} vaultConfig + * @returns {Promise<{ withdrawalQueue: string, dashboard: string }>} + */ +export async function resolvePoolAddresses(client, poolAddress, vaultConfig) { + if (vaultConfig.withdrawalQueue && vaultConfig.dashboard) { + return { withdrawalQueue: vaultConfig.withdrawalQueue, dashboard: vaultConfig.dashboard }; + } + const [wq, dash] = await Promise.all([ + client.readContract({ + address: poolAddress, + abi: poolAbi, + functionName: 'WITHDRAWAL_QUEUE', + }), + client.readContract({ + address: poolAddress, + abi: poolAbi, + functionName: 'DASHBOARD', + }), + ]); + return { withdrawalQueue: wq, dashboard: dash }; +} + +/** + * Fetch all vault data and update metrics. Returns snapshot per vault for alerting. + * @param {import('viem').PublicClient} client + * @param {import('../config.js').Config} config + * @param {Array<{ vault: string, pool: string, vault_name: string, withdrawalQueue: string, dashboard: string }>} vaultConfigs - with withdrawalQueue/dashboard resolved + * @param {string} stEthAddress + * @param {string} vaultHubAddress + */ +export async function pollVaults(client, config, vaultConfigs, stEthAddress, vaultHubAddress) { + const chain = config.chain; + const pdgAddress = config.pdgAddress; + const results = []; + + for (const vc of vaultConfigs) { + const { vault, vault_name: vaultName, withdrawalQueue, dashboard } = vc; + const labels = vaultLabels(vault, vaultName, chain); + + try { + // VaultHub multicall + const [ + totalValue, + isHealthy, + healthShortfallShares, + liabilityShares, + mintingCapacityShares, + reportFresh, + withdrawableValue, + ] = await Promise.all([ + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'totalValue', + args: [vault], + }), + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'isVaultHealthy', + args: [vault], + }), + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'healthShortfallShares', + args: [vault], + }), + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'liabilityShares', + args: [vault], + }), + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'totalMintingCapacityShares', + args: [vault, 0n], + }), + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'isReportFresh', + args: [vault], + }), + client.readContract({ + address: vaultHubAddress, + abi: vaultHubAbi, + functionName: 'withdrawableValue', + args: [vault], + }), + ]); + + // VaultConnection (read real thresholds from contract) + let forcedRebalanceThresholdBP = config.forcedRebalanceThresholdBP ?? 1000; + let reserveRatioBP = 0; + try { + const conn = await client.readContract({ + address: vaultHubAddress, + abi: vaultConnectionAbi, + functionName: 'vaultConnection', + args: [vault], + }); + if (conn.forcedRebalanceThresholdBP > 0) { + forcedRebalanceThresholdBP = conn.forcedRebalanceThresholdBP; + } + reserveRatioBP = conn.reserveRatioBP ?? 0; + } catch (e) { + console.warn(`vaultConnection read failed for ${vaultName}, using config fallback (${forcedRebalanceThresholdBP}BP):`, e?.shortMessage ?? e?.message); + } + + // StakingVault + const [availableBalance, stagedBalance, nodeOperator] = await Promise.all([ + client.readContract({ + address: vault, + abi: stakingVaultAbi, + functionName: 'availableBalance', + }), + client.readContract({ + address: vault, + abi: stakingVaultAbi, + functionName: 'stagedBalance', + }), + client.readContract({ + address: vault, + abi: stakingVaultAbi, + functionName: 'nodeOperator', + }), + ]); + + // Convert shares to ETH via stETH + let liabilityEthWei = 0n; + let mintingCapacityEthWei = 0n; + if (stEthAddress) { + const sharesToConvert = []; + if (liabilityShares > 0n) sharesToConvert.push(liabilityShares); + if (mintingCapacityShares > 0n) sharesToConvert.push(mintingCapacityShares); + + if (sharesToConvert.length > 0) { + const results = await Promise.all( + sharesToConvert.map((s) => + client.readContract({ + address: stEthAddress, + abi: stEthAbi, + functionName: 'getPooledEthByShares', + args: [s], + }) + ) + ); + let idx = 0; + if (liabilityShares > 0n) liabilityEthWei = results[idx++]; + if (mintingCapacityShares > 0n) mintingCapacityEthWei = results[idx++]; + } + } + + const healthFactorPct = computeHealthFactorPct(totalValue, forcedRebalanceThresholdBP, liabilityEthWei); + const utilizationPct = computeUtilizationRatioPct(liabilityShares, mintingCapacityShares); + const inactiveEthWei = computeInactiveEthWei(availableBalance, stagedBalance); + + // Withdrawal queue (only if we have address). May revert when queue is empty/never used. + let unfinalizedRequests = 0n; + let unfinalizedAssets = 0n; + let lastRequestId = 0n; + let lastFinalizedId = 0n; + if (withdrawalQueue) { + try { + [unfinalizedRequests, unfinalizedAssets, lastRequestId, lastFinalizedId] = await Promise.all([ + client.readContract({ + address: withdrawalQueue, + abi: withdrawalQueueAbi, + functionName: 'unfinalizedRequestsNumber', + }), + client.readContract({ + address: withdrawalQueue, + abi: withdrawalQueueAbi, + functionName: 'unfinalizedAssets', + }), + client.readContract({ + address: withdrawalQueue, + abi: withdrawalQueueAbi, + functionName: 'getLastRequestId', + }), + client.readContract({ + address: withdrawalQueue, + abi: withdrawalQueueAbi, + functionName: 'getLastFinalizedRequestId', + }), + ]); + } catch (wqErr) { + // Contract can revert when queue has no requests or different interface; use zeros + console.warn( + `WithdrawalQueue read failed for ${vaultName} (${withdrawalQueue}), using zeros:`, + wqErr?.shortMessage ?? wqErr?.message ?? wqErr + ); + } + } + + let nodeOperatorFeeWei = 0n; + let pdgPolicy = 0; + if (dashboard) { + try { + [nodeOperatorFeeWei, pdgPolicy] = await Promise.all([ + client.readContract({ + address: dashboard, + abi: dashboardAbi, + functionName: 'accruedFee', + }), + client.readContract({ + address: dashboard, + abi: dashboardAbi, + functionName: 'pdgPolicy', + }), + ]); + } catch (feeErr) { + console.warn( + `dashboard read failed for ${vaultName} (${dashboard}), using defaults:`, + feeErr?.shortMessage ?? feeErr?.message ?? feeErr + ); + } + } + + let pdgTotalWei = 0n; + let pdgLockedWei = 0n; + let pdgUnlockedWei = 0n; + let pdgPendingActivations = 0n; + const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; + if (nodeOperator === ZERO_ADDRESS) { + console.log(`WARN PDG reads skipped for ${vaultName}: nodeOperator() returned zero address`); + } else if (pdgAddress) { + try { + const [nodeOperatorBalance, unlockedBalance, pendingActivations] = await Promise.all([ + client.readContract({ + address: pdgAddress, + abi: pdgAbi, + functionName: 'nodeOperatorBalance', + args: [nodeOperator], + }), + client.readContract({ + address: pdgAddress, + abi: pdgAbi, + functionName: 'unlockedBalance', + args: [nodeOperator], + }), + client.readContract({ + address: pdgAddress, + abi: pdgAbi, + functionName: 'pendingActivations', + args: [vault], + }), + ]); + + [pdgTotalWei, pdgLockedWei] = nodeOperatorBalance; + pdgUnlockedWei = unlockedBalance; + pdgPendingActivations = pendingActivations; + } catch (pdgErr) { + console.warn( + `PDG read failed for ${vaultName} (${pdgAddress}), using zeros:`, + pdgErr?.shortMessage ?? pdgErr?.message ?? pdgErr + ); + } + } + + // Update metrics (ETH values for human readability) + vaultTotalValueEth.set(labels, weiToEth(totalValue)); + vaultAvailableBalanceEth.set(labels, weiToEth(availableBalance)); + vaultStagedBalanceEth.set(labels, weiToEth(stagedBalance)); + vaultInactiveEth.set(labels, weiToEth(inactiveEthWei)); + vaultWithdrawableValueEth.set(labels, weiToEth(withdrawableValue)); + vaultNodeOperatorFeeEth.set(labels, weiToEth(nodeOperatorFeeWei)); + vaultPdgTotalEth.set(labels, weiToEth(pdgTotalWei)); + vaultPdgLockedEth.set(labels, weiToEth(pdgLockedWei)); + vaultPdgUnlockedEth.set(labels, weiToEth(pdgUnlockedWei)); + vaultPdgPendingActivations.set(labels, Number(pdgPendingActivations)); + vaultPdgPolicy.set(labels, Number(pdgPolicy)); + vaultHealthFactor.set(labels, healthFactorPct); + vaultIsHealthy.set(labels, isHealthy ? 1 : 0); + vaultHealthShortfallShares.set(labels, healthShortfallShares === MAX_UINT256 ? 0 : Number(healthShortfallShares)); + vaultUtilizationRatio.set(labels, utilizationPct); + vaultReportFresh.set(labels, reportFresh ? 1 : 0); + vaultForcedRebalanceThreshold.set(labels, forcedRebalanceThresholdBP / 100); + vaultReserveRatio.set(labels, reserveRatioBP / 100); + vaultStethLiabilityShares.set(labels, Number(liabilityShares)); + vaultStethLiabilityEth.set(labels, weiToEth(liabilityEthWei)); + vaultMintingCapacityShares.set(labels, Number(mintingCapacityShares)); + vaultMintingCapacityEth.set(labels, weiToEth(mintingCapacityEthWei)); + wqUnfinalizedRequests.set(labels, Number(unfinalizedRequests)); + wqUnfinalizedAssetsEth.set(labels, weiToEth(unfinalizedAssets)); + wqLastRequestId.set(labels, Number(lastRequestId)); + wqLastFinalizedId.set(labels, Number(lastFinalizedId)); + + results.push({ + vault, + vault_name: vaultName, + chain, + totalValue, + availableBalance, + stagedBalance, + inactiveEthWei, + withdrawableValue, + nodeOperatorFeeWei, + nodeOperator, + pdgTotalWei, + pdgLockedWei, + pdgUnlockedWei, + pdgPendingActivations, + pdgPolicy, + isHealthy, + healthShortfallShares, + healthFactorPct, + utilizationPct, + reportFresh, + liabilityShares, + liabilityEthWei, + mintingCapacityShares, + unfinalizedRequests, + unfinalizedAssets, + lastRequestId, + lastFinalizedId, + }); + } catch (err) { + console.error(`Poll error for vault ${vault} (${vaultName}):`, err); + throw err; + } + } + + return results; +} diff --git a/src/monitors/withdrawalMonitor.js b/src/monitors/withdrawalMonitor.js new file mode 100644 index 0000000..d33f558 --- /dev/null +++ b/src/monitors/withdrawalMonitor.js @@ -0,0 +1,12 @@ +/** + * Withdrawal queue state for DeFi Wrapper - used for metrics and alert conditions. + */ + +/** + * Check if there are unfinalized withdrawal requests. + * @param {bigint} unfinalizedRequestsNumber + * @returns {boolean} + */ +export function hasUnfinalizedRequests(unfinalizedRequestsNumber) { + return unfinalizedRequestsNumber > 0n; +} diff --git a/src/networks.json b/src/networks.json new file mode 100644 index 0000000..5b89a09 --- /dev/null +++ b/src/networks.json @@ -0,0 +1,20 @@ +{ + "mainnet": { + "chainId": 1, + "explorerUrl": "https://etherscan.io", + "contracts": { + "vaultHub": "0x1d201BE093d847f6446530Efb0E8Fb426d176709", + "stEth": "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", + "pdg": "0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3" + } + }, + "hoodi": { + "chainId": 560048, + "explorerUrl": "https://hoodi.etherscan.io", + "contracts": { + "vaultHub": "0x4C9fFC325392090F789255b9948Ab1659b797964", + "stEth": "0x3508A952176b3c15387C97BE809eaffB1982176a", + "pdg": "0xa5F55f3402beA2B14AE15Dae1b6811457D43581d" + } + } +} diff --git a/src/notifications/discord.js b/src/notifications/discord.js new file mode 100644 index 0000000..d8a3868 --- /dev/null +++ b/src/notifications/discord.js @@ -0,0 +1,191 @@ +/** + * Discord webhook alerts with cooldown. No recovery messages. + */ + +const COLORS = { warning: 0xf1c532, critical: 0xe74c3c }; + +const cooldowns = new Map(); + +/** + * @param {string} alertKey - Unique key per alert type + vault (e.g. "inactive-eth:0x...") + * @param {number} cooldownMs + * @returns {boolean} true if we should send (not in cooldown) + */ +export function shouldSendAlert(alertKey, cooldownMs) { + const now = Date.now(); + const last = cooldowns.get(alertKey) ?? 0; + if (now - last < cooldownMs) return false; + cooldowns.set(alertKey, now); + return true; +} + +let webhookIdentity = {}; + +/** + * Set the Discord webhook username and avatar for all messages. + * @param {{ username?: string, avatarUrl?: string }} identity + */ +export function setWebhookIdentity(identity) { + if (identity.username) webhookIdentity.username = identity.username; + if (identity.avatarUrl) webhookIdentity.avatar_url = identity.avatarUrl; +} + +/** + * @param {string} url - Discord webhook URL + * @param {{ title: string, description?: string, color: number, fields?: Array<{ name: string, value: string, inline?: boolean }> }} embed + */ +export async function sendDiscordEmbed(url, embed) { + const res = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ ...webhookIdentity, embeds: [embed] }), + }); + if (!res.ok) { + const text = await res.text(); + throw new Error(`Discord webhook failed ${res.status}: ${text}`); + } +} + +/** + * Send alert for inactive ETH above threshold. + */ +export async function sendInactiveEthAlert(webhookUrl, cooldownMs, vaultName, vaultAddress, inactiveEthWei) { + const key = `inactive-eth:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + const eth = Number(inactiveEthWei) / 1e18; + await sendDiscordEmbed(webhookUrl, { + title: `⚠️ Inefficient ETH (${vaultName})`, + description: `Vault **${vaultName}** has ETH in the buffer that is not in validators.`, + color: COLORS.warning, + fields: [ + { name: 'Vault', value: vaultAddress, inline: false }, + { name: 'Inactive ETH', value: `${eth.toFixed(4)} ETH`, inline: true }, + ], + }); +} + +/** + * Send alert for new unfinalized withdrawal requests. + */ +export async function sendUnfinalizedRequestsAlert(webhookUrl, cooldownMs, vaultName, vaultAddress, count, unfinalizedAssetsWei, availableBalanceWei) { + const key = `unfinalized-requests:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + const need = Number(unfinalizedAssetsWei) / 1e18; + const have = Number(availableBalanceWei) / 1e18; + const deficit = need - have; + const covered = deficit <= 0; + const fields = [ + { name: 'Vault', value: vaultAddress, inline: false }, + { name: 'Requests', value: String(count), inline: true }, + { name: 'ETH pending', value: `${need.toFixed(4)} ETH`, inline: true }, + { name: 'Unstaked in vault', value: `${have.toFixed(4)} ETH`, inline: true }, + ]; + if (!covered) { + fields.push({ name: '⚠️ Exit from validators', value: `${deficit.toFixed(4)} ETH`, inline: true }); + } + await sendDiscordEmbed(webhookUrl, { + title: `⚠️ Withdrawal Requests Pending (${vaultName})`, + description: covered + ? `Vault **${vaultName}** has unfinalized withdrawal requests. The vault has enough balance to cover them.` + : `Vault **${vaultName}** has unfinalized withdrawal requests. The vault does **NOT** have enough balance. You need to exit **${deficit.toFixed(4)} ETH** from validators.`, + color: covered ? COLORS.warning : COLORS.critical, + fields, + }); +} + +/** + * Send alert for low health factor (warning threshold). + */ +export async function sendHealthWarningAlert(webhookUrl, cooldownMs, vaultName, vaultAddress, healthFactorPct, threshold) { + const key = `health-warning:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + await sendDiscordEmbed(webhookUrl, { + title: `⚠️ Health Factor Low (${vaultName})`, + description: `Vault **${vaultName}** health factor is below ${threshold}%.`, + color: COLORS.warning, + fields: [ + { name: 'Vault', value: vaultAddress, inline: false }, + { name: 'Health factor', value: `${healthFactorPct.toFixed(2)}%`, inline: true }, + { name: 'Threshold', value: `${threshold}%`, inline: true }, + ], + }); +} + +/** + * Send alert for critical health factor. + */ +export async function sendHealthCriticalAlert(webhookUrl, cooldownMs, vaultName, vaultAddress, healthFactorPct, threshold) { + const key = `health-critical:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + await sendDiscordEmbed(webhookUrl, { + title: `🔴 Health Factor Critical (${vaultName})`, + description: `Vault **${vaultName}** health factor is below ${threshold}%. Forced rebalance may apply.`, + color: COLORS.critical, + fields: [ + { name: 'Vault', value: vaultAddress, inline: false }, + { name: 'Health factor', value: `${healthFactorPct.toFixed(2)}%`, inline: true }, + ], + }); +} + +/** + * Send alert for forced rebalance (health shortfall > 0). + */ +export async function sendForcedRebalanceAlert(webhookUrl, cooldownMs, vaultName, vaultAddress, healthShortfallShares) { + const key = `forced-rebalance:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + await sendDiscordEmbed(webhookUrl, { + title: `🔴 Forced Rebalance Required (${vaultName})`, + description: `Vault **${vaultName}** has health shortfall. Rebalancing is required.`, + color: COLORS.critical, + fields: [ + { name: 'Vault', value: vaultAddress, inline: false }, + { name: 'Health shortfall (shares)', value: String(healthShortfallShares), inline: true }, + ], + }); +} + +/** + * Send alert for high utilization ratio. + */ +export async function sendUtilizationHighAlert(webhookUrl, cooldownMs, vaultName, vaultAddress, utilizationPct, threshold) { + const key = `utilization-high:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + await sendDiscordEmbed(webhookUrl, { + title: `⚠️ Utilization Ratio High (${vaultName})`, + description: `Vault **${vaultName}** utilization is above ${threshold}%.`, + color: COLORS.warning, + fields: [ + { name: 'Vault', value: vaultAddress, inline: false }, + { name: 'Utilization', value: `${utilizationPct.toFixed(2)}%`, inline: true }, + ], + }); +} + +/** + * Send alert for stale oracle report. + */ +export async function sendReportStaleAlert(webhookUrl, cooldownMs, vaultName, vaultAddress) { + const key = `report-stale:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + await sendDiscordEmbed(webhookUrl, { + title: `⚠️ Oracle Report Stale (${vaultName})`, + description: `Vault **${vaultName}** oracle report is no longer fresh. Submit a report if needed.`, + color: COLORS.warning, + fields: [{ name: 'Vault', value: vaultAddress, inline: false }], + }); +} + +/** + * Send alert for vault not healthy (isVaultHealthy false). + */ +export async function sendVaultUnhealthyAlert(webhookUrl, cooldownMs, vaultName, vaultAddress) { + const key = `vault-unhealthy:${vaultAddress}`; + if (!shouldSendAlert(key, cooldownMs)) return; + await sendDiscordEmbed(webhookUrl, { + title: `🔴 Vault Unhealthy (${vaultName})`, + description: `Vault **${vaultName}** is not healthy. Check health factor and consider rebalancing.`, + color: COLORS.critical, + fields: [{ name: 'Vault', value: vaultAddress, inline: false }], + }); +} diff --git a/tests/abis.test.js b/tests/abis.test.js new file mode 100644 index 0000000..c775fe7 --- /dev/null +++ b/tests/abis.test.js @@ -0,0 +1,25 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + vaultHubAbi, + vaultConnectionAbi, + stakingVaultAbi, + withdrawalQueueAbi, + poolAbi, + stEthAbi, +} from "../src/abis.js"; + +test("all ABI exports are non-empty arrays", () => { + for (const abi of [vaultHubAbi, vaultConnectionAbi, stakingVaultAbi, withdrawalQueueAbi, poolAbi, stEthAbi]) { + assert.equal(Array.isArray(abi), true); + assert.equal(abi.length > 0, true); + } +}); + +test("vaultConnectionAbi contains tuple output with expected fields", () => { + const item = vaultConnectionAbi[0]; + assert.equal(item.name, "vaultConnection"); + assert.equal(item.outputs[0].type, "tuple"); + assert.equal(item.outputs[0].components.some((c) => c.name === "forcedRebalanceThresholdBP"), true); + assert.equal(item.outputs[0].components.some((c) => c.name === "reserveRatioBP"), true); +}); diff --git a/tests/config.test.js b/tests/config.test.js new file mode 100644 index 0000000..81e993d --- /dev/null +++ b/tests/config.test.js @@ -0,0 +1,134 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { loadConfig } from "../src/config.js"; + +const VALID_ADDR_A = "0x1111111111111111111111111111111111111111"; +const VALID_ADDR_B = "0x2222222222222222222222222222222222222222"; +const ORIGINAL_ENV = process.env; + +function baseEnv() { + return { + RPC_URL: "https://rpc.example", + CHAIN: "mainnet", + VAULT_CONFIGS: JSON.stringify([{ vault: VALID_ADDR_A, vault_name: "vault-a", pool: VALID_ADDR_B }]), + }; +} + +function setEnv(newEnv) { + process.env = { ...newEnv }; +} + +test.after(() => { + process.env = ORIGINAL_ENV; +}); + +test("loadConfig parses valid minimum configuration and defaults", () => { + setEnv(baseEnv()); + const cfg = loadConfig(); + + assert.equal(cfg.rpcUrl, "https://rpc.example"); + assert.equal(cfg.chainId, 1); + assert.equal(cfg.chain, "mainnet"); + assert.equal(cfg.metricsPort, 9600); + assert.equal(cfg.pollIntervalMs, 60_000); + assert.equal(cfg.alertCooldownMs, 30 * 60_000); + assert.equal(cfg.healthWarningThreshold, 107); + assert.equal(cfg.healthCriticalThreshold, 102); + assert.equal(cfg.vaults.length, 1); +}); + +test("loadConfig throws when required env var is missing", () => { + const env = baseEnv(); + delete env.RPC_URL; + setEnv(env); + assert.throws(() => loadConfig(), /Missing required env vars: RPC_URL/); +}); + +test("loadConfig throws when CHAIN is unsupported", () => { + const env = baseEnv(); + env.CHAIN = "sepolia"; + setEnv(env); + assert.throws(() => loadConfig(), /Unsupported CHAIN "sepolia"/); +}); + +test("loadConfig throws for invalid VAULT_CONFIGS JSON", () => { + const env = baseEnv(); + env.VAULT_CONFIGS = "{not-json"; + setEnv(env); + assert.throws(() => loadConfig(), /VAULT_CONFIGS must be a valid JSON array/); +}); + +test("loadConfig throws for empty VAULT_CONFIGS array", () => { + const env = baseEnv(); + env.VAULT_CONFIGS = "[]"; + setEnv(env); + assert.throws(() => loadConfig(), /VAULT_CONFIGS must be a non-empty JSON array/); +}); + +test("loadConfig throws for invalid vault address", () => { + const env = baseEnv(); + env.VAULT_CONFIGS = JSON.stringify([{ vault: "0x1234", vault_name: "x" }]); + setEnv(env); + assert.throws(() => loadConfig(), /vault must be a valid 0x40-hex address/); +}); + +test("loadConfig accepts vault without pool", () => { + const env = baseEnv(); + env.VAULT_CONFIGS = JSON.stringify([{ vault: VALID_ADDR_A, vault_name: "no-pool" }]); + setEnv(env); + const cfg = loadConfig(); + assert.equal(cfg.vaults[0].pool, ""); + assert.equal(cfg.vaults[0].vault_name, "no-pool"); +}); + +test("loadConfig ignores label key and falls back to generated vault_name", () => { + const env = baseEnv(); + env.VAULT_CONFIGS = JSON.stringify([{ vault: VALID_ADDR_A, label: "legacy-name", pool: VALID_ADDR_B }]); + setEnv(env); + const cfg = loadConfig(); + assert.equal(cfg.vaults[0].vault_name, "vault-0"); +}); + +test("loadConfig picks optional overrides from env", () => { + const env = baseEnv(); + env.POLL_INTERVAL_MIN = "2.5"; + env.METRICS_PORT = "9700"; + env.ALERT_COOLDOWN_MIN = "10"; + env.INACTIVE_ETH_THRESHOLD = "4200"; + env.HEALTH_WARNING_THRESHOLD = "130"; + env.HEALTH_CRITICAL_THRESHOLD = "110"; + env.UTILIZATION_WARNING_THRESHOLD = "96"; + env.FORCED_REBALANCE_THRESHOLD_BP = "900"; + setEnv(env); + + const cfg = loadConfig(); + assert.equal(cfg.pollIntervalMs, 150_000); + assert.equal(cfg.metricsPort, 9700); + assert.equal(cfg.alertCooldownMs, 600_000); + assert.equal(cfg.inactiveEthThresholdWei, 4200n * 10n ** 18n); + assert.equal(cfg.healthWarningThreshold, 130); + assert.equal(cfg.healthCriticalThreshold, 110); + assert.equal(cfg.utilizationWarningThreshold, 96); + assert.equal(cfg.forcedRebalanceThresholdBP, 900); +}); + +test("loadConfig throws for empty INACTIVE_ETH_THRESHOLD", () => { + const env = baseEnv(); + env.INACTIVE_ETH_THRESHOLD = ""; + setEnv(env); + assert.throws(() => loadConfig(), /INACTIVE_ETH_THRESHOLD must not be empty/); +}); + +test("loadConfig throws for invalid INACTIVE_ETH_THRESHOLD", () => { + const env = baseEnv(); + env.INACTIVE_ETH_THRESHOLD = "2..5"; + setEnv(env); + assert.throws(() => loadConfig(), /INACTIVE_ETH_THRESHOLD is invalid/); +}); + +test("loadConfig throws for scientific notation in INACTIVE_ETH_THRESHOLD", () => { + const env = baseEnv(); + env.INACTIVE_ETH_THRESHOLD = "32e18"; + setEnv(env); + assert.throws(() => loadConfig(), /INACTIVE_ETH_THRESHOLD is invalid/); +}); diff --git a/tests/grafana/build.test.ts b/tests/grafana/build.test.ts new file mode 100644 index 0000000..b00c508 --- /dev/null +++ b/tests/grafana/build.test.ts @@ -0,0 +1,36 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { pathToFileURL } from "node:url"; + +function readBuiltDashboard() { + const filePath = resolve("grafana", "dashboard.json"); + return JSON.parse(readFileSync(filePath, "utf8")); +} + +test("build script produces patched Contracts panel, explorer_base variable and logs syntax highlighting", async () => { + const buildPath = resolve("src", "grafana", "build.ts"); + await import(`${pathToFileURL(buildPath).href}?test=${Date.now()}-${Math.random()}`); + + const dashboard = readBuiltDashboard(); + const contracts = dashboard.panels.find((p: any) => p.title === "Contracts"); + assert.equal(contracts?.type, "table"); + + const vars = dashboard.templating?.list ?? []; + const explorerVar = vars.find((v: any) => v.name === "explorer_base"); + assert.equal(explorerVar?.type, "query"); + + const logs = dashboard.panels.find((p: any) => p.title === "Watcher logs"); + assert.equal(logs?.options?.syntaxHighlighting, true); + + // Verify that SDK-generated datasource variables are removed from templating.list + // (datasource selection is handled via __inputs at import time instead). + assert.equal(vars.find((v: any) => v.name === "DS_PROMETHEUS"), undefined, 'DS_PROMETHEUS must not appear in templating.list'); + assert.equal(vars.find((v: any) => v.name === "DS_LOKI"), undefined, 'DS_LOKI must not appear in templating.list'); + + // Verify that __inputs declares both datasource placeholders so Grafana prompts on import. + const inputs: any[] = dashboard.__inputs ?? []; + assert.equal(inputs.some((i: any) => i.name === "DS_PROMETHEUS" && i.pluginId === "prometheus"), true, 'missing DS_PROMETHEUS in __inputs'); + assert.equal(inputs.some((i: any) => i.name === "DS_LOKI" && i.pluginId === "loki"), true, 'missing DS_LOKI in __inputs'); +}); diff --git a/tests/grafana/dashboard.test.ts b/tests/grafana/dashboard.test.ts new file mode 100644 index 0000000..ece350a --- /dev/null +++ b/tests/grafana/dashboard.test.ts @@ -0,0 +1,40 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { buildDashboard } from "../../src/grafana/dashboard.ts"; + +function getPanels(dashboard: any) { + return dashboard.panels ?? []; +} + +test("buildDashboard returns base dashboard shape", () => { + const dashboard: any = buildDashboard(); + assert.equal(typeof dashboard.schemaVersion, "number"); + assert.equal(Array.isArray(dashboard.templating?.list), true); + assert.equal(Array.isArray(getPanels(dashboard)), true); + assert.equal(getPanels(dashboard).length > 0, true); +}); + +test("buildDashboard includes key template variables", () => { + const dashboard: any = buildDashboard(); + const vars = dashboard.templating.list.map((v: any) => v.name); + // datasource vars are named DS_PROMETHEUS / DS_LOKI (used as __inputs placeholders); + // build.ts removes them from templating.list, but dashboard.ts still emits them. + assert.equal(vars.includes("DS_PROMETHEUS"), true); + assert.equal(vars.includes("chain"), true); + assert.equal(vars.includes("vault_name"), true); + assert.equal(vars.includes("DS_LOKI"), true); +}); + +test("buildDashboard includes key panels by title", () => { + const dashboard: any = buildDashboard(); + const titles = getPanels(dashboard).map((p: any) => p.title); + for (const title of [ + "Watcher version", + "Health factor", + "Withdrawal deficit", + "Contracts", + "Watcher logs", + ]) { + assert.equal(titles.includes(title), true, `missing panel: ${title}`); + } +}); diff --git a/tests/grafana/panels.test.ts b/tests/grafana/panels.test.ts new file mode 100644 index 0000000..daf7bc6 --- /dev/null +++ b/tests/grafana/panels.test.ts @@ -0,0 +1,43 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { DATASOURCE_VAR, gaugePanel, statPanel, timeseriesPanel } from "../../src/grafana/panels.ts"; + +test("DATASOURCE_VAR keeps expected variable name", () => { + assert.equal(DATASOURCE_VAR, "DS_PROMETHEUS"); +}); + +test("statPanel builds stat panel config with expression", () => { + const panel: any = statPanel({ + title: "StatTest", + expr: "up", + unit: "short", + }).build(); + + assert.equal(panel.type, "stat"); + assert.equal(panel.title, "StatTest"); + assert.equal(panel.targets[0].expr, "up"); +}); + +test("gaugePanel builds gauge panel config with expression", () => { + const panel: any = gaugePanel({ + title: "GaugeTest", + expr: "up", + min: 0, + max: 100, + }).build(); + + assert.equal(panel.type, "gauge"); + assert.equal(panel.title, "GaugeTest"); + assert.equal(panel.targets[0].expr, "up"); +}); + +test("timeseriesPanel builds timeseries panel config with expression", () => { + const panel: any = timeseriesPanel({ + title: "TimeseriesTest", + expr: "up", + }).build(); + + assert.equal(panel.type, "timeseries"); + assert.equal(panel.title, "TimeseriesTest"); + assert.equal(panel.targets[0].expr, "up"); +}); diff --git a/tests/metrics/definitions.test.js b/tests/metrics/definitions.test.js new file mode 100644 index 0000000..5694e9b --- /dev/null +++ b/tests/metrics/definitions.test.js @@ -0,0 +1,46 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + register, + vaultLabels, + vaultTotalValueEth, + watcherInfo, + vaultContractsInfo, +} from "../../src/metrics/definitions.js"; + +test("vaultLabels returns expected labels object", () => { + assert.deepEqual(vaultLabels("0xabc", "vault-a", "mainnet"), { + vault: "0xabc", + vault_name: "vault-a", + chain: "mainnet", + }); +}); + +test("register contains expected metric names", async () => { + const metrics = await register.getMetricsAsJSON(); + const names = new Set(metrics.map((m) => m.name)); + + for (const requiredName of [ + "lido_vault_total_value_eth", + "lido_vault_health_factor", + "lido_wq_unfinalized_requests", + "lido_vault_contracts_info", + "stvaults_watcher_info", + "stvaults_watcher_poll_errors_total", + ]) { + assert.equal(names.has(requiredName), true, `missing metric: ${requiredName}`); + } +}); + +test("key metric objects expose expected label sets", () => { + assert.deepEqual(vaultTotalValueEth.labelNames, ["vault", "vault_name", "chain"]); + assert.deepEqual(watcherInfo.labelNames, ["version", "chain", "explorer_url"]); + assert.deepEqual(vaultContractsInfo.labelNames, [ + "vault_name", + "chain", + "vault_addr", + "pool_addr", + "wq_addr", + "dashboard_addr", + ]); +}); diff --git a/tests/metrics/server.test.js b/tests/metrics/server.test.js new file mode 100644 index 0000000..f6aabdb --- /dev/null +++ b/tests/metrics/server.test.js @@ -0,0 +1,21 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { once } from "node:events"; +import { createMetricsServer } from "../../src/metrics/server.js"; +import { register } from "../../src/metrics/definitions.js"; + +test("createMetricsServer serves /metrics and returns 404 for unknown path", async () => { + register.resetMetrics(); + const server = createMetricsServer(0); + await once(server, "listening"); + + const { port } = server.address(); + const metricsResponse = await fetch(`http://127.0.0.1:${port}/metrics`); + assert.equal(metricsResponse.status, 200); + assert.match(metricsResponse.headers.get("content-type"), /text\/plain/); + + const unknownResponse = await fetch(`http://127.0.0.1:${port}/unknown`); + assert.equal(unknownResponse.status, 404); + + await new Promise((resolve) => server.close(resolve)); +}); diff --git a/tests/monitors/efficiencyMonitor.test.js b/tests/monitors/efficiencyMonitor.test.js new file mode 100644 index 0000000..b1c2bd5 --- /dev/null +++ b/tests/monitors/efficiencyMonitor.test.js @@ -0,0 +1,21 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { computeInactiveEthWei, isInactiveEthAboveThreshold } from "../../src/monitors/efficiencyMonitor.js"; + +test("computeInactiveEthWei returns difference when available exceeds staged", () => { + assert.equal(computeInactiveEthWei(10n, 4n), 6n); +}); + +test("computeInactiveEthWei returns zero when available is lower", () => { + assert.equal(computeInactiveEthWei(4n, 10n), 0n); +}); + +test("computeInactiveEthWei returns zero when values are equal", () => { + assert.equal(computeInactiveEthWei(10n, 10n), 0n); +}); + +test("isInactiveEthAboveThreshold returns true only when strictly above threshold", () => { + assert.equal(isInactiveEthAboveThreshold(11n, 10n), true); + assert.equal(isInactiveEthAboveThreshold(10n, 10n), false); + assert.equal(isInactiveEthAboveThreshold(9n, 10n), false); +}); diff --git a/tests/monitors/healthMonitor.test.js b/tests/monitors/healthMonitor.test.js new file mode 100644 index 0000000..e3a2cef --- /dev/null +++ b/tests/monitors/healthMonitor.test.js @@ -0,0 +1,33 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { computeHealthFactorPct, computeUtilizationRatioPct } from "../../src/monitors/healthMonitor.js"; + +test("computeHealthFactorPct returns Infinity when liability is zero (no minted stETH)", () => { + const value = computeHealthFactorPct(10n * 10n ** 18n, 1000, 0n); + assert.equal(value, Infinity); +}); + +test("computeHealthFactorPct computes percentage and rounds to 2 decimals", () => { + const value = computeHealthFactorPct(200n * 10n ** 18n, 1000, 100n * 10n ** 18n); + assert.equal(value, 180); +}); + +test("computeHealthFactorPct clamps negative values to zero", () => { + const value = computeHealthFactorPct(0n, 1000, 100n * 10n ** 18n); + assert.equal(value, 0); +}); + +test("computeUtilizationRatioPct returns 0 when capacity is zero", () => { + const value = computeUtilizationRatioPct(25n, 0n); + assert.equal(value, 0); +}); + +test("computeUtilizationRatioPct returns expected percentage", () => { + const value = computeUtilizationRatioPct(25n, 100n); + assert.equal(value, 25); +}); + +test("computeUtilizationRatioPct returns 100 when fully utilized", () => { + const value = computeUtilizationRatioPct(100n, 100n); + assert.equal(value, 100); +}); diff --git a/tests/monitors/vaultMonitor.test.js b/tests/monitors/vaultMonitor.test.js new file mode 100644 index 0000000..441b4d1 --- /dev/null +++ b/tests/monitors/vaultMonitor.test.js @@ -0,0 +1,229 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { pollVaults, resolvePoolAddresses } from "../../src/monitors/vaultMonitor.js"; +import { register } from "../../src/metrics/definitions.js"; + +const ADDR_VAULT = "0x1111111111111111111111111111111111111111"; +const ADDR_POOL = "0x2222222222222222222222222222222222222222"; +const ADDR_WQ = "0x3333333333333333333333333333333333333333"; +const ADDR_DASH = "0x4444444444444444444444444444444444444444"; +const ADDR_STETH = "0x5555555555555555555555555555555555555555"; +const ADDR_HUB = "0x6666666666666666666666666666666666666666"; +const ADDR_PDG = "0x7777777777777777777777777777777777777777"; +const ADDR_NODE_OPERATOR = "0x8888888888888888888888888888888888888888"; + +test.beforeEach(() => { + register.resetMetrics(); +}); + +test("resolvePoolAddresses returns configured addresses without on-chain reads", async () => { + const client = { + async readContract() { + throw new Error("should not be called"); + }, + }; + + const result = await resolvePoolAddresses(client, ADDR_POOL, { + withdrawalQueue: ADDR_WQ, + dashboard: ADDR_DASH, + }); + + assert.deepEqual(result, { withdrawalQueue: ADDR_WQ, dashboard: ADDR_DASH }); +}); + +test("resolvePoolAddresses fetches addresses from pool when missing", async () => { + const calls = []; + const client = { + async readContract(req) { + calls.push(req.functionName); + if (req.functionName === "WITHDRAWAL_QUEUE") return ADDR_WQ; + if (req.functionName === "DASHBOARD") return ADDR_DASH; + throw new Error(`unexpected function: ${req.functionName}`); + }, + }; + + const result = await resolvePoolAddresses(client, ADDR_POOL, {}); + assert.deepEqual(result, { withdrawalQueue: ADDR_WQ, dashboard: ADDR_DASH }); + assert.deepEqual(calls.sort(), ["DASHBOARD", "WITHDRAWAL_QUEUE"]); +}); + +test("pollVaults returns snapshot and updates Prometheus metrics", async () => { + const readContract = async (req) => { + switch (req.functionName) { + case "totalValue": + return 200n * 10n ** 18n; + case "isVaultHealthy": + return true; + case "healthShortfallShares": + return 0n; + case "liabilityShares": + return 100n; + case "totalMintingCapacityShares": + return 200n; + case "isReportFresh": + return true; + case "withdrawableValue": + return 20n * 10n ** 18n; + case "vaultConnection": + return { forcedRebalanceThresholdBP: 1000, reserveRatioBP: 250 }; + case "availableBalance": + return 15n * 10n ** 18n; + case "stagedBalance": + return 3n * 10n ** 18n; + case "nodeOperator": + return ADDR_NODE_OPERATOR; + case "accruedFee": + return 29500000000000000n; + case "pdgPolicy": + return 2n; + case "getPooledEthByShares": + return req.args[0] * 10n ** 18n; + case "nodeOperatorBalance": + // viem returns multiple named outputs as a plain array at runtime, not a named object + return [5n * 10n ** 18n, 2n * 10n ** 18n]; + case "unlockedBalance": + return 3n * 10n ** 18n; + case "pendingActivations": + return 4n; + case "unfinalizedRequestsNumber": + return 2n; + case "unfinalizedAssets": + return 4n * 10n ** 18n; + case "getLastRequestId": + return 10n; + case "getLastFinalizedRequestId": + return 8n; + default: + throw new Error(`unexpected functionName: ${req.functionName}`); + } + }; + + const snapshots = await pollVaults( + { readContract }, + { chain: "mainnet", forcedRebalanceThresholdBP: 900, pdgAddress: ADDR_PDG }, + [{ vault: ADDR_VAULT, pool: ADDR_POOL, vault_name: "vault-a", withdrawalQueue: ADDR_WQ, dashboard: ADDR_DASH }], + ADDR_STETH, + ADDR_HUB + ); + + assert.equal(snapshots.length, 1); + assert.equal(snapshots[0].vault_name, "vault-a"); + assert.equal(snapshots[0].healthFactorPct, 180); + assert.equal(snapshots[0].utilizationPct, 50); + assert.equal(snapshots[0].unfinalizedRequests, 2n); + assert.equal(snapshots[0].pdgTotalWei, 5n * 10n ** 18n); + assert.equal(snapshots[0].pdgLockedWei, 2n * 10n ** 18n); + assert.equal(snapshots[0].pdgUnlockedWei, 3n * 10n ** 18n); + assert.equal(snapshots[0].pdgPendingActivations, 4n); + assert.equal(snapshots[0].pdgPolicy, 2n); + assert.equal(snapshots[0].nodeOperator, ADDR_NODE_OPERATOR); + + const metrics = await register.metrics(); + assert.match(metrics, /lido_vault_total_value_eth/); + assert.match(metrics, /lido_vault_inactive_eth/); + assert.match(metrics, /lido_vault_node_operator_fee_eth/); + assert.match(metrics, /lido_vault_pdg_total_eth/); + assert.match(metrics, /lido_vault_pdg_locked_eth/); + assert.match(metrics, /lido_vault_pdg_unlocked_eth/); + assert.match(metrics, /lido_vault_pdg_pending_activations/); + assert.match(metrics, /lido_vault_pdg_policy/); + assert.match(metrics, /lido_wq_unfinalized_requests/); + assert.match(metrics, /vault_name="vault-a"/); +}); + +test("PDG metrics are not NaN when nodeOperatorBalance returns array (viem runtime format)", async () => { + const readContract = async (req) => { + switch (req.functionName) { + case "totalValue": return 100n * 10n ** 18n; + case "isVaultHealthy": return true; + case "healthShortfallShares": return 0n; + case "liabilityShares": return 0n; + case "totalMintingCapacityShares": return 100n; + case "isReportFresh": return true; + case "withdrawableValue": return 10n * 10n ** 18n; + case "vaultConnection": return { forcedRebalanceThresholdBP: 1000, reserveRatioBP: 0 }; + case "availableBalance": return 5n * 10n ** 18n; + case "stagedBalance": return 1n * 10n ** 18n; + case "nodeOperator": return ADDR_NODE_OPERATOR; + case "accruedFee": return 0n; + case "pdgPolicy": return 0n; + case "getPooledEthByShares": return req.args[0]; + case "nodeOperatorBalance": + // Simulate viem array return (must NOT use .total / .locked — would be undefined) + return [3n * 10n ** 18n, 1n * 10n ** 18n]; + case "unlockedBalance": return 2n * 10n ** 18n; + case "pendingActivations": return 0n; + case "unfinalizedRequestsNumber": return 0n; + case "unfinalizedAssets": return 0n; + case "getLastRequestId": return 0n; + case "getLastFinalizedRequestId": return 0n; + default: throw new Error(`unexpected functionName: ${req.functionName}`); + } + }; + + const snapshots = await pollVaults( + { readContract }, + { chain: "hoodi", forcedRebalanceThresholdBP: 1000, pdgAddress: ADDR_PDG }, + [{ vault: ADDR_VAULT, vault_name: "vault-b", withdrawalQueue: ADDR_WQ, dashboard: ADDR_DASH }], + ADDR_STETH, + ADDR_HUB + ); + + const snap = snapshots[0]; + + // Core regression: must never be NaN or undefined + assert.ok(!Number.isNaN(Number(snap.pdgTotalWei)), "pdgTotalWei must not be NaN"); + assert.ok(!Number.isNaN(Number(snap.pdgLockedWei)), "pdgLockedWei must not be NaN"); + assert.ok(!Number.isNaN(Number(snap.pdgUnlockedWei)), "pdgUnlockedWei must not be NaN"); + assert.notEqual(snap.pdgTotalWei, undefined, "pdgTotalWei must not be undefined"); + assert.notEqual(snap.pdgLockedWei, undefined, "pdgLockedWei must not be undefined"); + + assert.equal(snap.pdgTotalWei, 3n * 10n ** 18n); + assert.equal(snap.pdgLockedWei, 1n * 10n ** 18n); + assert.equal(snap.pdgUnlockedWei, 2n * 10n ** 18n); + + // Verify Prometheus metrics are also not NaN + const metrics = await register.metrics(); + assert.doesNotMatch(metrics, /lido_vault_pdg_total_eth.*NaN/, "pdg_total_eth must not be NaN in Prometheus output"); + assert.doesNotMatch(metrics, /lido_vault_pdg_locked_eth.*NaN/, "pdg_locked_eth must not be NaN in Prometheus output"); +}); + +test("PDG metrics default to zero when pdgAddress is not configured", async () => { + const readContract = async (req) => { + switch (req.functionName) { + case "totalValue": return 100n * 10n ** 18n; + case "isVaultHealthy": return true; + case "healthShortfallShares": return 0n; + case "liabilityShares": return 0n; + case "totalMintingCapacityShares": return 100n; + case "isReportFresh": return true; + case "withdrawableValue": return 10n * 10n ** 18n; + case "vaultConnection": return { forcedRebalanceThresholdBP: 1000, reserveRatioBP: 0 }; + case "availableBalance": return 5n * 10n ** 18n; + case "stagedBalance": return 1n * 10n ** 18n; + case "nodeOperator": return ADDR_NODE_OPERATOR; + case "accruedFee": return 0n; + case "pdgPolicy": return 0n; + case "getPooledEthByShares": return req.args[0]; + case "unfinalizedRequestsNumber": return 0n; + case "unfinalizedAssets": return 0n; + case "getLastRequestId": return 0n; + case "getLastFinalizedRequestId": return 0n; + default: throw new Error(`unexpected functionName: ${req.functionName}`); + } + }; + + const snapshots = await pollVaults( + { readContract }, + { chain: "hoodi", forcedRebalanceThresholdBP: 1000, pdgAddress: null }, + [{ vault: ADDR_VAULT, vault_name: "vault-c", withdrawalQueue: ADDR_WQ, dashboard: ADDR_DASH }], + ADDR_STETH, + ADDR_HUB + ); + + const snap = snapshots[0]; + assert.equal(snap.pdgTotalWei, 0n); + assert.equal(snap.pdgLockedWei, 0n); + assert.equal(snap.pdgUnlockedWei, 0n); + assert.equal(snap.pdgPendingActivations, 0n); +}); diff --git a/tests/monitors/withdrawalMonitor.test.js b/tests/monitors/withdrawalMonitor.test.js new file mode 100644 index 0000000..05db2ec --- /dev/null +++ b/tests/monitors/withdrawalMonitor.test.js @@ -0,0 +1,12 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { hasUnfinalizedRequests } from "../../src/monitors/withdrawalMonitor.js"; + +test("hasUnfinalizedRequests returns false for zero", () => { + assert.equal(hasUnfinalizedRequests(0n), false); +}); + +test("hasUnfinalizedRequests returns true for positive values", () => { + assert.equal(hasUnfinalizedRequests(1n), true); + assert.equal(hasUnfinalizedRequests(999999999n), true); +}); diff --git a/tests/notifications/discord.test.js b/tests/notifications/discord.test.js new file mode 100644 index 0000000..59b417a --- /dev/null +++ b/tests/notifications/discord.test.js @@ -0,0 +1,138 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +const ORIGINAL_FETCH = globalThis.fetch; + +async function loadDiscordModule() { + return import(`../../src/notifications/discord.js?test=${Date.now()}-${Math.random()}`); +} + +test.after(() => { + globalThis.fetch = ORIGINAL_FETCH; +}); + +test("shouldSendAlert applies cooldown by alert key", async () => { + const { shouldSendAlert } = await loadDiscordModule(); + const originalNow = Date.now; + let now = 1000; + Date.now = () => now; + + assert.equal(shouldSendAlert("k1", 300), true); + assert.equal(shouldSendAlert("k1", 300), false); + now = 1401; + assert.equal(shouldSendAlert("k1", 300), true); + + Date.now = originalNow; +}); + +test("sendDiscordEmbed sends POST body and propagates webhook errors", async () => { + const { sendDiscordEmbed } = await loadDiscordModule(); + const calls = []; + globalThis.fetch = async (url, options) => { + calls.push({ url, options }); + return { + ok: true, + status: 204, + text: async () => "", + }; + }; + + await sendDiscordEmbed("https://discord.example/webhook", { + title: "Alert", + color: 123, + fields: [{ name: "A", value: "B" }], + }); + + assert.equal(calls.length, 1); + assert.equal(calls[0].url, "https://discord.example/webhook"); + assert.equal(calls[0].options.method, "POST"); + + globalThis.fetch = async () => ({ + ok: false, + status: 400, + text: async () => "bad payload", + }); + + await assert.rejects( + () => + sendDiscordEmbed("https://discord.example/webhook", { + title: "Broken", + color: 1, + }), + /Discord webhook failed 400: bad payload/ + ); +}); + +test("setWebhookIdentity injects username and avatar_url in payload", async () => { + const { setWebhookIdentity, sendDiscordEmbed } = await loadDiscordModule(); + let payload = null; + globalThis.fetch = async (_url, options) => { + payload = JSON.parse(options.body); + return { ok: true, status: 204, text: async () => "" }; + }; + + setWebhookIdentity({ username: "BotName", avatarUrl: "https://img.example/a.png" }); + await sendDiscordEmbed("https://discord.example/webhook", { title: "T", color: 1 }); + + assert.equal(payload.username, "BotName"); + assert.equal(payload.avatar_url, "https://img.example/a.png"); + assert.equal(Array.isArray(payload.embeds), true); +}); + +test("sendInactiveEthAlert sends once within cooldown", async () => { + const { sendInactiveEthAlert } = await loadDiscordModule(); + const originalNow = Date.now; + let now = 10_000; + Date.now = () => now; + + let callCount = 0; + let title = ""; + globalThis.fetch = async (_url, options) => { + callCount += 1; + const body = JSON.parse(options.body); + title = body.embeds[0].title; + return { ok: true, status: 204, text: async () => "" }; + }; + + await sendInactiveEthAlert( + "https://discord.example/webhook", + 1000, + "Vault A", + "0x1111111111111111111111111111111111111111", + 5n * 10n ** 18n + ); + await sendInactiveEthAlert( + "https://discord.example/webhook", + 1000, + "Vault A", + "0x1111111111111111111111111111111111111111", + 5n * 10n ** 18n + ); + + assert.equal(callCount, 1); + assert.match(title, /Inefficient ETH/); + + Date.now = originalNow; +}); + +test("sendUnfinalizedRequestsAlert uses critical color when there is deficit", async () => { + const { sendUnfinalizedRequestsAlert } = await loadDiscordModule(); + let color = 0; + globalThis.fetch = async (_url, options) => { + const body = JSON.parse(options.body); + color = body.embeds[0].color; + return { ok: true, status: 204, text: async () => "" }; + }; + + await sendUnfinalizedRequestsAlert( + "https://discord.example/webhook", + 1, + "Vault A", + "0x1111111111111111111111111111111111111111", + 2, + 5n * 10n ** 18n, + 1n * 10n ** 18n + ); + + assert.equal(color, 0xe74c3c); +}); From 7dfe0e6ece1ad28ca5bf75e055aac0c1b4dcca71 Mon Sep 17 00:00:00 2001 From: Anto Date: Mon, 30 Mar 2026 16:44:43 +0200 Subject: [PATCH 02/10] chore: update dashboard threshold values --- grafana/dashboard.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/grafana/dashboard.json b/grafana/dashboard.json index 66b0836..f660bdd 100644 --- a/grafana/dashboard.json +++ b/grafana/dashboard.json @@ -1165,11 +1165,11 @@ "color": "#F2495C" }, { - "value": 102, + "value": 105, "color": "#FF9830" }, { - "value": 107, + "value": 120, "color": "#73BF69" } ] @@ -1515,11 +1515,11 @@ "color": "#F2495C" }, { - "value": 102, + "value": 105, "color": "#FF9830" }, { - "value": 107, + "value": 120, "color": "#73BF69" } ] From d5a40fa340c7f8fef78df1ec1e4b13dc26e7c186 Mon Sep 17 00:00:00 2001 From: Anto Date: Mon, 30 Mar 2026 17:01:42 +0200 Subject: [PATCH 03/10] chore: relocate preview image to static directory --- README.md | 2 +- grafana/preview.png => static/repo-header.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename grafana/preview.png => static/repo-header.png (100%) diff --git a/README.md b/README.md index 04046f8..45152fa 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Monitoring watcher for [Lido V3](https://docs.lido.fi) stVaults with DeFi Wrapper pools. Reads on-chain data via [viem](https://viem.sh), exposes Prometheus metrics, and sends Discord alerts for health and withdrawal events.

- Grafana Dashboard + Grafana Dashboard

## Features diff --git a/grafana/preview.png b/static/repo-header.png similarity index 100% rename from grafana/preview.png rename to static/repo-header.png From 30f492e2e962abbdc7957c28962c7873d05f67ba Mon Sep 17 00:00:00 2001 From: Anto Date: Mon, 30 Mar 2026 17:01:42 +0200 Subject: [PATCH 04/10] chore: relocate preview image to static directory --- README.md | 2 +- grafana/preview.png => static/header.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename grafana/preview.png => static/header.png (100%) diff --git a/README.md b/README.md index 04046f8..45152fa 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Monitoring watcher for [Lido V3](https://docs.lido.fi) stVaults with DeFi Wrapper pools. Reads on-chain data via [viem](https://viem.sh), exposes Prometheus metrics, and sends Discord alerts for health and withdrawal events.

- Grafana Dashboard + Grafana Dashboard

## Features diff --git a/grafana/preview.png b/static/header.png similarity index 100% rename from grafana/preview.png rename to static/header.png From d2ac4c10a055e9fe317e06126ebcfd66b516b7dc Mon Sep 17 00:00:00 2001 From: Anto Date: Mon, 30 Mar 2026 17:07:08 +0200 Subject: [PATCH 05/10] chore: delete static/repo-header.png --- static/repo-header.png | Bin 160046 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 static/repo-header.png diff --git a/static/repo-header.png b/static/repo-header.png deleted file mode 100644 index bee59397a7cf9b5ca288e05b0e316b8379ab2b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160046 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�E%3NOtq?nLZAE*6SY4 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 From 45ed8936ca9100249f1183152702bebe3f048988 Mon Sep 17 00:00:00 2001 From: Anto Date: Mon, 30 Mar 2026 17:16:18 +0200 Subject: [PATCH 06/10] feat: new discord avatar --- README.md | 2 +- src/config.js | 3 ++- static/avatar.png | Bin 0 -> 847429 bytes 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 static/avatar.png diff --git a/README.md b/README.md index 45152fa..71b48d9 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Copy `.env.example` to `.env` and adjust the values. | `METRICS_PORT` | | `9600` | Prometheus metrics port | | `DISCORD_WEBHOOK_URL` | | | Enables Discord alerts when set | | `DISCORD_USERNAME` | | `stvaults-watcher` | Webhook display name for Discord alerts | -| `DISCORD_AVATAR_URL` | | `https://img.lightshot.app/LsNhkD8gRZaPcHK8lJqnWQ.png` | Webhook avatar URL for Discord alerts | +| `DISCORD_AVATAR_URL` | | `static/avatar.png` | Webhook avatar URL for Discord alerts | | `ALERT_COOLDOWN_MIN` | | `30` | Alert cooldown per vault per type (minutes) | | `HEALTH_WARNING_THRESHOLD` | | `107` | Health factor warning level (%) | | `HEALTH_CRITICAL_THRESHOLD` | | `102` | Health factor critical level (%) | diff --git a/src/config.js b/src/config.js index 7c56e3f..b3aa30e 100644 --- a/src/config.js +++ b/src/config.js @@ -22,7 +22,8 @@ const optionalEnvVars = { METRICS_PORT: 9600, ALERT_COOLDOWN_MIN: 30, DISCORD_USERNAME: 'stvaults-watcher', - DISCORD_AVATAR_URL: 'https://img.lightshot.app/LsNhkD8gRZaPcHK8lJqnWQ.png', + DISCORD_AVATAR_URL: + 'https://raw.githubusercontent.com/stakely/stvaults-watcher/main/static/avatar.png', // Default inactive ETH threshold (in ETH). // Note: on-chain comparisons operate in wei, so we convert this when loading config. INACTIVE_ETH_THRESHOLD: 2, diff --git a/static/avatar.png b/static/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..3f513ae3bf096e27df6962a463df45ccfd4b051d GIT binary patch literal 847429 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

eujo=l6#8qFq~f`poEK;L#@d zn1Mz=a4Wz#O3f^=N+UP4HanfirthQz&br}?i0z=yDP&ABcGRIU{N{m)ifj5PPe8?` z@GsB)@#loF|9uP21n&X^6{c$L>g%(=`y6Uw4A`ljw*r~?><2GKou78OQMBuN%1c=O zK*-nef4ObjmH?PJt0G!p)p z!UVo=yVU8#WQ@;+&+E%q&g@^O;Nv8BLWMY7?>@VwX*@`l$N41n8D_E z1?(f~l^rB-tzj6!SWzUn)~fr938Ml!Aizh>t>l>mtWFE|()&h+$KslA^v9R2@Z;b) zoC{OYPCw+n6m07xefkdDBuf(=H92+7CG)*wM9fy~qD$5+-S0vL*c6{|bPf0M$ygeZ zG})P)h?$ZIZ}ChUaq5&*b{Wh!K;@;Gsc?_AJ_l^c)E}19HT7MCND|x@(!QAZDNG?k z=Q@7d1Xd7M%jX?6AAuh3Sj&l`$z=h=5yz#jN((cX0OhlTsjH*vj1Ldnp;~%cnMarN-8z=K@qCu5ffF z#u(YJJ%i+uP*V^*fZZL=mS^nwA+hotU(hV#0V`^sToh&1SXBG*EyA)X}xc@_sq{)BUxYE$d1v|Whr)rqCwdZ?qF;LjAjXx+)Z0Vc@qZd7~f z0IE5-(fwI86&Oc&wrWzVyrYI0*egDpB6AJuV`3vhS?+*Ml}B1C9%+B0$Ah$&l&IBN z*H$)6hAJT9W>YW0prcOi+Kq3f<2O46P2YVzPYqvlJA~{RB3Cr1YhS2XW7d&s2r~~) z_EFDz_KWiL6&`p6$+ax}sqO*N{?b&j)lcl+L7f2r)G0`>CI`=##l>Ampjw++RU2~c zOWCZo*DtNPM|@crHZGKAr{sIr`8;M+`FUbRIfNi#wzt>{#J2X795@R`-=DYh_rCL7 zO+^$Vj~Sx;p(5VUr)B*EXe+#110`y{S^og`c>;en%J}1>!Q-sK?OCkdM|JxE^&feJ<oOkNiOEF4?ZaUyws zKarz2`D_=cbHMqE>(`#qwX@|n z!1`vKB6dmE7ZJk|Q29?#biK4iW1^_zg}F|2c)ki0?WJbF&`9M)_!0ttf_w&Tr_oJut4!XaQ*<#}U6LE9G1**PGcwz+O8$}&fZ#lhqKF6;PKO0D^R3{Er z{4Mht<5_xWr4&-2bJ^f+HVADs8UCGOgfaZR?sK2p$M zRoVP=BmAV}gsNHPD_hQYB{piwc6Y`DcGIM10-yIV@5G4Zf8|M@%BS469kT$w#B?KK zjaGs4hKYgh;r%WsCsFxl;lZ?>46jd*MphZ?V2_<3{Uw}neJ1xFT>8TQ`=@JvT5Eu2 z??mIX+45rMw@6N;&HKN8E_S*;Q-l36k&DSWqOlhz!}x|a@{^X8@L*5UDp^rSU zLT!hDjO=zzdUF~oq|s+?BzQ#tR&js*$-Foy#Ofc?blXcv!0OD%Qg*{|!9r#j62~Pe z)fWgoOj9Q5)#z-fvUB!Zt=E|q(g{St5GR|ls;e!=c^yn@UM`A|k`XvzQt^8uJ7*Hj zrJW4e>OyC8&YaBHGjK}4tVz9B+!Fa1BaB~@5zV+BxT}mi0`X)iubDcfbR9SVMYYxP zWJd2WYNONA&@RTZjb1uAI?L2N4^WZs*|#Ks+)HDuiV8)Sa9bF|jk{?_=qBUzr zlmYVy73`~mT-k}#McIctaV;~AI;An%x)ZlEb$Fyjm_7;tQn9i)>~-O4nm#)@Ts+QR ziH{{eYj^uplkT#g_(y|5L(u(4Dk8#dtx%t)094bZQw2J{JS-)k+w{|)(l&5)v`CIZ zN|{bAZ<&h3Dp>vXt-8yD4CFbIxlw_)p2^ePO|vNVqINy%L{!Fy*(zqv+JWLDuT2^` zs}hEzrkt$)@r6K}L~63Hc704n1*bNMY)=KELXEPa!YndG?p3=# zKi2xbX)OFiNF1zXlVt6$)4ZhkT8)-`#T-}~WNW#qM`y8{GichTpfYh1jOTd}w$>-R zjgbIW)yWcA9f~ib3TbMiXk@Y$<{I%W1Hc<4hyLerV;O8@xIcAgB;BfsRUmbtrIyO( zS*2Tu04#SRIUJ-hPkmnNBWX2TDcaIj7NAh}-&8;}BSKd6I3ZY(cBu)D}8dkzSCsR zbZ50><-Se3!!$lfKDh}l$w8Vw{#l==x@*@6V&FV#%4>Hc%3b16^nv!{(KqaS+7jO* z++HPXr5ONxuWV@>{=D2W?{(f&Vz)M*G^8jQ(Hl*4?Fd{4#VwC8+g8k;OO-cphb7j< zNc|v?XW;a@+BllS4u7V~FSw2Gf}2Am?RuB1jG|qinrWLj6Jv?AEbF_Z_{P;iuMJz$ zG~CTBk7r8xg30EK+zQ-FtX`V`@93kHK;eT`gApTyc`?GIBg+`=Wa+*|Ea-5oL%kGY~db&B1;L*Qxj?0X(Yhj}1$#qLGW2u2|iC#ZB|O>=?oW9Lxpy+T6yhJ7Ygx=Fn1AzNBc;25m=7FE_DZV;(5G9tfV5|&ZIbiPu zNaD&um2HKU7`;@J!$FcCo1+XhH4>hw02vYZ*t(q6FB3Y-=g{(!mIh>rz>ML}4C};f zIE~UORiI^(Q_;cGV$nvR)dJ$@IU&v7YJO zHJdXxN?O+BnYy*KfXe-u<7BT{Ge#WdzV7TRyQOAYc*`%>p4%5&f#DudIzI7-}n% zX&|(bRKio7o*l|n;g>&fr3b&Lx>CgAssj@^R2^_cJQ=9Z4A+z16XEgL zvJb}|BW~rQE7hpSSbG30?~&OqV_g!gsB^F~Az6f(P06v0bL5gi&(Mz23y^1$f7ZP# zfXDx>RmR<;wnRjL*=s`Wvy@TM%B1m9G!zV{tQwLLpJmUiU>WkI`ePPtv`&`W39pz_ zgva9q{CQS)uujFNP?dDX_EdESY+HI_kzy`Q=qYaqt;$n&6mbNg%33wO?Tk~(RJov| zj-MH`4E?*y-`mwxuX^NwP&kBvV7S6kl_@GOFyo9})R&p67PzCjqozlKrgKkak*1lo zT2zO$ALX_0|7Ol1|Emd>60G((6=1CyX01`;Gia9QROoGy<{0bntm(6) zdFmXeG7ssF?3&-*lQ{lM7?ikDL4{nnJSTY55zzs9(AKtE$~rWo(acOe`_s0pP|j-| z79neYQH3ef)PN!PNK-o#v{lDoeX3>I$~!9<+5KsE`7pE(yB>c66#>l%dZ`T(WwMCx zt*zL33VSLKFOgw0f{`7cGgB>fSrEBmW{o?>MHvchu@>#p{6raoSs%Qsi3tjU-sdgk z((WlE%Pjn-Wtib(2_U+oU70BWmc(0@K=UIQczRtUbiQ&L`iX?xRe~k{@YGcKrv0L= zi;DWObx?-h(|HDx;^9xV@&U0zjex)weTV0{PPvO$kmgg1 zKsa&sg=Q;Si%@OMmU!9`6cl-QaoQw{)qMY zTyf3$y>FBG+W~5Mx}A7q+Hz%-MD%J`oWf2HpqJA8bGM2s#k#+@C#Pi~I)+qwB>kkl z>gHQ^3!t*s#=Q8R<6f=?-m1AlVlSg{bxc=`a#clAH9|$^*j2WPu`LEZw_hJ~EMVGS z)PNm>@AzUy8ZzuM9!yHa-WBLTm1gF}+wWf%EZOxe;;E2T}W-Jz|n3;as*)~Q+4TUD3nyFRR@Z4L>&@j}$$L^_?g)BWv z-?;g9mGL@<+h$^z!K3${)$9OQ0z{b*i-@R>E|HnN+9aJ6Uz%5AV`>RIbk63ho}QTn ze61B8vNqhkWrQu6zZd|MBRgKM1*RV&O;M~C>eif^Cz2FV`Ci=+UGrEA{@!cRZH0O+ z>3nw4OIRFxKTsT4)m+7&Ypvw@u?i=sIh)2Pty?nO7^oKvoJd^Uy@G?$hU4Uh-F~wv zNT9PuL>0IWWkE(W(vY}fj61eM>;_7h`m@%8=HW7_ z@;2ewkWSZlPi8MqKI(PMOA}5#c`PRlNv>ZQ*;)Y>nNjSg3ekKz!Lt_@Ke{e6GA3g|z#Lfh0& z=H-T&!=g&7k;5{Z*k}D&KDTDKy_Ze1t@xs)= zr9gCYxU^Dg{GiH8k#<>wH-Q8WMJ0~%h-$&R8DrPSi{RnmX<_K-Xxo+U^A#j$wtBUh zEC=Aj1=6#{k-$0ZRLZdEb%^B+F-D>w*xVjbQNv^%R9HwS>Dsxgb<(ldY_A?uwpd10 zhzH8#~Wwn({*%Fo-X-zhD!TfJ7ne+F; zc2(sT1qH4NVU=Vib`OoNtI5t4sVc1%Mg;S0gv0=VA(WYkxx4*h(?&32_uHu}a~9{L z8aTkH-XH;B<-t$BCryxsN2_i!k5#|Uihw4nyKR){8*sBSzE$Onw26}S3RhLZA029` zIhgXyR&lscU^X>_+gj_hJfaqUR$YKQ47RKJDT~7+gSC+*`__e*9Y>26S2sd!13-eV zbYF1@cQCg?Ipg6Kf$H0>J5(YsZBXV+#}R~)TKLC`ra(&OI7!Cn9ICUfmB=vrB!)qC z)34i1cFyLy+E2yVTdHE5dT$*^pMp|^Y7?eoWLgo*V9i^_hl)MFV-=QSNb5Z;>|&2p zw5c1lZa)Y$u3zBVPLz>W#izgu1#K|fk zc-lMSoF@wp4(C%hhH4WPv#&l>MX=U{hTc1|9fKPG)IShMPjm6stG3W*ALvE4#A75a zyUA_CTEv=y zw06=X=tPzYlgLxsse^ttr`6uP4oQ-^!y#7#8BI(l*ju5*w#OtdW$(1hq*jZztfJ}e zP%Pzn9>XH-!Q&y#SU{4O*opC3*dO zZwua{cKRnBAgrM}1}TB|xWViGLV1zs{Lb#16#J2hG5yKV%n9G&w^=?yjBb z3b}OGtT(L4E#Qa!KUEr3DpW=_E{o2&c{ zz!bU(aF2HJ(ltm#oE3CmZkxT{fBQ^w{Bau!{}_TGneR-<)CM?$i!)QPfqCPzWqBgx zYHHpiTzwvJ(yOm*<{3(Cj*t)XRHWzUjmZWHGYmFGcucK<*RQ?($*ONsL=f3@E8=nY zpP!#8r~UZP&yTV_I0ZH$`mCEd>)9>7yQ1Yfb*3l}tm2t-iKrtuPF@uNNB1Od{W(dq z-9l$C5dX-TlR1+uYPvo2ii8)h@5i4ZB$=FgsmO6*WUu1hd=rI$RfBPr&VkAph&v1=a} zBp8;%`x7JJb*cK_?w?#oa`v;w&`TIXq0hhoPlf?b`d*}=#ieKFm)TipDy{=Xb@O|U z7r^O9-Bd4{(>}(d3-hgJ=@H>}cVU{h*$e}Ht9N(4Ji))s_oJ?1=sr zdt@r7d`(7RX-htdtk`Y^z=XOe&U!D9u>oVb!bL@QVU%mF4DZeo8ad3GL{%0wt0gtk zcbYxXk(I}y&TvA=?6#qu0IE%2>t7MY1{D0+7a}6mDWHmxP+nI=>@WhC{BJ5qIA#9* zh0L8?3RF(s!T1P}o)fcFkp|Cq^DK&ubJr|NizT?A8 zkYw#Il_AOFGh3f_-|@~2X4i}69Fe@Rra3EaK}hJzzMm>UnIfI0>>kUO0vRgSkU5p3 zv4`!r$oNBVPpKShKuH<9vKdFI6-hp(pq@nXPo{SjzGdxMz_7iIkOE+zxm!;iAZA1~ppXp)#(3q#BUl?rwG(14 z24#~+axY6~#x8xSVTu}=o>CsU&#kKlC1*5eu20PvYMQPveMBBhnv~L1VpPqh1{By4 zyEbMtMpSn%4d_6%ctbBym8Y_LG64SxGd?m6fyEDK3J{liF7wout?YZ9wQ|8~XJRt) z+@C}qP{vL@6hT%PRcU{5z6`RU!T8Bpp(e6-)JO4lAS08>h=Xd{aTOWC zoLpD|aR3z^ym>M;gYUyGtUMgra=14Cv2?pyszq*1X0aaKJQ(!aGqulD(Y_G?2v@Eq zSgL{`07SdgivjG^r=gSvT zdp#pf9%LKbWF}=(!h_4qpC8#Fcc zNvYxb?`>VBz11hOw}B`Wu`>Xc*#?9eoM0Fj*gjHjnczZLo{X*olfcMrgsojYnPLlh zh@!bJlrEb4l|{9B-Nw*yZo?=zbVTgR=(ej92kt@Y0An(q&$6fWFjV8522riwAu+j+ zCT;W{-lSRT`r%FDB5Q{`8S@ zI63DEDUG%BVBH4qD+c=eZC$ z0nE|Y;;mKcdprL-zc(RoF1oINMbRWvmV`vq-rM8mf1G{~b%pscV%zi6O{^Om38Vl@ zK()V$F-R3zkTiZs#;A3$JZHeK@oSpNSAHJY@=^k5iEbo3&(k8_-y;A3AOJ~3K~xh# ziRU}C2Ao0tSJR72kS}VEK-PiMrY!I!d-MKG_zy)vLYcbLI{2^O%D>fuM)*lAQ^yt}9I~;I&${x^Bpy@F$Yx#&(EHrSJ6G#k39T zgukC{{7-6*mG{>G`5(l^kh{+7{-Js1BTd6gKg=r)Hix@D2{fnqe((J0(nT>gF5)C# zzwz(+UZ8dw4M48lb&?Ni=i&9>SAhRO_;0Jv*NH>~VA2(R-MR55E_w!EU29Md_=0&Z z5P#G9t$*eX{rD8y9`;C6V}&R8E`*T_LF0<4qy{UXs+jevwER$^iP{|Ar)7~uXY1s% zMyQQ$@4{)oLH4q4+&xU(OdrU~Wc9TRq&U zKFkO_iU_bHjvQqYAr$AU3^smczN4ZR@@YFthn&l0FZM$mL>-&k00b(2%*c*0y@5-& z1hDfS@{*dctk%KWKLEg%MS`qdBm@Y{@KEuSM>thjsnSbLnZ2(F<#}V7RX_|tRPP|_ z4tDSV0Q&o25T^&jLfsXKs!M5qmn8P7kfDeNvzF8Yu94MAgaP%km(2jPYzZ8(j9pSl zBK$Fr?D0JL`f8}Eduqii z&U>85R));vRfM6k?5Gq%#_7fMg39tgEK3;?1s1zabuQvs^HXz5!vsq(SKu)#enXq_k^l6dz*4rvU$G6yo z6&Cu1(C*VRz>sSkLoA;>uZ^uKwW*wl+_lo?6hOGL3T->NKdiclGdsNn#$cgkx{w|W z`z)Pn&g7O{y&~xrDEpFSj#Slg^}%B`5~!U+5zRB1e-cF*beB3km6`KFT1cm5{5? z!1I6g>8Q+1yv%WSM1Snlm^b(|wXHVZ)C#IqV+MN=VdUrY(fzhEyfK-i{ONt@Y5&^e zOukySq7CywxJF}~b+LV0r&;E(`l4vW#kySfli@$dD4*>c4yg=uyscU8jro4O1ICSH zj&#HfI?ic!HmR@A`rw>`AAkPwnefbus;rp+`%6w|W$=ZT>+_bH_fLJp<%u-~yZZb+ z=A6F!&xPkJUvV+j+(n=}pP@0{xcd9k*l0w3eQ^Gy@Nm(3H^82t@>@Oe*XtxduQMEG z9e+jZ7wa54{rmIt(<98|QyPI*nd-vxky4vU02G(@b=|M9@x=cOOg?DdyK&y+u=8+$ zuO-pg`ebY1OUk5(FFhlK%)G&cXMxe-{ENyLUtM1&FEzBgUTCbIlnI_AA6ohnpD0E8 zR_3Re_?2E>Yt54VH{Kc#dzz8c=obyV?aWWJ^hE^>`Reg?r3KK&fvgi__@X8LyM>P< zq4Aq6Hx(M%F7m$QXiopDn8#RsYFpr;GpAThN|71Rok_FFOOs3!jB6HiBI8akHfBUT z?oYo${|@F#w4W%l4EB8q>c8G~SU6_(6At5*44hymemc4|2cTm(`8xA8S(V#t!Mb0et+{$Z@dPRbOPQfW}*i z%bS#c)}7tgl_qWkA{`y}fEtI}UY$xdkt`LPTB%~s^8RciK4NoTqta9iAFi(d6ejWk zv|Ee}xrFUUfq)JH)NPJfy_Ag=-Sbch0?4DX!f41sMk4}wG>`UPtGF|Oh@beeWeU_h z8Hf&*CPai7#Tij2q$YPoxjU9VPe&H816tu#DqM`K1A)_lRy`|f)5Wp{G9x9fLfWwG zhY_{gK}&-2-MI<7#AH)DBI6Xj%Uq6Zgd?@HVsD0;RH`9lT{{4EQ^`(H%o8n|>*R2% z?!UI1XE4~KBFYFvb`c)vgJ&OD;Y9IKZyZ*L0jwA*(!-%LTstYcK{5JN1dM|BJrLo5df}sD zkmWQQtG8y14hmS(ZB!QylEf2F_CUh}MCgd?5-pzQPG2@N|M|D=T^|vyz8Mx36K#>H zKB8WQyC7k!17WUx2)0%>zzy&HS4poNDnr9AY+CaEk3U>_hH;AfxjO=CYhOgJ2w#}l zkN+EWR(V%|jOCoWkS{w2B4;N)%ffNS6Glt2PGcpp3PmlGuS6teUrQHgKUL=axwHZ^ z9dy3Uda5m z@&LY9v`@_KBU!JRcNMWrnx1k(IL)o zhE6ajk(!wTR6ThBk^9-oOe?5#TvCT`yo1~(Da<;4qE%G}^q;9z3fRW6fcr5k;#1a- zR*=QA+#)lZ4{07S`*?QTkP)NJ1GQMfIiWbYP-I7|ao7D~k~H z9>%WhNFlCfsfueun-lQX=7n=*htOtH?k&mfq9QdKW4Y>8-k=w<>?V|P>Sui4IVFTD zM`|E5)ff0^qA=IQri-$aBp-iJSi*25^q}!TJ~9uVwky;#v}$2U?V1a~BwZtHW|d6r zsh*#{LL9%pWPQP&$QI~3dc%oOdL=$lc`&A9d29m*1%QL3)_Sb%b2X~%Wl{* zN_YH>`4=H7jgK^b%w=t0jS$-A_B!}ZD-eNvEy@9(faNgwfQ_wR-gV!^MQ*m zJ2q4FnoL(^1N$VF8Ne%o?U1n12&)A#pKTbd+Er%Utw%H2xkK(!!@KnMP8gO{s*nOv zySWM0xqi&*EZ-IrH`mpvYHV6ZY3rUZ^DG*@Z=Tygl682~EXw6{iqO(64pgR5R7k;1 zvx{{qb4lOMI7I@cVK)quE*x@n61P~qz{6|(8sO(vhjsvd`KVbt5@mo@Tpu_9urzsu z;x=U)ntp=yAdx%8EyG@ieIny+wWwwWtX7N7tAuCir?mqQWNXxhkZl9ZvavDm$>CMv zm;&2l<^rxrez?wF7$n$>AQ3yKmt9KlmEuJ%9%?&))s4#}J6T4G(vx3o#ZqMZjo36Q zgzW1PVW&+fYf3rHYe|}%Mlw$s8Yc!E6n}l@ZtrX%o$ClBzEC08uw8bw?)CaPTb>ix z=p6E&#yo1HZQc|(kP?aq*Mv(IylnlncxE2pWyD|oL(4GX_^HZo2G+K<)aF@T&%;4F zfM=0QBP`A60J*|d?OHpmhhtAN8zbDfN~3pP$v|?jwIo4spTdajKb!2*gz#)~o`J5$ zgYIrFq5Nu;lNP?pYiIaU5jxrR`dgUM4MU(^0o#;}2r`ri%k96+eHR(`Qu1Zh8f^;N zJKV#8?0t(2!Ln-mNZR8;TiH}*jrKqCkvw!=_){YWh2^4q%VdD4)&r`}P|G|JPN+-F z;ip9&ugW@>m>o?tXm>#=`szE8e8z1~6-&oHB)D7ucNjJ6Pi6TP|n`o>y(;wwWSaIW*{yCh9mfxz;Nea3Hw5ErFg#7?x^Nq=c3T zX=|B8C;HMV(Z~D$yj>7;+y-WT;9_dtI@DwN~k7Gh5wwT^1>sT}={l+clyMJzpYXMwExMv05>ws1L)cyHuadE$uI9eY!Bb>B4qp z)Rhk2Jz-igq894>vo=XF8%n`w&-3U!2b2rs75^$uAE|k<&`Jp}V;EC!6mFCORbV$Z zZ7~66AXM3`<1`{v^PQ`*3>7Ir?&|Y$fHM$eR;@gqwj`a)ER51#?C@3H80nBOOF9?0iuw?Tl@^I*H^)o9<+&9BkfR-vRC{ zmjJSu+pN>7rjkyP;?NeI@}*ytp{FFKoo1o>d%C-YBbmd}r>e5^ok=3=#gUX|iBA0NYHt2vushlW~|P zW><_w%n=IYJF4N&UIW?zXhZ*N2~dBLrn@fAFZ%Qb;=10Vey|}+Z1kPAnl(;)=`DVb z+I_X7L{S>8bmeX6V?RHzQgM_D53wOHb4&NtzMj(!o5~B3Po>Ta9VlWx4vs0;AArup zsRMVoBT3pq+28?HUZ02i)G;O4s);+&Q`RKYL>W@+Y* zftB4%!Ma_RL(2L}^VF8gqquPdP+~`+dJvL7KR-;%02z%-dznShK%OP3rD%0zh;8T= zIJtPR;3r+B3rR->3wEJ1wP@I0v~t*5$ot>u(Di`7e{DtS>cMH8Cs->i!pz2RQ)$)_ z_3l7%i$}<%FK|c_%Rpvf;cVW*nXev9n}8)Ldi<7O05cwZ@ZNyOsuZp1LeuyJs)H$P zzL%{%2A34KX?!u{))f;@O1Y4o#T9Q9{QD`%`*=g6bejPV+q?4|-uwEVU*x};!=GDrYwS>%4K1WgWeI{3M5qb!YL!mR`M{Xkb0Za6{(;)HpV@9uY`g(V6(ar$}({lW~rM@;nWGJ&|G4_Ze?MU38d4;~L za|p?kvd0Ki#wPYGyo&3Z2PzZ-VF4@0e1tETz5R_va?&vb!`vSQi1CW<~@^MO$&0k{V0t`Zl_n%Y8cu+ z8MNN58qg(_%p|{+46<{ca{t_;+(Q*BPf`-8yBfGr|_blWG+e0kSbHSusM{K8iK6 zkpLk3C+y|5mfO-CsIb4n@s#G{ZX7CZJ%WwVTCLuqT&-l!l6pX9pCDz zJ4GxM4a#0O1j4P(Lq2S1x@HArqlv5#@+4v)$c43Hwm>Clww6VBolp2JMF&V_p)HEBrXu&QPa7B1%05$z1$gR|l>9vx%p^&+w4u@|N4uK|q3j3l#0 zTu4--B&COG-^EbE_n7Dr?hE2)dLBGm%{Dlk(zMgg#~47CYZdTjo5&^Hw*bK5}G zDc5RO=X7pulUgZl_o*Z$(PpMJl6FJQH?}F6%O~OSRAfF~FRL9j$*kb+@{tfmAVB zyF$r67X?+nX=ahfR(maS>2wu8Y`&_-bXNOMRJdqaD-Zks82h$u*Ku3fD$x1=|4pWd z^H2p4l-+%{M`y*;mL(Fz{i=xWk`JW{wXF^B%_3<6nR{Ku!KU1K=sIqJyOmO<cFL)IK5t!}HGo)v2jq0vMz=;5Xp#F+r&$?>-L&@1P5JqJoZ@U};T1(dqeZcgC_ z&+B-Gmc#V=IRv)8QU84E89=9b?9dP{=rb-i-IF=t(IyS&dF};F=OgORnUgxCfW0Xg zK2Bj$xYFs;er_O`iIA0>ThN~7JBJsrajZ6b;uy3)OzHl11kO8%EY599y!9@6Va<{- z@Xc8bMHV9pak_k1bbaLTGoVV(&NdFw%wVKyl(_Amv}@$)lC{`)vlKPQ5TOD9YC zg)mK4N0!W=^eLB2!r@3@(f$nv8fg5<741m{`vLA|UAmKn^1Ioqb@YRuDG%b_dr8w;ZWc$UUhJ`hXwOjl ziF?g6(x_;~&K=7g63b7CLWXF>&`N3xNnCh{s(wif|8zv0aBkP(oaUtGK6iJ60j?n# z{fQ_Y6Q5ryO(mbO|8Jo5x#!pC^NoI*tcJ>ID2OLEeuacxy~4gi;5m1*EGMjt{sM9Z*i&LVY>w6jS%9 zAXS@Dx=Jv@C6&g0c{2ouND#5qCv_Lj)HFe1i-T5V`MF7Se^V}L9eIM_+tL&u7Q0#i zQJ^y(R!l%`E}~JQPw>1cD3P(bX%A)laqXPzSWTJz>i^S)P_J2jY)_SDc6JWXIZe8P zqW$7<{NzM+R=aNVnc|;pHMQ?wURx;ynqQ1lDi^M_JVxUnClt*hQ`l=lX3%a1|j2&WRFW26twRK%81UB+BjC z@(T+aI}+R7rBF?hblf|uZirj=OPxX$s0h2JV@Rsw#zmFzN& zYPfQEAk0*!Y26A--LVMz$mRBF_KR-3rz~wKI+56#XAJfp^+S7t>o~G24N7br-RVOo zVx(e+J1cFWon5W&>)6!BTM1wvkv^)V8?Ewau@x9EoIKV@`I%{cIAL+WBt`!AAETn* zgB~5lvIJE<;r4?7WE>>IlE1n6bLm~m{&enBpI{Ag)P2R&gO=6K}| z%w+Zut;zw(>?Rzg`5g5%kEv{sm-Y{!3am#gQL3{P;4le9+7bB-Gk_7#-r|D@W|!3H zq@;M5KqE7|z+65#)y{-dvIG1F4?#}{pA*3a7v z#m#ev_CJ5_|B92At{b*_+Egxu_3M2qm!$hcPj7T?w2u}o77ARL3dFy@=TS*7R?@_r zDej1|41;v<9VLwI!4;v}i>yJ6pcNDL>RWM=`& zt<|YYZLD8-HK5U5iGXXTH7uzN9!E2>81ZPA%ev`!kgiugwJf3RXZeCF31ptm5UAuh zmpq{M~_Q4I>V>Orn%q#!^AOJ~3K~z3D7>}`levt6_OZgs` zRf-6T#b17bP$4_2z@z0L`u+X*bNbDc^n-yp0!|fgjMMa*`&mAhR6j<8bcA96oO+Ke zH^k$<95+K~o_=ZhHZsw&;YLWnVzP~Ame*geB0#kwb!vO&CY+x}cHP2&h7sKua*&YD zPi@x^ifntorNqCL{<-WT4TyUH2)6;TE3Kc->MbKBseevsgwj6qQ zX4dN=0X(~$GIB60;xT4c9NLV+=Rr9Qr7Gn=m{wn%7!<3E)LB0O$KhG{HqSBi+^AX$ zony5+-Ac06{>o3hCSRJ1!N9t?ehdo2;QWmzQFTqaEIwbI#286z<}P)GGemYg_2Z%E zDL41&wZW&u;f)wO(FYRZXSF81!P$Her!HdlKRO&~KAEK8X+dL6$vi``N4Cz>M$sK; zJx=R}yx!%(iW{Ggyp#N@6r{703IT};5`g>r)`lbEdG=bXRsEx~PrNM$Z0m?2cZ0S0 zIhX<@m-*pPCfM-w;@gqE){^FJE@!0`nfV#bJkB-;Uqa~&d+>7%Pv7M8NJdbj^gcXa zB^x|vg*_BPMu=#{4H%dFGR(}y_)w05A_f#tdfoG=O6r%qloD3I8OLu)sgtw^=)xFR zpcjbCh{I0oo^w_@)K%>JiVWNz9^Zd!lWgW~f!aY&h}-ue(RbLu5sDHa-NHRWl#rfYh(T%YY5m*4XhvF^Lj?=w&1fNGb-%%Ze;Hqcnj9vit!yQFX zZCK3Xg_pN{(zo(n97YBSsn!nbN|e-*f&y=;=W?Z{} zc5--86gyJ7Tked68ztdEH;1MC?m@cAR>yCs!W60^cd+!PR(n`NvbD$Wq1+{fD~Ziu zCQfrL>`Jc(a??RK53)@kfN{x(*b^kkh{f8S66Vo1hUR;~-9k_$hGn26148`L21BQk zr9fo4z?y{?SIIa|798WGc#d+Glv+*_d$aBg2jx`_vZtT4M`+`g9$3cxc^;Mwid0fZ+5z)Da}9I^?>hM!{KPNYV`Av3vD ziRHvp997OTTx$m49&A4BgmJ?3t4`-egCW6>vMa?SlUR0%%8lhzF{-l=bf7XVY!-$_ z88afG*&`qsr&P>wEeuCnnONQ`GGc)>&ANE$k$s*o>keJILwI{^F`aEzrfM@bh&QRd+gt{XEnXq0_~N9ex1ji%%+7g?*Sk5fxn7T7;xhrNIKZ_i2+YY18>$ zZ~Tg^m{L5Cn#r>Bv5S<{SwBkQ5is+~ttuTMOjZw2*VyDio}x%~K*}%w-qmy*#+93r8lvq&Jx7Fcm98$5K4u1}$sT*Hj;p=o;D%}2_@og5f z=uZms$z$@BTkCc6bF2CJFcPLOdFt6i7pW>tTz4z#t5AbgKz^^H+4T2HZn=07f2m5< zI^&n?f`ect*@#uiyFgMUK~`=?|BYJ1iP)T7l*wkL3e=8d)<3Ax9^%N&BHO_0xd9l^tNl(rGHaP&>TM)bCN3D?UO+b_JH`P`KXPpQO1K-SNvJ8bQyi-@% z?1t3; zR&Y5p%Ti^*{~F-RJduqVsVm3~V%+12QE3Xrh3Zn}9D`&;35B-2%5yKg8vD)j+&Z%2 zpx&o=rGMTIvr^D|k&SZUilBoV3}$XP#V*!z7nK}I>cwGvglny70H7S+l@DM}c#tfa zn|o(@+%MnL!LEX%p2(wTNxUDwfT5AKsp|97bo5z8zr%RId@gr^&<+mmRCy_-H);LZ z_h~$DkWPtHi#<4|q?AdB_udDuD`TC_J&5M#N2cF1l1hg1aGvwwK~-%st7)>Yi4!sk zH)q_a&ay7|w}Q?B3CD6?hj_%I%qsU#s+>}c=_UO+oYpHIs1qM4)+Z{Mos|HT961m; zi;zOu@a&Uny3h*UdC!-mSKacZNavi+Y!$#QrweU47M6wr_zK1`@whO4#LcK9hT`=zpSIY;ZlR;3{^UGOK;ETjv4Uh z(Q0Pq&j5lo?cB)BGZD5hr(H*ASvk;tY(^5f-}aQemo$n z*sJ~}uYTuOTNfXl5|sUg*K=OVIgg>2pKo9F1Hq`-z53top3qaR2io8$lA)0~t8PI_ z@{TGgr>)Z0FGe#~(`H7)@KDD=T>D7odB_h@%DoA@QL5e$a`v%2u9 zw6D?BcqE6W6Ue}KOqD1n^dY(CaEl1?*$Lp|eE96tL#W}EQqO_hySg$Tl&u8ih*-8q zYz*we{qp^cuzTk#8Ulf%gsIj}(m&&JxVf)zIldCAZIHM1;&;;jI3s2#6EJpesFbMO37v^(7;7XIqbM8ucMSay3 zt!gA`U5*P8u2n0Yrype5ozhK*JE;j=G&2N>lq~};;sQ1tTd*$88EZ<{G_YbL{S)f} zg5+CWFY9af7q4uv>vcg8hv9XE;&lzj<67zLYg&aD#t+a%Wyg=X~aJ;}0P4eI%! z%)zW&G_85&fA_CQsvD0!nJ%&{{CAqd1AB)y6OQ=7u2gLTo-g(t4vS4F7kd9N9db00`$M1*{6cmOERr$ zPN)h{k>`_nzTeB6C;lcYuGzDVYBK{q-r#m`}I8$4z&0LntV*mp%J@B*aA>r|GodNu*S_*CfK$9m*{=*$@(@cufa#-;op&r>~rtCeLwvL zs9mkdkD$1D#cL%bCx8~XG)SqEdJk3K2rx#@9XE@bA%}- zFq^4{ij23P~?|7_k|u8Lt{HfZfLxa?dQhvjR5Ds*t$XM1M_aL zjdW}PgI!OB2VZpYysBEeG98OzW#Br!9>ce4~o_k?g9y@Y@h<(;`#(by)A07GE?OHMRw%XA^q zF!MOHGzlALrMQo?Sd-Jo$mq;!lDVI~A9WeJZC5{kt#z@!jV|u5W=R>#1vU-|$Ryy0 zXx~!Qfs{TBJ=>XKa|&|dVxij5dbg`@#a<>NWoEUVOf1`E z&vq~T25Ih5`5+gh>1H>y6;}~nHGYy#_*L6nAJF2_;uwszoj3e2NYw-6leuTV|ELiy zWT=^PCbkC*n7_zz-g7n%w@H#w++?k8X=*oKId!vg*|mNmf%OR>m6cxJM2Pi zQ)e&26DBI$z*%}XsIYPJe3Lld#_%utl0>+4zxt>tCKI_iwLiB*spz;-tq>fixqz;8uUZLj8VVzOJ) zRwTV-A&);E;kcocf~@X+j=50$xe;LSw{Ise3V(o+vQo!VG1vak_!E0?xeKeVM!*U( z6eU=ePbXHB!l2xplliwdxSZ;_h;oZ47E&t5VnPDK8+M#;i4OwA7_j)30_5Hgz*Qrt zkAhyEdHULV`YuSSRdFTg`! z!Nj5qr{kRDO zhgrZ>)Tw$6II}j(4xo8@!^AuCO&mtl^;*fu5+J`E%s_W1yEj#|byj%R)9=rR&6uX~ zSM+RP_iu|Db+K24f}7W=*_qYjBD#@I+8a>sw>3EZ7-I_Pny~_V zXSogL!SSfN&ayZ{$Xw>ig)mod`)x70D03e!*c7FscZx!v=^!sC&yoyeDjiX_7H+?O zL=DXWfK&+86EVrZzyD#*2NGniw;M=xtp;%z&b$)Eby@tjF#UYwW15q9r`lIqKJ2xyX5&5XLGOmM@WDt`3ZHU? ztdWTr+l^e(boA-G?(;yZB0>aRXI{OW#XX1XRI9XMjd&Ia`^uFBpiif=Fv z#~63##5Ud!13<*H|N6@YTjNqQpS>$-Fp2<*N5K@W`X8;QC7aQ`Qb3W;`#mgfVm{t+ ztqVTAPH~2PcdrufQe90%m^NL-x0^1CM$WCZN3JD@*ZIW$6dXQ~=LDe)WwZ;XQA+~% z3K(kjydwq!Cj&Q^Mjyr(iWpDg3x|;aJY}f9AgR2K7&zG+FUt|uYC-Sxdg7?R!WZgx z#%9=+Px=ry-&-Jn)rzln&T+?cCWBC;DXkgzIC7UQ3ko-=>WQ!yu$1rqZRaD|+odIx zV7L_Y&Ny!U@+fa`QS|_v=s*^R7jFle7RGv}$pcy9=Z0CnJr|AcG5_pOhAJhEHurOa z+J%uk&{EE3AvcZ(lw=&YFc46;TRS2EDw4gb>3~20pjyBJav+Hxq^rN>y(TtO{?kll zm!)e%0$8!if#KwTCAu0}eFQ29s6A94p^a_7P{@}qhxaB<2)nYMrSjslKB(!%ov&F) z0@O^?=|#Ws2U4r-RJug2pVDp7xi4Se37w#wmY&h}fmn21U3C zyDdfnaDNiJ$;*6{;3~5UGiq>%S5+dHKA{6n*rTsKx|dc2SAZTc1Ta2TH89SlR3D_x z(y9l|zr#5z$y5lFdxPoV6N=|t9)$8t)sY`OD?!kTELof(Pj`!9u4iG0d)X2LB}E@qU)dBf6+{&7bd(5z>LiXnP<-gDZ)f*zY z8CX;u(NQK~x7Lz(ALW?VI#(P!AvcLG8wgY+cEfc71ngyxR6Zx0-ML$ojATSC=hUj5 zHG8?PJ}P<_oMo)aS$^`uGqIL8RAcX_j-sHSdxt|s{Nj?;DkjsBx;6?fWuj4~am@dO zxlSb5w{lOZzG=+5(fyer)qqp{WQyBHXtM zn;P3oQXQ_eln^J(BZFPh_uRR?&16a5AZKcR6L!xDCIp2xKXWP1dWMQ|G)?O@qJG;k-y?oI3jyykbUa5D;C)S_F)BOnd7es{S~FTD=lVRID_19u%GDHITRzuJ^qctH!2Cx3 z?Uadp6>M<4I&cBZFOkbz@e%(s(B+2<_ z)+mP84fWyPJIZ*-ebzi*ozxq*rqV|cqtfHFs#rmuUcGhk7uTwO{FCT77>ids*Of6* zabZO^;Y4A5HbM2qXT0Ls?pKSuylOJiPn^_+$)Mh2-(pvomx*a?wjjOUt9<`_kNwS>IZsXeme2|;{SLF$D*%Bxu@HwY|dh&%v5@` ze$sT|n7$IZ-v0i~s-Kx?+(i)+XYfThy`+8bxbLQv)jjlw7Z4^JX_f@s^dg3>YBwrBzvG*x7U(n0^asO9cD7q*y^A>{d zqnQWveZKQotMXjSLM^L6x}Z%kJSX#B8y-yjimiO=HM zF##a1(GS^2zW0gU)WPdA$o7eD)5Z;EAdcFXXC*t~+(l=2l{{cF+`+dR-U-xu#geFp zB?Osxknv&e3Yu>)KBwJLGFWa6wdIzp=-G5-w%siry)-=Wi^^z++7+;{yU>mR;Ypdo zL2g<7%f7|}uz^FK;ZOk9=TmN&!Yk!o-w3JYNH$443B#q>#9CnxMqfHPh1GN%Zy`!S zjtD%UTj*G_oKP~i<|l}qZ;cf3iZ_Y%pXIWGs2(7Cs1aZR$<)xZqkVdoa0ZY8F0M2s zTKlAuxk;{dfUBtp@;dhfC7|KV>L8Rw86=e|CdWDfmdpR54(%@U<#m(ainoLiEeO#a zOA^kO>X7nhyIdHW1QKzEY|O5{q`fwp3o%xeQj> zHDEN0SX^MrVkS8!K+6S`>9QPkToUVwvS|w)SC(U{!cLccF78*j2F;_{d&4oeQxg^L zJc8VewQzc0@7i9onie6dA8_S~cmia>g39gbgA6dA#D+lHAPd&{wMkGQ0(Pv{u43;K z00~tSCBUA%QL$E8R_YbQ0O)v&?P?vI<9>_l$v+S)K6^Vqe`mUHV~YdNKMsJg)W0SB zKG+YcTbezWVrY-^^@HG4LwTNH3kO(36!KLWu zssN}M(R2Fk&`%7;Qyz7B^fVj6>tx%*O&S#k6C?VzU?tPb*7~~O=)UuU;3r~bq36`; z=N(A)oQlkZhct`Mr4=zV?f>3?!j%&O(p-^zB3QAhA*1gnl85>L<6m7abk0z@BcWmj{?O}<|_Bx(PNVO#q+>+k;jvivUlo^uiHb)b>8=EnbExHeIa zydRg9W<33lcv(*0TjNkrUZ!gArSI@s5-|W$TkB2D&9?WqHHrC?0?&EPhyJ|Y_xbV$ z&Hb|c0h!NS8|OJq_xjtfQ@_s6IP24yE0iaombcDj8GG-{iWtZ{lFmSViR7`U>+^{=`ncVq z^B^W_HAZ2$?SGP6Uzv4fzuJ$5n@lF2%nv8B4bU~-ZYMB(y(V=`tf*g|rOxweD4j$06)q2hsQWMmYih1&Ykv z`FAbgmqz}&l_30=mjHTg3NJh_WX_w@&U^mT`a6o%UvYSaCM)JpBpT~-h>3sS-S>wt z@b0~po&Jp>-|?Ss?>ot-AeO0AlhbKxaNw`>s#L1=#e62%=N`X9B|mq1L-^8@Ul%Xc zN4L8hbiu#($;|zr!~@G1z>VDVzAuc2^Ls7i4l1KU?-Q&ID7rU zWHmz2zXgTFS6^7#TCLivwBa?(F92nYh}x0Ge(R9R=%>URPia&iE!#T0;KN?eu2c=> zIh@PvVjz`E0&bUec?Byd7hl6U!mb6@Ggi1WE;O1hwMx07oj?~Lt0^^(S+6ovWw7{m zTGvw<0~k-wJ3|0PElMW>JU!#K>2#qr`am!MM{X~#}hCIEqam|M|Y8cYa^ zzlY5&-D0iJL`VR{(pBv(mPsz}nA!@fZ-(<(SIQ5s!i8jd8gXFD5y$Sc`_PWL3@j%1 z-v;amS^+{X8695`5vT)a1jL^;4vr`6Uw2dD6~z zQ~<|`U$VRfu?S?%GOTgE2hQ>bdkYoCL(&6}2dD!LVzWZ?0e9@uvgA6KVh3;93=~de zkbBB=mqKwuBji@zwt7#cPhSY9n(rNj(&7$^jHw}n`$z;ytQzxaqBfy7&oTJ5+=8{s zXG&DGK2-Fs!_P-ew)%{6=v(mYf@7DmUIwwaP!;|J)Uv&MeH?3z`FH z)~`ue$@0(6j?bc3bsKP8$YIV?!CYI@#M3I-BM9$cie&+_P|b1>mI@rHTzfwbTvS$hyYZ~q81*_XmE3? zoGLOSE2Q8- zGSt}#vQ@x9rskvO)T?t}q#|8?Ehw|AzV zQ$ZfZuB9ZX)FU4-m*y!A2SnY0l6@o-k;Eca#hrSj<5|~eP;P-$bp-(K_lLGtRfyHX z4^g9V`%YAfz&!rj3v#84-Nv7ZWZXL9nnG|Hiu*rZkV4;io^R&q`#!Br)*OJ|@=^%5zMYWi1t=4&&*c?Y>3#Ln=fdH~vcaeY%zO5? zFU&#Jn)id0z1nBd;F_n*_ne2yjTr+vE|ebT_q@+HfBOlOx}o*9zNWKmC;Q?^m)8b+ zJts;CrOz&_ky!of%|;zF6v?0`OlgcAajWdX49oLG#ACHXoD zq#-#$-52z6zr3XV#N($YuIJvV_TK{H1+JF}KxIWAFMd@-=;CX>%8}KDnUU*rp=Ar2 zi%m^`S^n7XK@}X<)IXo-dSlve44jMn`K$aDlA3R3^xNA3a69AP`>J@$|NWI!5Hi=+ zc;451Z{$GlR!Ue+A^Y_jEYrBrh<62Ha3!xSj4V z-1rXQ$FE9*Nf&d=7>M-Zt9!WE0myg$y7^Bz^7_25zv+V`{mDHrTov%j6y;QSH8yGf02Ydbh{gdd!sg; za#ce}@;ujYsJrE}l|>qAf?MZqBB{aymUqYO>Df_Fbb4uFqP@zd!eloGvf9(4Ox=uhB8ge4kRB6nh-&)Th zu``%GscMrF!{Ud&gQ9{gG$u5iqjWX7j@({a`s7y2j=iA_8T)}A8OVA3&8pDYsHU#u zi3sIZfe_E+Vpx^y8c7oy*svuJcBpTDix=|I11jl~J(>adYSaz6^? z?jj`Au}#MVdA31elH*09Y*xU8$6`0`MIVZ4D_n0t&p>!Y9F49T7-AqeQa7agq#aMQ zVVDgrDlE4VT$v9W<4wgv?2Y0NhK%|t*@qnm0|76-`Evzo(q33cKN6lIN0O?|&fQKr zaz(8DD1(d5@~aDw{+H_MRUcFbq=O;WbqfCCBp9h>DvwJRg2wugt}DxgkG^R2rCsHz z{@kr|SP|%Gz$KoR;&J;2|ow8V5qS;01pqW1#1Qi&M=1>buAl-I9PD6w) zHONbG%5?MMEv`$_tp^X}%Y9I}7`4$-5?I};Dnf<9B^vyhdFWz%&Qt$}h!7jo{i77P z?sPP964;{dZ2x*;a#lZUDPQ3jsAm+I8bs1a^EBo3GI!?cu3frcCXgHXSyGc25!^c} ze@v4oTIyE}p!k8#dML3)1(x_JKcL}#6n$M3B_#S)w;yJ}#ED)w4y|T|d(La*dklR& z+i)A|N;q^ooKjx=X~#}0T^9-6F#Ouc z?NK}TcgwSDj3r5682~p6)0U2;A~$jr$Xl&3R|bLInYiP~`t&Vmg%iWxM*;TKm}~y90e@BD3eqHZ`#f7*#bW zQM9)+r%0X!n~hp5Gz7v)R!D5B;7N%|TWKx1*0P3E8;?qnu2z1oZ+t@QmtA}v| z`K&OzIiS;~_l0%BG~v}IQ4>i?spBJE`zQ7~IY6#7^&gT73qH?d>@~&?eE4-kSfBBS zdyhdaKr?qEgJl^qGxuorYLy}T6vSAoDc<44)h$#fcpNIbG^!Uc*~&`cq1Lv?dVFQf zUrmVl+r9Vt^6_V7^+^nm^?P3<)bsW*O?r932gRj}nnXJ0-Z-yscae4>Inm05H`Mjk zq^r+r{b7s}$ZFSmubS~^&-;)illGqBZ)9dwosy&yT2{e!a-oSry-xeC;-mZXcuBMP z)d%x5-OV6sJ<<+aQ6BuZvJ-`(6OGStNHFsU!XK=w_wy9yw>CSK`&wftch66ZBU;$( z(E9oUkb5FYX@tX5csQ8vMk%LloVV>Wx7PeH80QW+l0BQ7ZjUG_>8NscG-NV=Ei zp!-@iD`u!>s^WF!tkLh4i_xTZIOkfcnndf{DADF8hE>9}vLoVbZDC;M1XTZgQUr!e z?gA;<>5J{BFDQu0c$8zunFlBwjy)i3{}gVL>^t|Pi^I!FF_fag@qRVuD~K_ZYMh<-!DRx|KiTQi z6P)A!=Pr%9hQpf|X-}*Cv@M9+I!yT-&SP4ryn-ngVH{n+w#I1q(*CoQ>zYS_K2KB| zX_V;j+QsC|CF^eb@KP?vLK1+d>v=LYUgb_2-D&tuES!AXuQsvC0GtwxS% z#H>Qo?`OPe(v?t3B?ogCWFbcdH_p+H^*?T{!OCKb>X^ix_?Vm&)L@Ui1-hf6X+EkH z;a=FqDcU(zdKe(uGo!&~YKmS_rU~G+ew28Y^QjuJv@sw@h5U|?$rgnP#YQug>Yce{ zAIk(5XGzLdY=tj9AJ^%R0ekCF{aEDU?PvK-R$Ix;rTl(8O4V%bPzs-t%^#CP=}C22 zF|s8eJb=duz+k837Gsry5{QlcVx8fZ?N|&|S?t^i&$J#^N36#B`&g^G-VwI0;Y8{1it^JqgTAfXeX4ws_ zO;Fq>xD!=NAQ9Y|nuBY+@EABoEcI-@_J-&XFW-WN`Jg0sZ%+I>7`P$=LE4 zS%0mjpM%XsTh2?T*QwMZF9XSERrzQBbC(Z_t-t{U zo>>I!o_Q@tXgrZxvxINvMnXDsZdA^gB8nzR^-X8@JBPCOneu}uH(xj{3~4|gZH!aw zEh5qZUiDj}yX4VLY^n3PS@o{gLKaA6?AhRysMOqgSB5CIpenvrWz2_EO_9!8&ch$3 z0w=oASV)CWB6t;q%Eie z8iA*L+NtWw-rrQUNp9453R=zM)|i9J&j%DcYLx3cEUbV#>d3GK)q$fp4*JAPOxP~z z@l!_!s6vdRKJ_7?{A1B^xqEc1mC~s%&EI!i5!NTVm<^s9<}<5GpuzJE`MDC5b`g<@ z+=NT)GV!sqTV|5#z6h9hgwu>q9mOg1Y^-+mV6wQnbcU5xgW9K39R<%Gs|H{K=e)P5 zJs>OfuFv2F`tIM4Qkwm3{cQfKBTz9X0$4;}> zZ)ZmMT5CpEj6V%1Scjf?{$-C13K}O;0_#7dF{2AfjR5hf95iy@}%L}>)fN2j-|rTa`xyV($C#vQbAUyyon*N9rgPA z-%~ihXXfA%@ zRbM|JI?;8G>Cl^32KFk?L}rFsRFTMAYaB22^;hU|?&83qJdUNTU+`)4o6DG&P5x6m zdepe3w{Sv^K{dh`rp1C9ZRN;!7rhr9Etz!NDzvO(@N!&W+^F&-;e+IDV}2#_D#GNut+2)cvVVT_z`g%iiD55xp+|`Pn?IN?vV9ilHlU6Fvys#b z2(LdI)bqn{eC{px4a5B_ITzLiZ}YMj*qimeZr*F?nimJnoBI)_ZR z^!nz{$j;bHIO=%9on^g^Ee($FB6Z-fiPz!=4?>wvS$?(CPrc|HknrxF7$74USgZS= zAc0tsa%K|1u9Q_i2k?XA#v9AjpkPncB3goK@=2%$79GP(q^z?RO9C zsy$GJ!`>|Oz^r+L3{)3(+BZ44JU1AR24Is^cJkh9tsH0;*z|ngq8ft4v;UMOScF2T z3zPe`lhvt0{jl@Nh}hhz@M30Qeb#61&4gT*lI7c82L&tasYq_MHrk#Kt>o@NGRjR7 z<}rlRrA^r)MMF}R@Ky9;4HN7buFv}N(hZUkS7m#$E7#e_oIuqDb#J@05!g!SuA$>< z_dy;$;~QhBr}>zX-PNd*NPQ5a^Gtd)o<0FU$8B>HrC>QUX8Gvz80kj?JdjzndK|Mk}Gzh5hQ*5q15VCR#OmCgsQth6i1iNm`J+h1}> z19dVbwdBlIMMSC|LlVcd6BR2+aIFtR83o2liB)!pLjfiAKT+DULAt}^jI-Gz0QtrD z{&S}>B$0bRO6l4sWC6uHod=%*sJoQs87a{`3h%I)fY;2O`eh_TU%C#T*YabtQ(^qLTCdlo`Q#or0*AW3K z$y~aD#cPn{&OfU4IS^}AxS;WKmvhFo9b=mKq0^!l8FCT`ktB|qPRp(H_foSi>L>w6 zYvthIiX^Yr1X=|26N5`*gLXa%Fj#3h=YD5Fg8tILUcRa4c*Bg7;t-gR4* zmOkdRB-LlkRebST;z%W?r5lqB`4I}|O{}e$MT8r{Aq`06{+z{2kwHRp z(~Cb;>;$wR+_7@tn_6PtW4iV*=F3=2+|=t zQe4OLi)mJ#;`N#qe=EkX1HNA(7+PhjS3UO_{VzLPPwB30{b5A=J5JL1+-%!5hyRC04P_=X#{3aglYuKl(_IcI)f0uY}spK2|$kd6^SGvrTT*De%R9b@Q1R5qfDAi z&mf!xQL^Kavu}MgLXM46l{|w8?(HTJeF{Zo#ORYl(#o_wV25LHo|t+9%mA|6m%tUEBgI@v7Kg;_c z5mkXXB;DPMh{fKQog+&+q6zwI`k5jK~w1@FUjsK$FgV8F5o(;L0OYa@1`1U z_odh7VK_+DLl#U556|@~y={y-vU^ndd%@zjdGbXM@!o<=6yPL7w|2mRlIxw=uoB$H z&yT*_x+2CyG4t+mz#mMJb41z0S7gLr} zz8K-oX(^16Z>%W!B#WVSY6h(jY5un{d~l zaHj~6u}%|)D1MPa#Litzs=dWPVa0y7wW03G0JjhT-0ZG0o}pCzwbmk-xgv;EuYeFd zd6+ej65kPl$Yd_}0~cM$;N0C$DoZ8QBjps;pBpuVbtLIE^wBCg%m!MJ+`<4Y{Pe@c zo(@}Pn0jf)IuEg*wK;541VckGDn1ch^Ks{uJaSEu4WW=F+V-%B(j;qrSuSC?pS>#( z!BpQWnw_X6bxsJBH5e!J)arKqy?0;dcBd$l`PV8q_mNFHIQr1r&$7$&c ztQ8HP47jAn85+n2W-xQR_E+@*N6>_PuA@3)H)7CX;VAx7O=*{Usf^5-Cm9SAS4!+f zQ1eyFVweB*v=)$xp(4@dv6*0GqI2bqi&45*ScLJg`a!3n&FwyN%BugM^h@??P|cBw zam6a#Kr$td!Bc{A%?u|C9Ya;(qq(2MtH?9kw4T%a+2%(Ym8`d0z<%*U%QEXN%2}6_n z92a8aKy!Yv-JUU+mH- z)rZ+^-3z{$n9p%}&dDA~sxw`CCwB(bORC&SX=Q^rStl?g=n*sKxR#{z^iblp$)9nY zFTFP7KvX2CSo*kVB%B>>{?_wIiUKD?=kx*B53^!*{jnzJ;oBnlQf+hIqz(rEzgMr} zEM~k~k$M@Xy@eQ_Qv#03ZNKL_t((KYEl@J9GP94amE%KVBz3Y=H0JkJ-?@JJJ5afx`=E zG%GuK{7PHV#h67?J+a|```bjWNeK)?K@1oY6O^bG^fR` z`3ZghUE@y81-^_xUHs&kU-5q-PuxlWGki3ONbB6&*`VE}51AtC2fzrU zeZv-&#+GEN+jq_x)hlve37j0UN)#J;t$A9!$GLm&@s<6|n?HZ^^KYKtyNfEkc~vhQ zUUV0Ry?(BK^nD*FD_#3iC)R%tNlcMJLh<;wPG~M!OeJK1kT=X!xI`! z`=v0v;QWnX6Ads3v+<|T{kz_#dt>z7B9!TeOqI#xR#5({KJ5jrEM*|eCA@l(Uz1@Z zEAvZ&_c|wT%+r720Egl+NxuI5Q3BD3H&CUbL-=xkc?sje80_FA9H};y<*Ft*Py`z5a*q}^~ zH;#P+_8WiZPv)J^&d16Q(oBYn!D@4Wqi;|yVHqTQP>0Y7$Z*hGZdUFWGpd`FTq8?7&xX>S-}^C&@=v zI3hE*Jl`9O(N=!CWW)_+FN`uFo?tgKN&fG7)>^5=Q>c^Qlf^O?`DAj%-kTY7zr8Q1 z>Fb9TDu<-b>djn^>;1*!_Mnu4TU4_C{FN+?rfy+TX3Bz6&6D6JknTq?sj7oi2MILv z&^{&;E?%7BADNW6iIhb48{AAPQ zl{!VP=XsR*(;wpS(^zX=ry#B}b|3NPGk$2DHCa<|_c-6Z*IIwIJ3;mAI{yG;e2Uo?WoQaV8L% z8Hrt~QHdQ~Nnb%SAFaGf|4}Kn4{+0k*`BQqnc|^eX>AEqr*;X^ql9H_lH8G*T#=bj zMvAj{Nn3@cASVFYU15+;$PV=-duZ;VnsS=-dZ9_un*?b=D-2j{xKN zWL^I}4t3sPe8QL0^Mo;w&GrzqHmbFaXzmu{hQ>2 z=fhyGm%MxOA%jy_Np;lOD7x1Bk}`5*4Rd8wKV#M}X$_9iAvCFm%x6c$qbj5Q$70-- z>UlU)mRBe=pgL0qV8a}h*l8%az~ce1_tA(hx$_S%*VPPHm-aYS(W|w*nuqOyejW#>dluFTqWhPL^F>LI$l!Q)BEk)~yB_Qn&z6;QLZCbuEEO7L=Yf}fA)TrLKd z%*zho<|pGTmiGVJ7~=z{teJ;-10zqXQSG&!xsCg#b7ufLJR~IWCFeA6T?)6AT>H}J z0XT?s!(rryNms1W&$-_`33e8QV=t$pLIWCP;3%D#2FWl|_cT>`x&lWmrSdN*D+N_{ zxHCGfh$IoCT0k;Y`J9<4A6CH^_4RGsr&GBcr6RDD7bpB#% zZJn)qoO~g*wN$I&t*K3sY($7EY{A4ad9~rbfqkZRK*xz5=N&{ zop}xc;8Xqnfoc^xXum*d7z#?+hlU@o$!CQ0<4du#0kKMHn1|B%kZC6_#*zxT@L3*` z)hqAI8Y?)eCeF>Fb1o*kOt-B_EVaS z^9PrW3QrTOUCE(_d?gIbZ3~ifU*kZs{=w_}gvX7s*g~jyBx`Ns$Z}L))ZPzmHqMZm z=8-v!=Xz{TRUj*`Hwz|OLLa5Gx=qF0dv~rpEqGk-QB?sdKs5gMiMxk-nTvhmb1zda zm|+5Bbb90rN=)#cKdqu=A1tePcpLMzn|F927!hk8&&8G(tCPOECb%&+D&u9kJatk) zrE?Vgd!3JrvC$I4f_}_@fU)b%{pP>qiYoNXFY2qbH_!a>9+#?q?OvQho_UbFM2!sDYxDTJAMX0{d))#133CkxNxt_R?y za|22qs|JahKREaX+?6|DzBXgXj5XG1BXL}op>@~JApaHy<9VzAv1T^ zS{+);LMuF3WN1vVSm{O?l>nK}O~PI2_f>3Zv+AsEz&|@9KjD^BB(ch!BuL_5PTcuj zI4bA2hAh0jfK!k$N|<+PspFVlx_5fWtP{)*ot+h)SN8sDMU#8fFAI|D0@UaZzp>6S z11tXa%Y8f9&5JRyHRy;0u@H=279%GJ4}^^E+-g~2+l7%@1Lcj z)w(+FCJG#CfiePv!%ml&xj;c4_nmg4-G*||v6a`TWMJf8;S5w-TDp~Qq%;K$U1|<; z`6J)YwP+uoAlxn?)U`KExy8er%NmUMEVQ(aOnGjgP7kU#kIsj4X=!B^x?K@gtQ7Yt zIg($=6(rR;$7G;10uU^a$Ga=2D@|{FM6kH=V89dIiUXppP4x+B9eZ#?XO3@b`bpbY&hrN%-B0S40Fq7KE81AqM3j2cRHDZly0jE2`hu)oVyV?Yv=&mNWk^ ztNEBSn1wAth(@5Kyl}3(^6VX1veHS`(C#SBiRwsWPLg$I8pWvoELN78skDks z)pcZUD+efgrF9Aq4>F>~iUn#Uh>nenCBC6kD7675z(V^#P(`;JrLqX6!|jz|!MC6K zjqoI^63jRn%@x%QM3?s9%V{4{j-LKG0_|In^l>}#?Idv|-xMxuHXv+Bbtds$ppq)ZKl12<8{?)D11WFnT?DNK@(9ZNfa5Sr8x zvu&WbkBW&@aa$WNHn!7lDQgt4A|5M?&T>H1~??*54qu_TdO=g<>2 zOOOjV*Py-mBCD69vb$W#GtC3qB2JilC^SCmYBHa-Vkk}*KMY~0YU~PI0fsecBz7{h z`~yz&=az>8pnC_2uSjiDh1HQ2%`5a)DpMpFYFp;8P`UyOyMldo_XN2z+yPvQX!UX> z6k&->cW4!hE5YRK1C-KStuayDK{(5*uVe9EW#D@RNfIf-Q~{2LlQ4Q#{W-Exm-YF` zVJB-P0e9$1^8hq`)oRVYO5ilz9ToU|p{~$4-}KUt`)ZPIx2n8Uy@6^kf!%L{GJC%5 zhjV`!@mKC05729!Z=Lvh9dj)ER}G!Cct3x(9IV~_h;7MQiFNJQjJ5qtIChxM%?|2i zCN3Tk&^mT1P}@m6D5fK=(VxFqcBOpu z@wPoG=c`zU-IIHiw+`T!AMwNx!i^-s@~|>fEv)t1*6=N)o&I=&=@UP#41J+SE%^MI zbNX+=a3qkNBbERyu4;2JDgfxM<-;0@MXz%a6)$?!6-Ocd(09*FHU*ZAh1{9>J9Nc*r!5fJUU1P>-gF9`(hN3DO~Q1S_xb z6j%z77GWTo^?2%&c`?Z9l`(uL`al1iIbxj+2cMC%A=#7&*SZHPgUstR*~*>aE+{;T zmniT^wOa3K9lI+Xt5*^_v+ig~vSv23r&H(UwVg>yW2>B>WNvxC?E9BuLBZMc#ZGsW zqOd-+;u{9);RD(CuLb1E>+McEuXAto>(7fKj1ULw_W2eT9Dbzrc{^0naJZ(}9xmCgwxGCW4G zXg3<4$S_KNmD{5tW^@}$WINY|V6hd~oyHFUU_X1U<+B^DO|~f_Giy>+=|5RMX|&rB zsdK3=WK$10I1}sBf^R=t^fIpB!iQNNqi5N)E=&gZw}MDg)!rO(xlbxHO=UM4<7jAY z)94lzgt@f7gB4lLbIae{9WN8 zu?+W}Et;>6J?f`0pdrY!6dd5$yU*BnFnIc0K<-%FkJM6C@xx9k&j|B;*~0X9(h-Le z+)yX^VfUf4r(8)y<-Z5%c!CmRSZpT57UhP^>iZ>cXo66?9u`!m@CL!p`iMJsa6F%k z>Z8Ic*q0X*^=DD;K}(@vgzf7H_k{=yq3B~ob74=payb_pIccyquKB%O>GG#CQ^`C6 zQA9j{N{+^gz_vCPoCxj!CFGOXY4<3B8oqWY(JFFOe3NRKvvE|q4;RArYVL=CJw1$$ zN2^;@AK8l7PsWPB=V6H!H)DQw1r`ox_%M``Y~Kf%dw+OnzJRZ=SO%-3L2I>SB4c$k z#LKhNQkKJ;wdHG9C)VdLA_5Uydmk4pTn3;ZNao)1GwuDfrqnFOF6~AbJK&SVep)IV zCL0mDPm<5EvBgz*>kMb3O=a6cYcnh!6jdM=D=wrd8U4fJS8B6`U}!Ei@(dZ&Q6+%= z5V@aRv8uoO$9WCrZCP**j&X8PU9jq*K}PP4G+mDbJXGh9MMiM7{HD3Cbu)3Nj+kgY z^$4z5C2p1Pfs=EBL^s|}LKO%RJD<{oLJpWf?&q;C>2r)$PxeN{GIKCvS1(b?(x(Zi zLW}yZI<^QS!k-sP&)l0lnvPLkNIKNq(HBLLpDj;3Hjuj}OGLyjpHgOGXE0oikPo0@ z>nA=dZB+R5i!EsS_#+itKq}_vln-TdF`}B-7|BLUT=)AY&QKGoFsxoM5(sUl)p52Qf<<;H9wNvMnrpSfsvw1 zyXbFhKzV@^A#dDcqwrmy6zA=6c1+`E_$d3LK`v|-UffefZwW(ErWncYWpIbQI4D={ z{``m7zRv-eG==$|eJ@z*zOQ3^4gm3hE7kEqq?CbYQNow4H-oK)E*Z*tCOE?}Jh%;J$-=rf({&zRaVpw|n) z4Br_?)A`W1r=V6XCbiJbgx-qP7X61#R&~Ts_Ur(C{q^Ex`c0nP&``v#Oqeqe6NFTzajhCa{&oEV{g3hKa!C&0$qag(8aoa*Us1E!V0(l{!=QdkzUgd zs1(Ir{56l`yH~NO`BGeHTqiD6m~0RXovRh;xb!<~^WNJ@!QvPtw-@=obD8#>MNb>$ zb=bW#K{Hu3+M?_geq^e?_ta@A?soPehDaFp(?F z2}Zo+1N`kg2A;#8sAKFFiAS9^lA3S%#-13C`J%b+yQmWL4g1{l#+K}Wnvht@r~r3UGnTsTyisPxTpi85xQS!AnTk-DTrk~@^-Ik z@#BiFCqmf$Oy>7Q`C-s^Q<{)|EPEqJZFWW^0^9WJ-3&gv;5R}w>%r1ZA&DZ{vp;f5 z(+GHc^?TD!eUZZNiL7-lehh2>T)g!iUmOFB&bsNuyOedw{i#T6Eaabp&teJNw>$y43tU`|RV-A44|&3jtw^Y)%lw$DIg(O;tHkRSWHw z-M@tOUju7z{lDZ@II1^(GP9KzcROtfHi6>D&b#v93@|VmpMUlONS>eec5TWtx%KAL zE22C#c$Nrwo5h#z=GBVMJ>zKddfESk+aw}|cNR`&Oop3PV}R#xIdAkgWZ~!Gk1V!* zjOO5-=mWeYM>HK>X`*p8AJ-Yt!kBOJJ}Z2qOV82M0LxFwqQ?HO&b z;-qa=e-n#B1u@hfH^T?s=uoQkNFzga7~-M17_%q)v5Ofh}ptA4sf zEP8Vu@4eTMuC0&Kgoy4JhLzz((kYGxl9YH>y5k>h4I`bRF_PAj^gC z8bNX9$*>X`C4&V@28!V?fUb7w4I_V`9OWdR0P#`Izy^k*e1TX3J?Xmb6%}8Ub6L{x zgjBei;z<$z$ugA3@=W#`}GdT89br)Ig2=~Nj8zXnv zcXWM^B?GC&eANnMQIez%R9AEF$n7Y>m`#Z)3;|SRIaz zwutpqd1A3oCUG*jo-jc0iWha}Fr0A|d*#71x^)DwESawGb7SuV0aRC^#t+p_hPoeb z-ZhJTgK@2%fu_>(|2snadw_Ve@6@b2Y`-1++Kk)y*KmU0xN9X6WvmX4a zwExrh{JGJeD}S8YC1%zwe$bA2>anr*o3rd^3$AWrf8SJ#lJxod_YwA*_lp+n%|wzfnLn}p*TWhP zy7zkU`J!R227g?yeZida?&ki!=XW>ePqVgt@n(%(ukU7j-A!Emho0-_91#R`e%+!# ze;qV2=l=6h^IZQv-5&z@Kd~nqUU(M|;q{706duT=D|df!J(qUi`~3nXQzpwWH*L}y zGM+qUJ?t+VV(4d|!Yum_-Ogp_obETzL7>j#ixq3l=IG>q8amAdvn_f@>zwuM>xa_z zD_{HlL)CNo`xN$m?r;0|vziytfhT$i^Et#n%lkR6#71V`$e-uJKOD5_3X4tVzB^a} zfbBGpe68%2*ROrP*^*%?$1Sz~ef^Pve_op(_xcwfg{o~V9{eLJ=QZ51pA^8i@80Lx zll>)gE+qGQW}nyfVj0ZBe)9W&>0ECf*2tNA?=aUUsy}-&TRg-$i@%vS^4ssL6D#uT z^Z9Uz!TyLQ{Lkq@Ip_TykxOzk87_tyCB0s7~>-rrL{ zu=js@eeQKKCO#IyV=1QnM8D$bcK@}B_ezEy{;dDs*Y3&wXD9Ey-9M*>C2aS4+)VcS z)$kuI^83S3{~uXk3!k?GJM&AsI+p?f51gDAq(mPB=AE}_f5djdA33$Y(<)A5sz|Dk zKbyOE90R!-@^`l4|CiT0`*=mfIB*e;T(knntVl9OP=EZ{arMqNYUn=Y6M*Sf9}|Im zcWQUiQo)VJ7ZnoVRFUfs-SO%f7E2HO&WdsNk``&szcF19&M4vd2vyA8qvd|un zO+uO3!!4OtujSYMzCOnj2k>)Ep7AR42t72QZZOVCqCig*_I-irw*QE!jdNV z_II?DQW z%5r_GPT&8iZV<;w5zch{f3I@iMA}0DZUCgnh}4*RzXZ6bC2&Uq3>votz{4DW81RCC z;uTsmQN`nq@8V6=L`u59NEJtJS|s~>2{c|Z%%@U2=)mF%4MC>|Kj&cv?0#r@-?m` z$2q5t#Hqx=4G{_{N3-jYN@uE<0?`!i*q(fu9I<3fJC9tgX{jW%Q^cM8;~arBf+M1B z1~-_W;@~F9JO$~pc%xIv(fWKo&g1`0JRsRNIwyw|3VDXw&0OL4=d2b==PMepd?P^x z^lhU&tTgOmKm01X^P>!mY-Xa97VuuqdHYtTCM$DAImCPAOzIb_?sprDAYGS#`-;g1wFOyqcIGh><$yvhbRV`M z{&OrJ61AIrC$Wkl*L>Tx9_Co9$7;xZuRuXI9sTBGA%DtIc9o}4SXC6HC6Tl!eO(vwb4>N5>1$W z){d!=u7WiTL;17XvHMznH}A#W>3_QXDmVVen0A)k7Cz(r%w?;mh~^id5> zY!4w)Zz4x*s=`?B5x97>-o2iL@8;CU`tMi|dDS8|l4Vf~(v{Xmwj3S+S3s!0sp^;_ zaYyk-#thv`j*hh!+Vg2LffYUJ_lol|E03{)i~fNjZ3WcJNA&SWN?H-tFwBn=IX}Oz z%bkpZtv~rOR!&~;-W1um|G&P@2&R0=%0rou(C<3eO8&0u|MX%E`c9r-{?T6byC%kT zEg<~QEhdD-y!3Tun;h@S5ZoBM+2?;^CX`JA_DehNLQQiwP5#*9c!J-6!4FDp$KwU* zg1NqI+rF+xHFR<&U%!zIY0ubO^suzi`%(Kj^kY{?WVq^Ud!1e7;tmWGCVv#Wk)&+k zqlEGF{=C9?vU@NFkZl+DhQC#nV4}}!(1QC<*5Kqj?#-mX)VtzJFy#pHXFb3YQ~4+( z)M#^M@>ZSR0N}U-6;Mv3Dc0mx>U#~($cOqkA9|SOjBkaQ&QGGg*FXG@InzAGBGfrh zr|2M_-s1GkwIG5;SSHL(SbDB+H=^5WI^uW#vzxtbN23E^uN5w|I^#V0%GyBwST?$vi|f}skztQhnHov zkjObqzhmcI)7%~EfBT>x{Mjd;`6%rN$4&WzJkn=ua*>3tPlqc4)2k|5JyvX7i=m?E z%6Doc77s#MdXJv4ZrVNP)#=uwR%&K)YlnS8pz6aWg0TK7F_7YB>N*whW!lT61S+>m5-2jbrbl9D3N`GJh}Nlf7Pv zlmCE;&~hZqqARX_^J__n?EuU==f0JL2mX8u&pDY}wN3nIzYq2H%mTE#U+F)Le9vcZW{!4s)0N{`%yU!y-Y-rE3i&oV z1-Di~x0BwyypEak7%XD<;-+Gu52%8(Jd}bCcgSyqni%+enD_%>e$aGGXjp-ACDUtb zHMz6ae|pXXs@7Sja}NI?$_Z!)@g7Stb) zROov*dbMXxS}AHQ6CH8)0%@A3UYKX@SeE-np0t~NZ!(@aAjdpPX1|sU?sS9cp$$(V z!s|?D>!21MK~+?D)rshVz!#Y}qE`*m!RjPH_taqDzRJA>j&o?LyYJW2E9;z#CUIP4 zOs0cVp$Y*G`ejHS9nm#M-CxH2;@(zYf&~5m@P6vtuLey7Hzk1^B&j(~VN^^rxO4WR zbysmoad>u^9M5EQF<(0dNS5uzFb+0%>n}BVy*ix66ORDZm%0&a;6}3?UDx+&5&2Y& zea0>{TqDF2d6s$Dp)r#Y;L$L3dgT_$WWRkqEy2+_S>$%Q0F`r$B)8K`(pgtnl1AO= zaU_tGuf)t&KpIxqhpj2acDt6g`_TMM=O1e+C6d!tfxe`>`&0iDkkDBm(*8lr0$qb>gU1ZyMb@1b&m+b^8^m5{^Bk|3!dGKJQN%mS5V)q z^*2w%F5BGk;ph#0cEwvdbkfS4{(O}-%2v)D#XA~7;xt7CDK`@CzFrY0kHWp(uEZEf zK0nV~3jm$AhqyapBNIq;-foMeBM_gDqD_O;SA=}uXSL3Do{@k_ud|nrhABxEi{%@es zPZnub`gE!udw%dpNrH<6u?h9vV{AGWYCVe>AlWSnm*rSVv3{x zyWe92(ZMp;k9-rv2lixKj9A~)+>vcbwH)s;sR54;;v|4VuS@ck>Gf2DEAaO&d}y~# znRy(&GmW0+uaEHFiIWD$-#L;rzV!q-tXdT!Nx$vxcCh;whiKXTulLAG=J_QP0N+ie zinlInQt#jXGBA(=l8joM9UeDQcGxCG*wp@x=hNNw`F!s!2I?EIM9{J6$KMa2PBpGq zktt@h=}wKvk(sv-7=t+0BjZImYl|IeA({T@>GR#)P7K{;XN%*eKl*%GRSXsYJ8Bp8 zHlKBe&=mpLbn-)QKIP-{{Z$NE6~NbbJXOeOwA#G^xc57VY5(SJGg48;&;7oPTla&H zi?t-crmN0)Zgj2w@u6ffp!|fFV7VVB-`|g$7Aia_ z*NETE#V+H-j^ia-cq;oZxgpw7+B!tHPj0Nn`K}|fnfm1US1kn6I#YZ!F`1`d*KZr6 z5{u`z87e0upnooo#?*kMO}AXq*bC-MDzkCnR-spo?7BOxtJn80eKd0hW`!0a?WoS& z_ozE{ga9oYse1GKebK+k10i|8%PIYx*TJ8(pZ)aVebo$XK5FbLJ?-**r&H`QiFui- z8~54AHRm(!1Rh<9EEDTnFdTry;eVbt`@i-x50c2neANgIL-IECF{s7AbAI-D`4pn_ z_0Epw#dNXU>(O8&RzHAzv!7Ex`5XSRSe~nIdN_Q2=t9mSsfP}ApL5O(_47u=Ecua9mMTs1{>JVeNhKSl z{|{|ImnFMk0qG0p*!ztT-fQ-V->;h~bt5*0((wEG=Z#snq4*uGL>)DS}m4vK> z3Pzgm5ZI&pa*IF)&?$a8Qxo^PM-_?rl@PD~uenAU(kmk^07kh8yVM|7@MKt2a0H2Z z?H2M{adyW*4aM>%>5e9ydzaXC)4;wos+TFbgKppcR)7iH`Q6|&ZPzm7E! z#JRUKg-(5)Q@L&?=lA|s#gK`hasdr`rf)?FZ5M@-Pj*cSsu^!6-%z@TaR?^pBG8R{ z`__5GgGgilrp9)^myxZ?$UzV>;cbI*{d%(xf;bE{m5(O;{-aw-cSZb*8M`w?+ z3H*|eDPBZZ1sEnn!OjNK1;Xt;|L1dXQQ%j?S2$VFCsP_(=u_;4ZOZ~mhwSxI*CVuK z`Z-7aw*R|b$Nfn;qwL)s2t4O@pQ7MolTEXZ5|bmqff*!Aqrt_NbBj?dk2OYElcfMi zggf7vSTdBPbGk{;0)a^Wdgw5!T13?^f6OytvCmx>SJk=rcFu82A+}+1wS1MDr~8md z_!z4Ep@GNnebv6hA{dF1c?Wh!2)aMC#MHw?t9biMXNP~AY5kEV8wgscq;F?twqu9N z8y4)V5CN+0_y3g%AO`BzFrB*Juh<2Xi={lbws9c7g(FOi(* zjQe2f=!N@ADeA}WFW7-LO7_Q?6x-44Rq>M1X3%_*$)drs%rNyxGz}^h%2eUw#v_I? zZ8Uc!FXk*|7%5YO7Qj?{rOrlUEJ8;_`DRl9vv1%2?;(oL3zsn@eEqZ&JDmwRjjfjh z%xQigddQHh`UIC8OZ4`m#vH{yXfi$ z9EZqo6=<#qZ*o<&f;x5k+Ybv@OTgf^X&ht~@bz<%Y?o^-nDSoOf=(uh&;2_Xg`CE5 z&ZWosib=4a6hIxe;$jLEu#>Y^aEK)uFh2|?eIpwh@n)f?`06nAMni$rgke`naB>D2|-)VJim4X!A}{09}~)W*jDbZ zpJ16>+8Rf6yQz?s10YKYnl%LDBC@DF_alDe+VdDn0TgbZLbK_AUGImI``4~sL?C#} zLf7p~S#)jz*obMgJC32j?n9mkI1ZySOPsHca50VI@p;0xbBm$le?63U&FnrSWqz`_ zhzH3rhD$6*U)V1QBQ`FNcbIiy9Rg9EaA7w&4g1!B0ofl!RkV+&(YGJ$e{kF6$xPPgb`}*-xW&< zYhk`&o^19rtE_i@zry3uneQVZ^ucb^ZklqX7~@ap_>}0<+4tT|nk>>-Q3p3F{$i-% z?ODIiOD;s((9f!@ztiMv1jPS=fXBZ3T2`&3olSdxcFZsYxQIuS8Q4IXDXV9^3qhpP zAnAib+0W6i;c_(eqK+*9dCZfAxfT$ze9jw5hvLUIn(I5A3jU|gpma?h2P>_oJ;%DeA??vH?z4Z?c$8vx(; z!*KgMRww?wE6vwRrP$rjv&8P7AjdD2E{d{|CwewTAyjnxivsBHf9QCkD~+EolZbT) zTX*lom+NoG3_Pi=z~<`sl=Z*s6#=NnAbU%v7EpgZ=iEe!Fi}eL&MG2Ig4TN?#aNbn zLwt-kzsZoSz!Wy{!fg*q-#`CQj%boH?0!Lk2gtA2;|o3bQN!XVA!FSC!GIWa;mMPF zk*>cQswx?qTYlP-H)s9a4uH$I9^w5!X-mVd&BUAVUGEV%@(>P8A>wg-*t>!xv;U)n zXRmtILH#b+Ki}&P7tzS=z-CMr7tQ|#vl-1I8O1T*$5s;u-Fv62`ig5Apur@C&Pj1Z zH|9@n2EFLqG1&80LF}*EbmDz`L5v-$l}+E)~;~XRtc*-J5>qIj_y~bF!P*_OBaFw{84REZ3|ImyrUm^;XcZ zO)x_e{*?8ozEg=zYulICR8{93yCy$kZ2?$oBYc{;1s>GuEYtvw$8(4lVYALY{jgRq z$!4#>?$EnoRI+~i!@YB+Z+S+q>&Y)qhU>RiYh6iPixhz6!C0-UwNyDfc3A|RtY5APPMsQAMH&k_pHHXUI!DEEw%TDRfo6L>+pWR=hQ>v z5a>8tTFxV{Y;zBeP(-gud;GFAVm7#uyUXLN83E094)KM4Az7)a?C#f- zy)`uZ_J_cPIKRO)egvgy+QQxq#^ekj0>bBA9|xzZ`ttBZI!*N~l(D_pK={y)NRG+H zqI3Stcm+8Sb(pxe4BdYz_kERPPp4bPigX6(Gj-ZM{Diff-anDF1{&mv;xE_gUwAC> z3|HvH?z>ubx?gnT3!#CO{U%iBnp^Wh<3HU^Pbzrf+Bm3RDa9qGH8Q{^TRY{q?lkJF z`mmTlkmc)LxRm6&K$0e!7pgxlvMxJ|2gjzl6zRu7k(@SJhK1Q7B>^0|j)bRYE4cj&ZSvSTIMzt>? zH1@P+2zW%f3{*CdiFHm_Q<}jg6Dl{d>6Y+Z0Z#ZD4}!_Uwgl_$MjfABQK>fV{v|8h zmCw3rxh5LA;0+=dm=}XFl7wTs;-)=+I%Z!@B$1 z-vmfSyg__4&_f=8I{OXnIQ@yd7AA9i|Pj(eg_$YyE%{X-x+ zp$-@*W21xr1#I3c&$hI)AW#D2fY6^ba9^O$Mze_7y0I@S_dA@oDG zm+ooD*9;ClXbow(WamKw?z!B|h&=$#Ydmy^@~RRD>3$}PMZ91*@AnNp`<#!|z!+P* zFExMA{fAoVf^Wu7nhEu&ZN@_|Z$Ofo-6(Q8;&nH-y&k+!>*1eX1dE8A>T@Tr(Lze` z0j;NlGyPv*9FEw}o733#LH~RvyRm7kSSl8;D#6wFzSKAiakNGzQNo2hbzE0Sst>Ic zi#*AyzI{#S%C)fK)bgBoFtMg_0N%dcU`XKi8`5muiyIuJ+e^t)KSd&Zk#}7M?2G3 z#96XxVB#OA+NL(94x|9!#F&m5!RCvuJfd7L#?;%dTHS|w;kfT8*B4;vk*b=0P*@B# z^dS5R?pV6c-MU)$1>krZu;q->5W3X}HN-L~sZN&CJ>5X_)W{w^gtx}JXP(Y=6pdCL z+N7-mXnc_v$L30rdg?ds8{VRS7rXcortCWRwaQbW$c_z(vpg zZk4al0L^cU2svMtSN%@Jl<-ny?`@t3_T^p=yxV@@Kd+%RflcfF-JkzC_f9tuKwUv) z1d0@UGGpIZG}rajJI55t|Ip-U+rIalGu^|wyH4Hv8kjC_{fSz?JNikAN>~L8;>RB` z`>tnKxmEWMJ+D1UZ4ABJN`)SYHaozlJJ=t4LE2H$g*g#IVM%j7XHy*?91&sp`p4|My#=E)5To|C5T?5aj z$#JcfV~8~y-6G&vEj! zv_Yc`Xu&%I1?&8>4b>Oqt>RHGyc#3QTez1}jj%y5OnA#O)A0C>hoR+U2uhfmGL{?w~3!veD z===Rv()!V!A8eIocdNB}Rv?b}1psc}CQe+GV!#54X151Q8g``BO~%-qmk_L~bJ0%& zl3+DbOuxg4ckSmSJ{`6OnAY3;MAbB%PMa)#{t7;X5?+zSXjNh~(VmL5=iu&?fI0Wd zTuU3Z_Gk$3d)rL9PTUd?WKsdi&%Jj5ORU^$W&Eh_NEqks3&<_`*cA+)l7;@#(-Th9 zmV26W2me-VN>CAQ_tpO}=C4jrr>zBOua8{QQ_Fd_(RS~5LUJD-XdjB>3?RPB)X$Jm zzj=LOP%iTySydm|ugdT5))vV*9IN!)O5GB-El z#>8ByH9DIj>M}SI>156x@dprnW?EDGe695AG`?{BQa-*Izf_lkmZ2<>QtjSQ6fz(_ z^>a<~K#!(>RK&weM@m)TrKSQ`)&Oed5k%Smb_R|!eg%8gE4HD1kTJV$X&Cr#L@@zq z*BGeo&MhbwUsy7@(EmxMhB)_7 zOzf_Duz;U|F>7Rby^;~qYkS0{i1l>jgXBX%XElSK=>_|>b0&Xr9>k+ zSYboQjm%QYKf0+5B9KXm@iRrFm&x&|X+%|dpIb~fn@04NMLK-3rDESZl0*u3KpFQT z0`$NoJvH?Syw_d3T8YIuuFikjA)$mqF@Cxlj$Cp#GLB)J(4^nF9J$eUN$K7ePy;&t zI6pSxbd}v4@oQfQzwn6<-{CqQE`(ihm2HzBa~ejvHS#&@T+a(YaV<_02zK{b%fpYg zzR1#Af9;PE2Xk(>qNUNtf5A4GKalXAnH+eGWP^6@%fEm9-yHz!`Ml~-+g$d?^MJCGDo{q0Ym^O&pKZ?{Zeeb^6#^? zl3yH~+Z(PzE{(3duu_3Di1dX4D0k-yt&-$bjRD6JvWXBns3Q3}8=-7%cJGJP0mSGz z&Ym|)jb-1DfF7FBb8P{UM@yXDLJ7mPpR-aL8sG1CZk^-2S95a~!F2cMpGH;82)ze{ zbPKt31YilrdEVgeb1tTzp4j$6i-&9eJo{c){(YgvJx>5!qX-X)l$nxT zVRv%WOC6ki*o!^t(eqoao;UQVKfc1v>HqUi#9x4K3P?yhb=b*{d*guV@G!4gjOaG0 z>W;goKIBDF@PEkR);HWszyr4YsTT)Nd7qZIj!Eeu8PlV~efjP&3;vno;qBjnauv)8 zxfGAj=H!}));|;y`Z)lqK5LHVb0ANUQ8Ha_$wGl+2aIHc#hPfT6Cb$$4Q)(>htt2s zc#;yF-u_hfN|~m6=V$-@yfQUnd+B{4jsVU^E_=anre1dUcOuMxZ=uZz>?7@0^~?M2 ze?R<^b((`_l$$ZGt7EmHwaIBb%=z`vOTRaxVg}TQVx&|5K*mDEdr&d>;DTH+Mw06G zb06eU@K?P#bF8viy zLB!W_{gLYTdtZou5zqV^&FBaZ5QA8qpq9prDe`D3-xd?a*8c2H7dUatks`Wv&hhVl zW?}5^@Ap5Fil9oHfB#dtmr@oVJ^yw}T;E3DgVeCG9wHY7w(AgHybH^~SnC`r=*af+ zq47tB`QNg*9?3IXGmdIf!i+Xy`l8O%DlxdJ$IB;T|{!u zwTdd$>cX9)y*XzjKLZA}LL%9u9A;0XLK4>gi}EX-En(R(EekpwGwO-jCWR?NVuS); z(<<(1FCW)U=r*eNJ`3cWaYK4{vtF@fB6%!&#t4cLi~8Z(j#|9CNtzsdArA>m{l>j& z9S{nOWPLulk)9mpq}FH;yUzK1HH=A)M2W>t5^oWAsR=mR)5(u!B#ZtQ001BWNkllb?l05>7!9C) zJ0QKtL2(0#w&Fz-w~7iHfaf+!JrllNFmcPBxojS#*B7cuoIZVHCBwBk6?niUZnsaJ zD9%U}iwomL8@unG`8U*Gr+hMi{(7w>uLd~i`y)} zVN#bUGNM-0b&jL)A^Yc-g^3V;d@S4sNB;iN6E~u7FU|%bO@Ovkhqeb=yPMIRv zysgp!BtI(vip6^S$qZ^7i8XO42&cXS(0~OriQD&E=L5LWxq7|ZM{tg)bZdDicpDpT zXlhL@WW9xP%k?!+qTAExb@=6`N@Bpadwj$znU0bpPJbb*vpWY!)w~tD`}^&xgHl2H z1Ave?AuFkL-bpSQ0+2m%Hd*8nxolO?#qzmshXfeyb2jOg|}LCLXvx{osEpFM`@@&C`uEEwBB%NCzfbJ?ZJT;&b2@$D~N zKvD?xH=uO$&OTJ5ySkAsh!3_N2&4P!w%rlG5e0A@Qv9-Xk;rxXB=~7{*#pHvf{~y@Z0^t*BaAl+hh5`RZQq9$dol zO(PlC2ua1nGy=*4o<8gVg=OR6QK4C8dDN$Fx3X)z=OUx5qUU42M9zouP_wzZpwd|~ zx6{?*2@R0;7-RGj*Gt!rLX~VnY_Iu22jjLs!6U~hhs&*|*jeJ@j*VueWif|&+Pt5d z+UA&SQ8}`ozj7LPyi9t&(hx17ThwZ$x`hP!x;oTJaG-x~B+)13P4Yj@2T&B^yj%Nv zt7IXdUpj2_@@so!U-I4iNnFKIA3!@x6)SkR^NPErWlKsPIS>&6)MCsVmN~b|I6gn=LY-jAKwF@U~rKlA4E8Ddg%7J-%Clglty4wV8SFc<1Q z8r~cD``Vs;1KyQhOh_A_M_6!QD>84)EUn*aW% zbANq)WSF|rHKO1N%v?#keE6J0;S}i!c+TgWHuH8SC7(9OfnL(VPVjX>l_j06!&R z-pRS|JbU=1|G5&R+q8R5pG3@kC}5=S2m=Z^s8x`rom2{Fif+;9)FdzMgqxtVEIcm8%_o6jk3xv>cHGrpj`$5-}Y}IUx5x#oS5YnG~9= zWbx>FXK~znY`decPhj#vLS9r;GD}@4?u@?b9#)kARGwL{$YkOPSoGlZu(`{#2%lIG zf365XmV-zh<*1Q7^u+O8u;fyH7<*viV57e_0R*Nc$(w8)jxzaQcF=qplfj)HCX77) z$`GBv@1XwqmN5vudxsUpYe%TfjHz+*`c1}p-?qnI<37+QoseQ;;H%~n3w@U@y}NrY z;?(|6gmclA16coH=*|{-i!w`Yxv}LQ3AhrulgB^Ep2g>1BWYz5$lyfmdrPtV9qlqp zM=XY)BH&r~m^<>MQLhEu%3bau8$CTt2V;yfxmJo%NQ?JZS#;kD2#_TSdAKa2#K|00 zZN6PF2p0kS-XmX|FdRHV#&RVCvrEQu3hs8yv8Dc)R`G@#eO2n}?X9YB6Y8%*Tmk79 zMPAz7(&Iz8`&DxW-Ye68jOs{PQ`NVEM5e%H`_f02Syj1Dzw)FhqT{hrZ%qSmYXy&< z{m#lcP%c8;yiX&<^xwj0XsmHv!w8T#r_yN5TBj=Tfm2Y_fx92HTWLQ>yM+z@ z@TxQ2@q9>T8_(x-gz{YJ07bY;N%pKDG@75#FU!!~EfVpA)uErTLpcUrm#ieIyj!(% z$(#U+PY3*!_JV<5!E(uywuitkE*vBv(knCzFO>LB@5s&th);d`UgyrL@WOK;iu9}i z6{jjl5oznBf+v_H*Ej~a^m`q$Z)^O3@>~OI4}U&i0&ve9J;c30RVE*Z&c%uMoEkcO zymlMYa9T#b&HZnsm$PA4LR~CIm~Q2&`*)+ ze!t7+P%KNAw?SoE4|_lFx5#gQ8*byR4~{N`6)i^%uhl(eX6GMJkDxMBpuabKO4WD$ zZ?A@Ndsx@>&Y8p*qkzFLQ&B9ldtGHhvQ%f%T7ar7oT{Ob2qwz5=Yi1qoYKcd3vYPS z_g*l8Gj%sdgN9&>=iZAdI21EEKRT&fQ@3;fle%lCa4SiyyQz#b6C((Gj|)#==Srk< zZy*T#9EUA)jPsMDY`EJ$$4sOQtjTzW^3z0o&$010#}Z|t6IKPrVmWm3Q~8jS?aZ$4 z$UozTIbN~xUFnxe7*ij8*DU}Lcr5t-na?tXXrY;hsKyfu(pjSif9xgOSJ^J5WuMO- z8^bXJB`tc$ox4GB@S$?$)wZTw*4($hs?&d&EhKS`BqB8b=-(1a8TpyP7;Ck!8bx)3 zRWP>MOhagx&SkB2>a&s5aigo9$aXfQ246p5f!{9}iKLYu%oHbNzIDS{_V!xE5t>5a zExKb#r#=TqUabJd3qkZ&JPw&e{=|+2BFRL(y` z&~G3}9)2mO1z?YnpFc{C^mYK=tN$dTg%~Nfqm}bF!2hgmn;Ked<3U8FNe9aI$z}Im zqZj=7tXUFwxJ#_t>3O0c_y`w?UB=HYFaUgj)m6#hZLuI*hVSZ+G3NvT6Zxvx%1!W2 zHk7xTm*2m}G<}#ypK3zh#ra6za9tm}ZHo51`y`uH=cI%FI%4IRi_s=S_7U4SRKU|FgBvB7 zT=UH|Bv6YQ@%?6SMBC;xzh}K0b(^{x!7%uJ=^ZCwU-coeQ9j)VvDQ3LG!#AloPDx^ zefTSEne^qiV`F5DllkAb$vX9LP1Bpl3B48#0|7D<4|rauBduhnEOjT;vP=;D3KQxt z5e9?dsuZ6SA=yYJLlxM?XM+M(zKrGH5z&tJ|E{dth%_h7fI|r-;YMty$T&X88s}q zsb{DzDDUfeKVp0n_5U^h3ODuNu8xYxV=xG8eAQu$LChbJhnh_5P&Z)mTgDX}O&2)*9H=*k^m-5P&K zFyvo38gJ9OY7Ot>XgYy-mx>?_on!4GfA2L5brHYqibrFj6A3Xb=clg5T`oKWeolKo zOMafLq?bZ5wBf1tMr|GHS=0!!xaM|G>(983;jdIXG~T4=iAzk?gk1f{Afp)*JDPg4 zd4j|Te(bWvm0Zr13~t%Q(}GE@*oGvwUVeA6P&+kUXosIj+arBop}>*(~e%?(MjK)YpdorknwwjuYP$Ssw^nr z;#A=+s22lhpOM{r@3wYiNa4>1y0^WHRwo2zDdF{BYHKQIktA_00t3H#jz}Il0w^rm zUpp9BrgBylc&MtQ$x!!GtBsNXA9kmTU)}wfC^+Yi1dv#Q+8t&GRfGXt`Lzqs>KtIZc`hJ5J&FZv$$yWjxf*kW=CQ+J1_MPLJJ2|Iie zA*nj0C+THm7+#U-Ha-K%;_WZ!{!VqO`&)IY>U+PzVvcTDRp%V}yDLe1AF$4LM(kGv!dUusIPgoMdGlKdgdQ4wX&vwl-9LLn*^Os5V&^37>%%;GA{ z>+}7#q_utPwmi_D(-s&vtgm~}4VT>P-41ZyCt99$XW>6a_1O3xR4#Kcp1w^jLoKR>-ol>xc-HTt41S_ri(hlVND+9*;%35 z&p^Kb+`ID-OsiQ(w;tdk(^0wF+T&Jeg;S^dV-J;+f4W$ru}mc-l-hJmS2MnXGMXJ` zb&0mv@0mD&Vs6_p<8bKwk8~T_d1XeXC#CHrcw7~p2#Qw?iL&M|F+IC<`&gFe9JOZ+ zD6oUuQuK!~NEh?*?e;u|Nat4p#)53{mwOLCfb`gF0uHQ%5lopIsFwD&mlz3V@JQj5 z_a8#|%JMJ91~W(@!}qdFEy#zL17j89pCVp8nrgXEDzevi=At;NU`c+Xf#}wc{dO`9 zIf~mN^&Sj_wqLwshAJhybo*n!NlS3pdB~@Wtj4#{$^ohLwHtblVZfUmX#5;#_BjWs z#Dzr6+NPVx=(-Daylsi0WZgNkX5Xb3K`Rch5iFnI16iT zx=U2M9dER}j(B=*Z=hIq_viCJ_x?ABGKYW8M-~Xl`RKU3T4Uc%uNQC5ptDRngb@8h zZBvNd-Pf#j-wsFm3jkv%%mvU&XYzai#-;->frWfee&{*qK>}u-x-4ey`glHERoYLU zHx*T~?Keb@wFBp!OK$N8<=SEQfBSI_mbus23EAxjgi*t<#a$beYB6~^)xjT6m!7EM zS$5~>y9wvbYcV#6Ds8*lBjS0AFu!DE z>=~Y&Vjth`H^gy7Si+pX3Oldsi&i8?ZKJ^aL^SnLH6xP#7uy0(U%agf~0y z43okXUbT^UD<`oz$@^XT{b?=AfJdfhPDT#~z3X3iUIX1}hCl3rs`$#4P8eOy@qw?--GP#E4#N zb1pI`JI__KWs--%hCl6iA4Y5786Sfx_yPCuFVmZEeLQt*WN_on2l$PYj$fMR@@@|v z8Ul?zRh?QGn4z2y<_o~iXJjvHC5dLg2&z^s=c?D%<^5}kJupP}m5y$Wq5tFng6A%? zL_}a_0v;J>4ONpV^vmf=K|G(=f9a&mdcN552Qk$GAxs2&o~ts+dlAdi-ScSgm&Adq zN&)@jISC-}P1N+9g9TK3WR=Ye@kPDGHo^X>Pgv5XP_O?Co{p29qx6hTxBQUGF^-Hyeh-M0%qbpm)Fe0yJuqu$Nl@_t1~ z9Dp3gd(#Qv?;)8tZ5@CrNAnr%+zD^1bS%_}qty){K{2V}tKQ*#Cmbm0=VL&OSG_J@ zEFx6?t!2W}(`JPD(zrOunZG-s2GOi?RU7hsJ;`%nQO)KlSv7jPJ4NVMa|}?*;YQ)c z5wZiLvpLIrlsln;l~*>j@}MnERgrdF=>QvB65-w5u%G+nb$`F{5+~V7na5v}LYP=c zx~KGU&NO+|NF#Ptk6f*DnkKmTEdGUJwHXMh!&SY(D#f=A6$(;ahg>xl&(uPNBzuml z-_#`IqvZ+*&p=S`Ym%i_i~?9Sp8-!_iQg?3zFz`PuG6+UI+2dTp=5_mii0YJzr=c? z0TES`XmuD^Mu4Ew9P46XSx|b57w$3M;Q7Mo`$^JJ5+I88#buRR3tfD>ubw*iuJ)gx zBi#4?SEY%+_%UO(l|CXpGYRMYt5j6RP4{h}oKRg?xwQ?4{cai{{K%BCL~k=V5=mwK z*0d;H=oI5+>3S?Ng+oz7g zDU5Yr@$gOMRa8<+#Gbs4CPDRscfajP9kGl`o$8E~KIeG-KCqX`FbCR`+EGmTnw2(;9Z0WMGWDkU|p?Mv@)@fqh#t9mD zU1R_x`TUtjQDC}BQX`CJUJ@A@8MQe?{k@Wg*J>(#^z$4@+B}m`$4O3(SFr4(uu(pw z=w+txG9tyv$%?wWMeO~?L@Le6HXPYs$#5XH%A(b7REl2eY!J}i$Pe)a}vD;tA!>2VAcUdLomOQaM&y2(C?oJ*PEm_HX z!8$9pJthhnuC)Bl^Kt;J@qoLFt^VI!Dss5r^GF2;)W15 z6+bKM72smt3Mc#Dl~ca2*$%*-{O8xMAOwH@4R`itnjpCEQ|4vZ?5iA%x=EO-d-AcY zy$XYH?z@}DXZIgG&{b9IbK~v#F~=!PH`yKU>w9Z&p3gmvP(&Q%B9cGFd`wu!$8X2O zho?-+XFu=v<#%pcn&Xj2z{wLeQnmZ^uWeh@ za<<10XhdjtvuMaXSP_j78&w)s3S)9e4C%Zy7sQa#7ES0M`r+I68BpoZz_=K4gZ|pU9H(q%R z3Fdqi`rYzVrxv<>1pa6{chn4!s&ZyXI?_mvnFz7qNNX5-?=Msf+hZRYtPq zM6H_VUNU){{JpocpJvBzV{<*R2hu2o+U%kwrYnW?7?X!4C#-^fLZ&%g# z`=6*{L}L2nh?isSY6xexD>4lE9(w3U&r!&qYN{e?X&#M&2kL5QP;?3Uc}cNjFg=bPx_kQqDw^486V89uR9G2uegtH^hTWL$ z$5b1>6dA|{R*AH`kI~77Akg#-wzkDH=A&(LrDxTm3=xrYyWj!TK%(&7NMq2V@&)Ta zb@;-Yg%+#85lTtX9hJZC7F4Y6zI8nJlzmSnf-RJ;`z%uQUjPWPi^p-w-6X0tob?EnRy8fx=w(csER$V{LSh^jMLZqh&M{vJcTQAjH~^_F%@BFVncBdAMs z81~f$$Vf6a{o?p|C*o%-brju%YB%Z07bhdd1EhxbR!IL|*Z%Wxy&X!d3bC?nkiz(Y zxvxVb*Q^m`Jc7gBtgTLDKRwl}9^rcY>s!aAO)fzw3M9Lno!y-jH`Pm2U(IBdu^J<$ zaZjCs&@xU=TEWpON$^Y+lG((g2gEJb*X+%S5|L)c4yKoUWdLwLa&&heq;dgD8N9c)k$ZbTyOj$L7ABj8 zq}{a;qMMY_1kE}ckl+*9)gvWw5}2BW^ewD3>M^hSuUeSQBtl2#xXrBRam2knp{l&3 zb9)3rj!vE5vpUUDW`AjnAHRO!rY+Jo4ZSuKQ8aAnDqYdxd)7XSEc|Q+>@*xfJP5{ zLbR?*#Nb;Y0wz2W(#^WWZ_1k&+T;^^K@(tMRk#i#8_59v_??2Aoh!zU4>0)Xd@2|C z81{M)sx4P&dw?x4#yzMu`pE~wXgfc2{EeUj^YtWg(s6eAqXA_=QaFS^7%E=81>EWP z|L!X*mgKc9N7~Ij-91CpSGw3^ROGz1hm=^4`RH%+bPNe=lB`n?Ihak&iTn4RT&GWs z4IOAFWVgXEKi9)HjA}n0Jy^)BFyec)+W0Qysr)!*Twx@An;Kaka$9KAGkP9DPQIP! z;XW1W%`}~iKfqFd=z3>8!gs8<75A@z2W02UtIj(1)`AM_khIpQXJ2Mt62tsGwOacb?8@JXe02`wwG#G*d{>HcdXMOV zX$zSuQq;Y6{8p)M!W7aX`57N1Se5Cm@;O!{?Ml@Dm?B&NVL+b0Q3#CY%6%~+S5p@w z4*{G~r!{}iy?5rLztgvle1-LuhU@cO{evQRReirJ2d#*)FZtS z5qYBXQkk`VG8ncW>hg|_eX;0aXsNdXh2LaUk$!t&=dmm5FIWD{iBrn7NO9XIig&qf z;Lyod#hwS^W+D0KSynSBEfM2Y5b{JWpJiE9S54lM!@D%ak1%Ey9vHow#ueJ z1rzUDP$G2-?MfT|1UE%SwIqK3Bh6x8)U@A`-sn1l`<$ z2Ve_(_IOSLNOy1%+A@QrGOrn4izr|aO(3Br|D$J9@d|_l**G|Gt!Uw>!%cy>I6UsE z3sTuQRk+uCw2Z1|S3=21b^W;SRYe@gx1HtL{f8R!F7bW!*s=gr4{*+>c2cv2FG#4@ zP@EvvIjxY$HyiV;aFXbIi=~k|HZR?Y+*@m+g)kV|)|}8G!tlz|H70GG%=x3VbvVd} zkOqOcU&Fw(kE>?>a*kCNf4f=Di&JIO-$q;dQ|U=x-iyA!yE}l|al@T*3wC!JDL|7z z$Kb#--O45JxZm%S))V`>7QH)1yjHC(#>g{jwf?j7t??g{GG^R!&Wx4OVVyc~^tT9V zLi@MB;tK}|>iEEnhPLhtqrMjWs#oEXwD;S#s73%MTM)t=hg>Eo{a=FxP5)r)l@@OAXPOUAth6Uf;M6?iCQ~H&FXS}pwM3_F zM=|fq{b~R>@7BU*?!D*Nvv*$L7@ctduB?E2#W0gxz9I&Czh>vXes|8nya_lDd(P1t zE+XnmkRgei`0-PvY$&ZIRb&`wqzCkOEJ;`1hd8u%e*D;Cl` zA)OIovRcfK=~!aQ`BkpTHQ#+sUiRlKZ*k~fYz8A6JEdm%ev*zd__I2Z>~;;?UZ-{h zo5#Yx+W{%a-I?=>P#QlZd&cY!Y|u~ag7GbD5lS|;JJPyR2U00ImnR&a^$Ne=FWsua z`++C_an2`eLRJ0uy;X%)x~(pGeUQAo#nB>{jjV4Wxhdy;{5PIC(sDEJqc>k!bEfKC z(r;Jr=Po`SFh<6PQJxDlFL{2I9O%AJi*a%HL>RP(F`F_>D#h{I+u02eecR*AFy<6{ z9rV0r>+&ZKeGXggZ+;(Kd%Lf(>fcG&OG-a^6~`&Y)7pOs)Hv^s&Gl{gUw_V%HW{oE zosD^gJ+px2qA%+v`+S|N`SV&^N8mC7bk?F0^PR6>uSO0KGTZO>(F;T2{i{_qTKMNI z&I@S#?3itSs*e>0w39R6Jt|KkKe9PJMQL4kvoQ_Pe_w2&2C&OIiwabaLaP z+n-p_@BUBs9{nxz>`lsCIUU{2;9nzv5y>!j>2#``&w|cY!ZQ3H(c7l5# z7+v$zXu(9f&5K}4f9P#E>yIn)LtPP1h>^_29s3kyF&-{rq7~9>6}MNPBM>Rv_~e~~ zaWc%dZ4gj-lB9H#X9{==sxkhQJwF*G7F*L+nc>y<~C-`tlS5AC?0y%F69l2NIGfy?Gcz`B6XF%}Mh}Ie@bC)|on*A=5#Dv_dnU z$W8Y>D~UA77BO`9Wqm^bMNtlgoUMZtb}!zzEEZh`S_C_GOQ*gN{woO_RD+tg$Hf|w z<$X~+ntk};31^e81ZeBtXkzocx>&STx5$e@dhGG_7{d1O-Jz)EaLZ}&{bWWf@lQ;y zpB3=Ya=LGw!_+xgnA&t}pwB7$Iw(Mf;j|TG->*Qc0txpaCcQH$?7K=K96{h*NjBjj z(~=%m9u77gHC^xnGouYDRP1)XQ#6p4tOotWp**K1-@03|gzmeZz!Lz*4AmkUwpBkY z^gYGl0=5cz3!rAjbpyE3E7nw6|6NIdGEFPpB)VJO$Jsa;z5}>%`{O1+IIb2{N1$P$ zUh_2Bwae8SjWU{X!^z^jy7#{v$^#UspjZ!@ZKax;iGf7Na4wmExKx2P&CnS zdQXEq7vDx|N}V*Q!@Uo$h`b{0p7rIak1FD%iN4+-IYn3T0rem3?o85U+yK(8sYM*Z zQ;|$qSS*#4!eOjTmvlQ~(6aZIEVc9-AKle|5oTkl>k;d`USK9F=#$Tju#_;arc)-E ziR0p|bcwMBot#$Nf1ieR-2Hx;$eZS6l7K2jB$+sFRUuD7PrH8&li>NALV_{opQ3G( zYouKnE6rJhG<}OXG2gKGU8n%FiJd2=i=| zILzF$&N%Z(sEOTeE3N%t83IE`mvJPs!zGCDXLo;ih}SlQbg3*Q%mb~yL)>|-Zun7= zroRxR{HPz4(T3(4da~tUJ}DP`KqIH4)w_6c$Y}PL+Zu#-jzr85UPF9wVMbEMZYt(hqeugMm$6tXSQ#au=)3b5&Ylt~CQ1gOa?=yh z2X23X{&qagjEwPo1{b+{pcRs%8P}SGacDoU2l4ot?#W$q3FG*6`Jr;o4+5NXODs$K z_W$GSUDsUKaTrm6@}Bp9-zkgd2LMXW>NELvSJz4h6Y{VzrzQr%vD? zLvkqvJFOZrqaD96A%hls91K}tIxr}d{~8z!3B?&O$UJEVgU~Q&uAQ0fR%1Ni?!+tc zu-I7B!Bc(;Q-^h_G4)Y7g~6x2ESJf8NmDJshOYU9%?xz-Js*= ze61sE_D4*!)ap@kX>UzI{D~NR@|$tw(pT)v`y>6&2V^B2J0mkbeRNJEKA5Y2S;)c> z6K0c$-O$L;rOBYG=}EIrNt1kvX$ph7R?6MuU-by;IK4TF+pF45rrl zjSW5P!R2!4OS)3L#Hdam@u^qAobzbX?6-bYr2snD87VQ}L;Aq1THiI)``Yc?r&p{u zUYm3iDtU@Kb&fbjhVR$it~bD;pPMimS472LhxO*1yAiLFbfS??Ar?S6|WB)9I@m%B;+|5JolCStf>Aq z6%M9EU=n4Kr_fwbZ*p4bHtDuz4gz@24*{o^SRb*cxRUrydO2d}oQo2`fbff)I+qKz z#%LfthP3YQgSBsM3{ROJyMv?AEOBJsSksUD%@LB7i%Yi-1-h%ND=c7w7;UGG_Uq|oC zvyosF-aAi#4)LFZ0#H!>7)knntPlBLdc+q15;pAu3U>qliuqT#shGI$9R zg?@RaPA=GaDhIHL{Q-38X;;qxRLLJBvXjJsmJ9!R)Yt4ipga5~A;RX}ge*JNLWF%u%m zV3sEdB;CJwsrQKu)_O8| z!*e?O1Lx}+6{~haie`-n9nd&uZS_ui$^(J+{ z>M*&ITGQOQ^@=qFGW4+DK8?LZpq}O-sa|Upp8#W(ctW7o*a17Z00%@+lwj|U>2s&@ z1O>cuHHoTvcRZh}Of^0muIe6H@>`QtAd4g=m5e4Wm&vPkIySgGm5DnYz7*3y$7hgFb~_;i(g$dWP~U|gPQB*jy~kAu zUwHRyA{$vDR!83Ue#LcFYjJh_LZy_r*b!A#>Vm_o`+k`4*tG-1Trd6emBuCvgza|C zhCWn@(CVM=`Xy=s2~;Z2a3NE=BY{`ey3b3H@XIqF<3uF(o*{0Q7zUt?)n3sy931xO zdH}>)>+RjRN9?c;LCyrjxc}b>5LCFhU?8ch`Cp>*IRb_+1gF zYoG4Yar@81>ZBFDWC1lp9*1Q1bVM|fp_K*QAo)&bXCjkix)ZN+WI4w4S}Vc1LkY8- z4}nBpNxb?Zws?=-OU9hgeq(LE%}MF(!@qvuPrfU^n7wmWXWBrqTBXxFl|9{oEC+Fr zgtQfNs8*t>%+3=iEGzTp{q65*T1aM}Hfui6c~qMmbjMlK-*cV3LwK-qIy{ic7e+rw6*JV@KDxnqR`cA2ClW#!D{T!Jso7^&>oP6plu#PE7d zqa(a_MzTad<2u~(?f?egZR`>EvwL1ANjs&w)=H^;bvNZScE`}4{aKCF^mtDa_ z*>r7Rf5@Txx`d4zjhl1O*`NH8MFzOGOAiOLA!^5&>Snj;c5yO!MvfhT$3p2l9g}e< z-uF*C41OqrDM!0WfyK4f`@VtLIb4=GtVf4_ai&9`d9%NIUHaJbXpJTYe;FOcOG@)H zI4~eLV1!$eN|M==zdrk{bF7moZV0@R3ixFWw-1^v{fNqho=7UWVh~D&Xh`1ODpCr3 z=CoYmS<*#U*sK0Ky9S_=BTJpdW4g*|P9~@J;o9wU_3NQ}EbloxBc1e0X3v8b9$k=$ z@7nw|w=k@KpSp|>Hz2s8vL78flq#%ZKs1mCZf7ECjuAyGeW-<>=-kLd-Tg-Hi*#So zi-cmPi>V84cJ7%od+%D@xTyV7>tAJly)S{8ZS8g&jX~VC4|=W;AywcgBegA`uibXU zsqb?cYPs2V!k|L{#;W1A$Z(b*c-b5Cx=DTBIgE+1sXoCmAXz}3oUK)b#f}wjO1Vy4 zCZo}iaQr~pB~f$YkZI<@nEiFt?c6^(HgqWAt1m>InD0jF3i?zPZ5NlUe^r5V*gKM^ zJwT0ahK6rM1yub~;+$|4g1Y&g;t{Esy*zX~EvkTtNYC~C97kRqw==YHKIn~2c=2<5 zku9ustj8ETb7ia7(A~bGE26R6D*NI0&h+IzStpS8A}Iqj847(}Bo_5WjW`Le_BzkUS z;)Xf;f-b!1K%r_Crzfpoilj?0!-uyD=6Eko-Fe?t^{mCz7$EksP}QYo#tk)qDGeD_ zZ)0U;xEH~Zvn$=d#?4?Q0O4#>sJWP8C&hA{Wr$YaYLXuE!W1epDNMx&Hsg<1EtCDas&B0YO+S>V-flSnKs87ix`H(4F_}>w#30UVcFg^JZ1F&g?i%Sn%HY{uz9E%hRl7Lil>J60|q$y8Q zQ!B}(fE#zY~A-7{Z^PA_)6lIQ_Z zN2}WKxC{-O<0~c?b1FXft0v)0U$#NVP(Uxw#7TFj|7kf z`NaJ?d&SUI!}A=P09N*GMYiwxMt&@*53Wg7wa3KW*iL*qU;~bI0$gTL zg{NDZ(#`e;ut0Q*mbE5_@2t(?jBCbWLXgKIwhK5BCJa`!{k=Xbyiz-=_*C;jF@_TH0bntaw9 zjXn$S)M5eHP`;Y3c8Hw7#uQD0`TRBZ$jr8{{I;sn!zOe~CR03^nevs_SkANl8-Ze| zfzdxA-@2doLQn61dZ?|dk}wPFD}esr^BkdeIZ;VN8YRv9V+gsekjwGG zMZm050q*a8XL&hzOD$5Swr?hnKOt`h$UCR1o5&bqh`8Lu$yp@&%;R>&2^XnF&jxFm zF9KT%ZLMpa?%@!;f6({tUJjc84x2>qUFSmg^{a+u0pk4m1QeYHUN2w`W$I(o&*8`c z*%-U`h3zlsFhZdUET7ZrY42Q9N{l?)S1o_*<3 zYv@xg_H3UgQx?~JiO_?}Bub(7X@V>n)oo>I>+GsvvC<8utIbd!kHP69PpYc6`=DQ# z(??nid!pN6gm%)UKH0WIT(K}v*{2_Nt~1xmy}lVM0JP5Ja-9D03C`Vs<>sU~#vPcm zyXzbVB^`c@sE*|^&c;;<#=GF^Q1WLsa2YRHfM(p*o$s4p+74Sv)TZ8`zVk{y-*PA) zhwsh-*^H}cJ43c}gN{_0U(S_3sI4hv=-lsbt4>~(ptFE@i6%y-$g=m|d(++0q;rMc zYMpEE?O@=AAM@hX**B8*!Q?R9=NSG~XWr}SlI?(YW^APQ5Z*^$TnIZp^y#A>N>IXT zv5XA$5I^P=q%YD`z)BElT<-g(amYc16Vdg90&$)%;>k9E!EsO0#ASv6;1$tQ(r6fS z=sb`4;p;gLW74t7lvYf9=0)&p7Xg^MyY5Wi!xbvcwC~QojegX(`JG3Bq>|2lYGdk4 z#;F0T($lJpR**dwj9Gi^ghMT%nPH7YR<(z|X5GhE43YHSz3S=AWttlf%}gG> zXEowOS0bdo_|0%?)Njz1Hd% z6mDVBk7Gh53Y>@j2$2EE=8Qq-2JEZKKp=v$))c9?(fy@X~e&)nrqI_q7b??T+jcHStYJyxNCpEaj@rcW)#= zhc;v-L|d)#H9r9Wn+3;nN;4^4^tnc?Z9`80+=*^tV1rr2tk)m7YDv?!Gr5W6nX2(M z<3J*qa6+)V7I$~8lF1l?(@vg9=0}WLYTI3raLe2BEA*|N9b}2S*EMDvQGe$|oPHA? zf%py7aa2whk}r1Eg#1Td2MX9{=^M_SWULTJDtrA+C@sh z)CB0BwI(4-PbjJx=kq7(}B#1a+z{zGe|D+IS{ulCefz)X>G%H@@%PuO9yoGE6>fFQ zq7XPFv#m?Hvblq9)2DU4*g>gT>dfb<^T?T&KHR(DP*fre=4{{Xl58YLtl(I%Iyldb z5#7=b+c{!E04IURP8Y8*g+gF=#~_Zkz27!BsXQ?_pq&JSg8=QGOiz!XZ6_=&wW|a6 z`(A)tCu1$nKuFXAIB0s;Mq$w-JQZ3pv39`J`^f#I+jEH!&c^?E$wH7D%^y{FtOVgw z(TiWqDZ4oS%9L-?f^l$;IR;a<9k7_`B>pL_ka%^ot!}1OqE}Ti7fvSJSq8~FMuGD_ zwzEC}4WEm$pPZ%eZiMVER@!ErMa|~?K%|w>VfR$Y9`e0+)li>}v~1%PZJUT4E0`27 ze{{Qj7?6$`W*fPrHM`V~moY;5O211`eqBJ+u|=#z{bPsL>|c=>%r)PtbnMY}Wb6FY zIo$L!ztlxG7_;aCZ1gH{F}>R@5aGTz7=$u5vPj1dQ1Nel93#9DfUXlp>>x2+xs3W$ z>cco4Ff-DOPK}@S=hb?bEw*ES`$;${I0buP6|9xMPgO5!)S_^kGG z{nAymd9dqZWWdI55?z$^D1z1n*IJbhwna>7DBz**;&hdps2iM{E4XJ+9exTn-oY^zX} z(r5$Kot?RK^iU(xP-Tp*0q$}>0ve_e8KPl2##o)YFJ7B7u@3yh#s9G6mC)Y@PTFtM zJmQHAvvoT|jaR22{c$TEb*4%m1&yOO$$*1>snpNHuKf@0^g$+gFX`g(^O!e?EP#Y- zE%)jP7bk~fI(=O?+Nrx3n?&lg7F8EA1bhrRGHh~fxVL>GX|Wt|cIIAur!+AEVK3EZ zG^Mp8F>Xs^)tTqWv!&z44?c zK#LMWwM(;&s zTNmlsv+YpYc7E+zgI_Y0vbegVG+uzZh(V!m3Bi!2QEv2qQK6%G_i7RkjiU8G z&ttJ`D8ahH|E##s>19!l@JKCKhELnp=j4Cyt#S=*G3~s)d$W4Frc_kv>%QrgGTLT6 z!FXg2E|(UdsP5*?ZY(Z=`^xJD*o_o%sOiVk9^xzg)SknjI22krN2M7B5)*+ePqLiT z4Uc{7&=At4AqJMUlVEzfktKF}h(WWfo852A#RioY83KaG~E~2*lD8uMAlYK$C@Bzs>x%UyX)ri4;+GSQZcCp0Ih%y#>U24i+7|CY!8}3oO~G=K!y-hr!{PO+6ps9SWra0u$0fM1!k^axguJ9F3ICvyp;> zfEgV2b+Gv2sa%~rFoY56y}Q;jjy%~xUW{&XO1GWp-GGZ?B6*VcjyMVCs6y0tbZLwn zs|JjIuaKTa5d1`rha90O?ItTCKw+g;XSXw{1Rmjpq@3d0$6?U68Lca@=hDo3nYdLSMs#NSgX{m7D3y0JEz8frhBk!v7NfenoE`It?15%2h z=L~^YC?7zr>%6u}V=xk7pM6aNzEkn`e%JE+npI0>42kEgC%hnYX+y35 z(yZOBYa$61ja{_@NOk1mxJQR3hXCqo)xzrqVB6UPsaAw1S-+B4N>iRKYXX(RYTp~0d3Dod8t-lCn^|;inZ4JUXUkFeDbEQo5228KE25k zN1bp;^anU-Yae4gOgs?XwTkZ7K`OV!RdJmCp36o6ptmyIw4bG?yPoLKp^cs|r}UWv za3p`ukxWxR^E>Sfl#`mAR!hbiNS0M+MBuDe@>YXLBXw6NX#T^$IdP3Bn;`xL8~anC z^8inMjYQ0els-SE01}6HZl|-l`B11UlD07NpF-15SS){KmG!%~1sUREVVfU#M+s6_(87j$@MU4?vog0um4bE6|SD2;%TAz8NNWcYff zRfz1(aPtg~di4=l^F&3b@?v9gO$d5U^WSsvGO};{SjD#k(6g)E!=??Keo)%~wU$ym z{7^W@B!7B26GV9y=j`mDve#On|Ea%C#A#Bsa?KTQ(ik2i;70iN73l*Y)FhAAfnTMk zk3t$Y{&|tksKXdH8Hsf-D@KSY;3br?>WqIlqg6sG2`8oHFJiHGDYv9q>p!}>>m5QN z1fD355CFQ^RG)j3xmH=^s#<(XlS`H3$XI(`Ym<2Qt8{Y^)q2P-z->r+k9DhzPWK4* z5c?ykO;S!+MtRP~+WSvf(XjVgi`5+Et&wx?o^;OiF;3hPdBVxmDPI2H;`17ET&=vlWlB5sxCdH6F{EE@%PwJLBp z%T%PeNloAgTQ!I}$A!3Irs|$j>G1(x*O{c3sl!8>{mtS(G%0Nq~BSud_gUrA+g z9Iw0I{eQ)aeI)^q)D!|OUpmrx(%owrVTCJ>I8a$k>DYY0-tMXtD_{}%+c!UrJBc1A z@^ICg=?0#yOiVqGHhR4CCc0hvpDqy%=cO=d49+;NV&YD6gj^rOdj5M{lHBN1w4D$xxw;i%m)MlEy`4SV z-R~|cXUjahdxM!O9cyCv6t)YGp^+RwHIP&FQE<>)Al8xo(pB~TwfT2388g+IxlGPO zaWYSBvL6>Bf=iJrUqpm)d49)ya`72hYU-fO&Rk6pPhIDd6dIvX_A{#N)V;mI;Jyi^ zMZA+(+Lyp#skx$b(*y)CzLb;H$NW|M3;}ZuH2(IhvCz)?m+7^esu$9-6~WW`VK8gu zcW)`A@Ag^>$xNoAcO0^(41U$b;VGShQ2^wC^mi~eE=tuZlXebc=)vnq#M|J4WRc_9 z_L`K3!UIpY66E%axa+V%I}eA+e8Ft=)r7`vFpiTZZ-Y>C5xgwmr3yIPZi}0VAN4nZ z1ftQ4{J6HGT8_WTB=KgAx&4spoqPJf?f(19F~Tv5;aoh+*r)h#|5tLw_I&bQFi}%L z>6+KzBC870ZONxMos21?2httU#0rtMwtKBb2W`pbpvAK@Mrt{v5I($&n4ufS!%nTE z{MusDW`-cHz<{G^;(3#!vze z-Yhs#+}ndR=DHd<{;ks0###~rV9OM`uqRe;SrjiZW zv$tOX-7*X@_|2ur&-U5`oMK8uBJ(Qgi!yVNy{hC2&ey${&wAfK(80cppb|~Gv0w3t zQ*;ywuEqF7jMyy(+jdfxQoPLdPq)*hc6Z~A-m2ly8&_+Om--NrA$%MzVzLcpU1|lr zGy7S$f2u%ggs${cXO`z$DiKRiReYzqq^zgA7njT+SqV<*S+-P=oM1KbLKLlHUnzE? zb#Aiir!VqEllFEEPj{Cy?`^8#ERUPuJwP|cjo6|C^;{+>x@VI=0n+*F@a!#55KOm& zYDY5T-t)r_a)CK(hMkc97-1xnR&ls{(%|psI+PZE;WZcHdJ4`;&LIMr)bsB3lq^Fh zK$4B#y({@VBbO|!r6ZGBHC!A>)NwqL`|U9o)-oj4Emq|QMHB(awR zy4?(EvAuVo%$vr*)N4)rYWRK5v7<(DR5|Dj=|ds*tiD+CaT{*>N#ByHnnrRYyV>3E z796Qh_O)b7iJHNY`;KgvbkjwUmmV?Q5C9uk4@@2>F~Js59DwV2kGa`S0cg?K&9eZ& z6DOY&ymxgtW#nqo7G~KWUtmsQQv15Qo&FC=wzXDOO$)gGgp~KOG+Lm*RX=%cPABjB z?57FW-qI}Ztoy3S1R(;d!&$Q55W2a3iDw7kKBp41eDm#O}WMd z-RnB=35@vKWZ?!Iy_xtxOWe9UL0=DptC3F2`C$-Wk>8Rv#e*Ih*lOXyyBk3VWpX8- zGpA*Bq0%DnM0K!0#FRnz;zO|a?!BR8;Z6-#SZfOg#^sPmjyPq=0l4m6SZz?hd|qlz zzvCLzC(+RO()oSPO2#?cy@<+NP2FvU&^Lc(te*zYt$T< zRk90=jP6Pp_2iU?iX%q2uoRk(M&Az?wzJ`dxq6)>W6A`RsGbxli6{H+rA`_aSnVnd zss5|Lh{F6?o)tiFflHH3+f7JeM^2+{TE}4}tNu@NsCws5mYjY3PfA$de?@n52gvoc z^ZC+)PJpJ_t+aoH>nB=GLiy%`*=oJ&{5)?7q3Xe)q^h}Xrhe^Sf{8>T=AoV4I?CWRA<4~<^o0wtj zJV~3Jtrr8<^X{#fVCb_)qK!*HQZs9nIXVsiV*2QUt7;|{Hm!O47`PX{W2A&Ji;eyw zog2q3RIEdIzd1`|w#(H`Zeez8)+@h1;$W5GWBuR8v5nqLcLvDC2KL77CCW6f;qh(0Wu`A|kSPW`6yV6Y4Y=cq z8*2+KA`*LCCWWE)mV;v5rYEHrugMY*%b6U#JKB&@$2~?G4$RsrD^+|6s;%CtY0-Y} z0K2_y+cA9QT=^&}OA}?%> zQ4B4NWqefW@z`u=EZ~!TpVf~LVdH;SbSf;YA?E8j1+qHk zdcW={QB~DM=3P(O8OetWohqY7cN--$kFZb}DnyP@@b%&;22_hy1D-wyA7<*EH^o>h@`P|`_6jQ%p z9ANLg)-(Hd75$GqbUdNTxfMzQkZCygt*SYZ-m1S63Sxit@}d)gFq+rlZt+3kit+=J44y-HgL8d^MFwUHFD;Xx7R6Lo6jrB z^R~FWfG|a+XO8^}S#EHW>c|t$7w^N>U9yVX(ilR(`SxYXUli1d`2E9!vi;6Sl;1Dsm3Mq*Uz3%^8~Xdc`+|FRRT;;1*I^QY^HJ#CTeGWN zA)s{i-AY2ME7PD#Lzkeue-c~e2i?W=K0{x!u`{8W&YaheLukHPeG#`J1tW^;;A1g|G zNTxqAwa?-d=voCk-rGqy3-C-dcU~-3(TyF=r@~ns4qHrnDzu~;p;w zyx83Y*USywq*~Tcz+k6i6>B}3Xsd;Z!y8pg-bj;hH;`}6WJC#3TiyL@)e`O{!*N-P z^4JirAGqp&M8j`yJ0Xp+U8rb74Eo!(a8xZQsSb*89HSe(u^dEIeF7>Vh>Op(X6Mtk zX*!)>?TacHUwB78LQ{A7C4R{R&inf6#-^q+$xvP7>n$&RFxGiqSjgF@r(%!A z*`LUN%zv3+N|I`>0Lf>^MgSlT!8P5=)25I%d>sjC_U)yy;ccBUhABwP$8X-o72`>&4bHQ=N}c}W>hDNba=%;qQWl6YBBfr9!Xma#qE3ETyfp>3tWNZqm2ozM4;}swKak_)UwQ3` zXfmNP3z3~7q>(HqnI6DY&u zicH?Q)Vu;U%*biXAAxZ|RM8lQQ?7l!Vx1F~(Ze13q10YBj#k?{Mj@@Nj?RFLGYawJyLY8B{PzWk&`mihCaWU*~hqy<(5!OUWtT+ zB}-!YT}i_me#sXkZH8AqHl;h2CFMrXt7V2zrwe8}$82%e}pCMaGDW4wE`3dtdcheqXRr+`n@o=8i<#ZPz;>ZqxH} zR@IO0Q+FpiO~;r!bOWG;>D);P7cbl!*nvE7bxMu&&OQXlIQw7_N=D(a<4q@f7Kmhv z`TDbfL8HCw;=X1VR=FtribEbwISb2q&1LULgFW4&5pEKGQ3eUr&(&%9hpto9I>yP( z8uQYf+^gSm167sz7@UL1!ak&hBdb4x@xDtWdF&Hg9iKfEN4WleZ%0HWmu~rQE21Ve zl-mKol(DU~#-SBmb!sYp9e^V=hekw=pIypM-RGaQlZdvnn{0S=`Iw}6>|qF+$-!mV zFF3Tpw~--vY_-%z1EU}G9W zf5`Mnv8lRzB#w#hSK!>GFeEhPMHJya2G{o5l4x7})kEwYkDl1QSnRDfFtSbM_N^+x zX!E*;hsgZRa}$&KvFsV z!AP_T%REgc%~1QfJ~Q3{PTrUrs_$OOjW*TmIEja=W!@Oe*Q>kvf7XAZH^|Y33sfZ7 zx_hBuAaBfnGeGp#*AVPO^W*$eKo;HieYpdGDj9@tUCm=m5Y|{k?J$ck?9g6rfBw_wt&T5=Oe+Jj8;51@}MK zIa)N0!#SG%))^roU00ZRJat%XOX6>9k0&&M0dXyw)R|EjD!{1vbY04~^E$T`6K=L4LAsacj5jhNREdFu~)Mw8|1vjWU zLW9lUesUA4uK;E2OLaYf$nVk;Q$UG-Tm*R7%=wv>_3ys zVA~^8-fz4Z@LY4dmzPVxR*n#Xf1La8hW!7&#EL(*>^Mdz;?s>}Dde1_@cga4x0;oX zDADh?mp|n4vw)xX_0FK?y7=@N=sWTKN*$Ybcv*E)vCoaQ{Jq!u?=-KSW~+W*+oD_F zSB5K!{^pRbKN;1i;b(o|3-BX8{m4PR`Hd2|Y02y-FPB%J`A=1G*FLYB{0cAZPBvXe zNqL_O$*Y+L-uKz2JCLP zQ96;qBk%49^w#COd++MA5BCMnnXy-G2LcwZ*eaM`_exa0<^&pPKi zKc|1+@xJM_hPws$eYp2JVbkz`Xfb_*B(VSf{*GMw)`8&CO8;)`&8>QKC}(~$46Z+E zpNEkCCkb6|eqsW13r70Qe$Lk?zFk%B2Y;R8{g{ita$uepSH3%^Z%pWIw*6-R!|%KC zp7q?=`RL_~p3^Jy<8NcOeKuz}7ndBkckJi$+Tr{C`_@|62wr@vM1GdB_r7$(30C|| z58rbidbaetiSw3t|8D-jTz{Y4y!k(0-Tn9X_wR%J{PSl+ZgD;PaPQ~5Zkqo&oqKs_ z1M3%c{rSL6pFlB?Wheb%_Ui6}rJs^!H=q8y=DuFM3>$pu=Vpz2PyXi)|NG`wZg1C) zUc2-|pQ0;A048y%$58wC4%aK!HHHx=S3b?>W4SR%qS`@YXOROZo#3^HBnScWUN4Hg z{5s!D@IfC*G}P1GfYQoUPX2=3Fltyyy!CO=S#kg~nM8h4O){U~Dw6&7tI16y*Lu1& zMcJO55tOD~MgRfOWoM`5j+(a&x!ZSKYo#AH090>ddCA@M<^$<@IkqMMs#0F{4Da7d zcv`9;pGP?)SKs<48BJWZ`(3Nv{Z~bycg>=Qs_<{WEKHTsxV(|w^PCZ@6RQg;I}f;9 zolZ$=!sS8<)0ixQa<0SnUZI5<$J)50l94!dhfu#6^$>bd*apso!?hh=_IA~z0&VY$ ztx6a>@!c$R@4er()Ui@6CiY@!Ce3VMRpH%gIFaQeAf-o1bJBTDcf07>T}Wr~m6WI6 z&6(n)9zg+`m-|DI=nB4Qlig`-RUWQMcjG4Zezjx$?jrZwtoqlPQH!cok6M^egqjS_ z33Cqzc~@myQVGoa)O%5!EMd0;1*Br3v>uSP-;H+ah>$T4*V~GdE_0@=1hU^#wXfse zyT#1Np;$V-n!}yW7ZjFdrHgGl`x3z~sm8kOB)yOH-}^6_RH5EibFw|8N$U|-2P3uZ z)WOKWcKovnn@hde9dppAay4{rX9r29h1vt#sa}X(PQmX6SJhG`cj6k$$Kn)8Ky9Bi zIo0WoHcCdEPz{}SueH*6(cH}BttK@{t0GxDeWyuId7r%D=I7#|*%cw5GC7O;bmn^s2R6DWJ;Tlth(W zYJBaXF@MpI%GbP~UKQqY!0pJZtS zk?o|qHIfolYrC-ycuAE8$lBZUb0YK2A)gHP1PC(<@c0-SQltpbm;}TO*{q+yZ4>1Q z6{SvJwswFt|Dj`m5+OT=k(snrgeTPA)fYP1-2~tMYvb~qi9HPdSgZ?w_e)QB3_Z>d zIH~yg@({6GV7PD2!d23D|8m0e|GdV|#=oTTy$GX9dAFvD ztI)k|AS(=&uZ&6tZm(KId!;YynDKFvE-y-qNKhR=Rrclr6eQd7DQAa8kgXUuiFOqy zp1<)T8T<$YSXCWdq&-arDr(6l-03dIy}loHfh*ac(?3DhZe5e@DhJu!6_IgA002DC z^Zv<@uc zrvG(^1+|hOL(whYTt?@Mki18S1emc2{ydNF@o2c1>#=IM^*{ zk`P~;+BxRSM4-b#BhXP*#Q+_%fCTDwaKk%He&Z}A(YlN8PMNs>itr0l1UV~|ikQ$I)3W4xhLR4c~Qc_GjjC0?PA10=>eTQSw&jMMiGtj{Hr?Q#y-5c0e z4Mf#+%|~}nT}lqLc3&Odl&aKkRjJ=mMO>5$Z3&=jrO#gS`)B)-?_1ry(+5dHN)JSG zT7RBrH-VkHEZe%)vszXE&}RtjbCLVXXDf)gj`h82-kf!MVdh+NJR`f10%dkPZ#mb$+^G9`Ke^`r&)2ou&@GPK@P&`Xn9qpz z0=`D^m1Dy1;oKWFzp706xu$i&-h0-shfvoCSXL+R;IqTp4ciY@%e963(Ab78M#en| z-QFavTV4V492|hL+~zTF>1xX-Vt#h)b7~yb@L|76ao0PdgfMh^aOs-c))W$!pBjMM z1o_Q8`91F8!1hR~AIARJh`=hLL+EjH2;i(6)_ z?T&tJLIT7-C<0^Lgix%)0k{7X?sDZ5E4W;J%@5u$oLlUaVEK6hk!KSacm8hFIPyyi z15#91*!y*6Ke6{qx76wG_9*pst+%l5a@l`e>`9?J&#KyW8y0(-orHu?hlTh_l3^8tLaluzk9LBT|^<#Q`=46+%&z|aAq); z;97NCs%P(pS`8Lfm1fK+JySLACJ|}^8h6j6b;Wlmd;&nfo3;~$%f))KSq#9H|C;N3 zv#S)6T1Ue(TsP4gtEvAiRkbH7_&CtE!Y|+|Sp;-^30y`KS!lHr1<=*~SA@{1I7S7? z_fD4*y|2a%wuf|TnZuyk%Lswqhu8G%&$6jE!y{3s$E{%zWKvZyBortR)!qgA>O1h;l0*WDDK|wghvGq zlRMM~jh?kwQwnTr-TJ`rrS7C2(|ii#MI7f1HqDw7gQs@!M)9?799_wbX8< zr*DC0kn5_F=JElggE*$GxLedE?9k#r=aK``+7=qx2TuDR$3eN)Qa3F>m!Bfn>%AB#?4ORAwYCK9^#U^ zEUtFH|IJEjje5s@{E!BlSmUeUvI=;;WB1a62?S9n_XSqVHGq2zF<-xfM2r)lU3Kfl z-EI_~uDF}10_xqZP&s0%HsJWrZ8-$cfe8*&7a&uQK?LMs?#Hy+9&V+mF{6-dHS(PG z=;OGuxL(A4X@MYAJkGLWTyx)ickgJQvb3+yWr9bDi8AtWm&EkI&E|I-s->i_NzaW<(eOy6b;4{Bhi}n!QQbyZ**Ur zTe8QHdRMwfjm=mJA3qK%S7oL((2XvckF@#$=$M0}^zNx`qo3&@avT6$T54GIbHd-( z`J^#}-|V-!$l3Jl`~<{ld`RYR%~9p}uRg(Ff)iPD3Xbg{YASnAh(Lizi&q|;taBTl z`ufbB=Lews)wec;TSNPX?9~nH2RCi1MOQhpKW#k_SEPg-*XoQXLjrtS&+qew zKN%(&^kVWlI#ZL&xOh6x^scJ+z50&52d@CU4ImclYj>@PN&9z#|;(SxTZf ztswz&se*AQKAHETql5OC3AvwAKlOTVK;`UWxDVZV5nUU#p){l>!9`HTn(p(@6@M7)SBU0 zV_?Bpubx+kzO8wJr24_j61^nzgu?wuq^lVA`+6G{^oT}De|KBOYAQ(*8=c0ZlNT<2 znH^X>dGI&0bDcQAT_Q=G9EQKYzp5HbSoEoR#)xTtQ@-XZ(0i!P5}LQ*Jm9J-rHTwz zQtm+kpH#v=-&Vp-sk)q*D4Vkq{XUT4;7_m2D?2Uw+JEl7S6q~H?vYCtVhQ{Bg6SDD zICt)QQeegdnO&7FCHZFUaN*W7ew}3T$pYLQJD`%T)>X@#=<_|XsmOmzE$00wgn;>B z*x=%$?B=@wFbyXLnX~*X#>3UqO&lgy9~9)$vDq%^ot`&iP8p}aKR;LNz=pG0UJ!V6 zyLD7uGeZtm^Ep$0^4zS?DIWp|dOhTXaJ}kAZbfW;ah;3FDcy>$NYNO1qC?s4BUf?n zgUCR9*L~z(rY`>XEX5@qh^ z2*l+1Dhh7Dn^o<6<3v*#fqtE1_WzFRoL#-?+^Lnp%kNhN{~+-QQ_SkGSSbJJum9tf z;D;Q+U&Q*BigqN3z4x*R;`N#DQA{3I-Bjw|&hz?Sj&aQ{89K?_8q3yaO+liHl$Im%lT`}X19!NdK<=QNPW(B|&l=1Fk zmEClrShOCP4XKj#rP|Ny{=+5d0;xLX!$YP>;%?A+8~Tu6_D3ca0kSRbXVZUmNjF`0 z+k7J;b5YG@`?u6*rrSLM{CJc#860pJFh{5@82Roz{C(ThoFwhIxi_A^zH?kf)xwS+XgF9BoXMB9k@jQ4lT zfj-dj(NFe_vDWHWdBX~GUvq-Hp<03Nrxw~+EgTJr=D;=d=srZSAP z=sdhJ%l4~_OJ1z$M`9Z{CTZtxk2qe05y5cT_4_jhMNG*>OBmP!6~3r>+%6!@r9 z9pt01iAHnPilih-)m>}>;z#r<^{bqB7zkixK0|olt-IHH-u?r7T&7Nihw|?S)@-yS zfSnw(2KV0WzF2lD*r09Di+BH%P9q2HHNdgT~MQX|MjxmGJ)(e1QznaIY*ifirn zk29(CQZoj~ELuqNg<2+`F3yrTOa?2{fq_1tD(59PYi*fpWjId6*v-iSXr)p2-{i8N zLjeM2NzCe+wmbo#-(vF40VJ|9-H=GC!UL`1>`@-XVgsqKnEHGF)HHyNe)l^QRI2Lz z+d+~>F3J0CK$9`tKc`dGbs{HLHjAvi|KyQjG}kpw&QrG)yj2TwWy%URw+V$J`|VvzCQyOQo%+yBD}vFJ86&Xn@7-;aiodH5LqezglNpVnVZI+p|UWz6Ci-fMlcZ zHmT7nYi!MC2GLuJ+Bk4#u+wZ#`{@Bkq}SGZq%qB2T!=9@2M0BemQI#O9Kb6Rqu-dX zd0ug7?xO=B5d9*#Dn!$M^@z}xSXEq+R|fNdJBbnbqi8xcWv^P&ach;F|2t74I;BY) zG3k`$5IB%NU^sf*F>URSIE7lLV;Xz^b)hk7?^>Q4wg42*-irB70qW2ABxZ%?jzE6y zoJKN{&xQicqpyv=1T4=+iypQ|l2x2Nhrk<@5blk)ciS13xrtfES}XBMR4vcD5GNK+ z{M`WG#-O!j)`8uy=wRMPoQVdOlVNSn6+f?LyIP5O`_v6azA9vXJ6PU_(a2*pb#QK( zcKIc0`?EAjfo(|DsW`Lc8KMd+yzZuFYbe-qLVPmKdvA@{lf3Ftc!1|5M22Wi2rf~p$z-Kn6nR(I-M1>iUIu?%#9~c<<-S_(0LqR~e(eV@LBb$s%{MkS&8M%8 zx&sLFew2iw%dE;pt`hZib$-wvg@2?Xh;wQh_cQBM*&ky})WR5`I}>ovUOCZ{XFWq@ zN_drXl3bdq(IGkXbWH!*s1J=Ha*L{mBPXkBT4Wpo#EF@HH(8sRdWm&t+oqJp*3z{= zW8_`+{zF}DdA*PP4f;O)bLK(Dyqh!+)eU-Ay8%4wJeL=Lp#2l^hYg)5OdAj-Kz(<| z2)6?~so#qP<=S8$nf(YK7AkCYSboo6EF9DyV2LYAWcJq48W z{&1p~lAecE9({%E_UxGAemi}iE;y$4-lb}5N21;_<`RhV1Jha^bsf<4Sf9zAc_Lq; z@s23aZfs>Mk=nO04gt*Mb$wj>v-iGAITN|MdVO5ChJ?is=je-}dX4!e6(5=jEv$0>18YNkT=I-VZW5XF7s<7{orvwwx5tmZ5j1VE3%^v(KX2 zr3$_OOUC)L+|ma05QBR@UQvbnOxLA|Cv9Vl!pnB*SQ-o=G%&)1A1pivmLKNan0ipC zd7eEQwhWl&BDb00uLt`-w2C-pks+z?I((hU(1%S&@&3=%!X_5)cdoMr;{3$P;W@`^ z%M#%~a>h9N=Sm-Se>N~yZ`QEY=mkCkvnamyWM6V=V5@odk;d3v>(mlBf-Mf)%``ji z*f4$B$s`MW|1p3O?d*K6f1axwdvC`v8~j>~_X@q@%Cj3Zp7YXW@28Wl@5Xk;>>y~s z;?-*XCeTBULj%{t1o=4nsg@EvPbUxni7hu|Lo`oplp9p;*8|)gsZNp%s)lx*t7-z; zaN`|A?rw`<8M#U2mtY-fsNvtuy;m*l?yUd;39zx#fquG}!3IHB)l&<5KomXlL2j~T zA6N@X5c=6tj48Q$RT|(JH&Xk%6`V<9Qk@1D6?Jvd>1HMFQJ#vL&Wt9(|4ObTW-WWC zoPeB&^=-^aL~5yf@8UzKzAWv5w?jZhs^`v)(!mq!K)7#oCpSQs1bWp27Y~?g*t-65 z(`9%dNGd~GQ^ViZ@b@YP&QRb+4t@`0(tov-`F846(RUb-5cBJ zMhUMRs7Ed(Hz^LNq1vLJU>{>9&5QF~t7>6mzcC-G!Cri9{X1fFRL_rapbi(<@k{ba zEo|@^tSV2o3k~&sFAM8q zh*%wBoF658sz9?)x@ZN6q5iDLQ|j%$CSP6*f@b&LZVF}R89cPak(Rd{Q*w7CiBl|O z3pKAVcGB~rkGePO(M~2DmX2gc6!pjx45rn%jHFEq4%{!=SV_MZgnO2l__m40rm)LN zP~%V#iG*N&Rnu%iasfj0D#&+nyevo#(0W%ebL@3Mh4`Dh(GN?8{`lt-kI9SG3X}D2 z-%0XhqgDeIuV6ryqydP!D@rh_Q-vx+xQzyO`snY-vJLir|9lYI=HUPUAOJ~3K~xadrB%SLtCNR#NSP$s;fj3{lm@kTD_*_$oT39B%_|?vSxRHs z(Ari<{vjq~*vDjXgj8KYb=zdX)|9&D!wN_lIZL?Aq ztDNeE;4?=2g8ArHk+y!lJD(<1RA9PFQaK@uOI2{D`G72f>5C%47}2<#7N6``@SM;5 zz8KT`HcY!)UFqh+yWco+Z}#_)-=s+OJuAR_uBXu6cM|S>B-rQ~yU9Yk1LWPA2d8f# zrfz54mB_q8>hX>Q90#?~?EX^?pGpBLBLet#SFNfge5-KD-&fB6P}jY0x{wI$f1VvLCAjyNj{_7@ znSwV#e zlUQG{yq(kemuCKD!~0zBzuqVHD*(H2vB2IN(z1K&-P23m?+xFKls|n*;3(9dpZ8AIO+>jo+m#|K^en@F|Hp5|4vcXc4YllUw z7ERBaOH`_C?ua@4bvNnm$U~58t-kuZFDwEGW_=hZ_z}NDtb7N@Z6tcm43upa@%jO* z|BtRK+j1<&aRBA|{||0UoCg4u990w3Cnqb?zKcY00YOq$?ri#X7^+*bO_m?3MD2c0e*u4=9rB*dOf8%Hp$P*{P`T;EAlqA?H{0QYKO)I2P z56Q@zMKcGV;-}{9>&U{R){EV&TAx~cYFFme6qJ1^vb4V<@(0zfq?NpTV~ws+NrPQd zh3^`iouLt?IL%8H%SP| z(i|02q;jr(DOOpZ)YvIiI!PXuW(g}V3PqYdK3~*G%%UeN4Rm;b)^ZNmPMRMqJ*jo^ zpDb7$@?S#!W;IueHuT zs}|h~O~&LznUr3{CwiY%%apt_=TioZqkw20XbHQy^sIM4@$TC>gwQy`Nx&e5lwW5?J8X+<*&+A}()sJdk>I(ju*Dw1pZH9;0i z0$`4iMW8`d$roXgl@!ZKR%FoS4xMamNyZ}G7JSW!q$;Cxjh)I($33%R63ud3yyjgE zB6}lS1L-4>uA`7z@|HdSQ+|_ZceQsp67SQ$KV0(he7mffGjrX|x^r(2L)JV`deqeL4kEkTvx zYF8$D>uYJQNZT=R_Ro@3@;xZ-3DR0rGukC)H{%_eV8iVLeX$S2keHk)_Rq#@VRLHi zE{zV3{*o#kpZluHf5*YUf3x6vp>g-8rcdgVZGLenB*n&Sa$Xx#|8=YD=>mi23Bdcj zAuMGqjK#`+6-T>{l?G()h~^<0jR88J@e{XyiD>hf2;3P+>?F9cjb24`8 zS%GJ#ZhNoU*1t&@iTq^tM=JX1?_n1$rdW|%bQP5QPGUr^m>%PbEk$IyjVAsi2OdB- zkELHT25Dp-aSdU9>PB$Wy!dR&U8s8m)RW=iH&1)Yb!)YVDBb~(W|1Q>5423LGoDwg zst}g!SaG=so{31_kd$Om?lLWEcTiuUg ziF&kFTO_-ms%Og{nb_Ys#iiN1OHabU0p#t5gv_$7^xD$%42h}KPe4c%&;yx8LO7)V zyC#E?rF8OV$7@~(F>3RUl9OVwtu#luj|^A?n`>&&S<802%#$EdqI? zl+p7@DhoM@mJ`&l?(ZsMNJ>ABAHc}Kg}o(dLKOvCjlDz8azBo%Y$YGRG^qELaDVav z2=cTX8Hnd;K+4X~Z>I4FxMzLJlsWB==WI9tc-IY_K&bh<0^tsjX+V@UZvg)a0G#54*s5Sto0;~5HMfRRRYheC(qPbxHQc!aUfLP!ti$zk!4F}yC z+fXG2)WJaws!E{NTmw|MxDTtR)T6t*&-qTflm+(AxLz^x-*jl8aQO#Rtm3TWY4{mMqy-d~yjM^msH*rzx( zu1l(1XaPxgrBUa5BOj~ieU0uR#5Kt4=`p0^gZp-buI&HxwLZ00!fhAq`UKUo^-`ye zA`3}1!Yo+bv0Vx+yVdsi#)l{XyKg(JvF(S@3}Jb)R_N_E$>*Fk@c}$IVa~IFT>zh2 zeOlyh-_V&HeVA%pJymgVR}d*I+rrRKd%A7VUZW-FxLGmDYPzVP4~M*a4>BMF381%J z#^VK+JkNPAwC4r@pt^p{7L;b?23WetR>-e6Qq{HRo6X)$O2CyINY@4Hsjgy|tBRUP zrHWwqa5e$8Wvl@MZKMefvporBxc62Fq;5H{GIY1EbR`Ga zXY(3q4kcG<8EN=hA5bf*KsPu}dFr3czZ_1W!)|}W0BLf7CE&c}KXO6PBdc}OfHgLS zokK;Ul9#T}=r=sh-vccVqoCub!Xh!=L26ErVZB}<3g$IPdyXLO0`RF1x=oxu_z3&Y z`^I5f5j9BvnCz}Ss_4PkJ4-2X&eyp6X`ZPyq`+x4wt}=tH&b7%bbVzy^S>uq5-o z-F>{yRajL*$CU%o;+#IUikTHdk~~knEMxH7J{Vb5s}>M`(OO^%>m~Lus_awu<8@!3 za6(-B2~DKA(mp+QQ?5hKsqaE^)q0pMHLhh;s6L#DG5GU8$?IuD?DOnQ6rtU4Zg63t z>YT4?7a38QxOKdF?Wjt3mb(S{10@$J-r?R~pso7Vq_EUgOlnyt@c><2=js71-TN-` zDtvs+sZb6=XR^{VF3Sb2hSsH)@>C4lQAp zzHi5??C3e?Z60TbHHu)OG4%Dk=I4Ivk&?3Ek@A(!I%K)}zMfQo7F~=$kX#K^yWcGv&*7hJSa-jDxKH%yqvjm%&Eiz8tT2NOTvs?-d{cGluA}wY`FLf! z38Tw5D{^IE_DtK^jiN{qAXa_4JD0x^d1KbC+x0pV07wy-IyFcYf;wA|JlOxtVVL!g zWUkq=@iw}9sUY=%MDCGk3r4yM=w6p9=6a7|uf;fiWo+EaOhv#}*GwW_^(RikrW@6T zu9f$HT3M+jB6E*<2e}t1xVLh_%@?_%z==*kaQ?hLve4O0o2c^4WscQEv)x}A(3IZ< zD#k?=@~V!4MDhFG3>5T=sL^rWWz>z-U%zu61KTt@VqpBoxDL*{zmgfj1g|t=dN)0a zP4>XeBHg!MFPrnk7Vh|h*^u_rzGye?EZTuXX$IDnCCoW>%9u|bf{akQd5mm#G>;Yx z6IJf^o{t=pB+r%(d7cwL64l8zj9jg?I@!pc+=$|EWhD(0-OApl-x6av{zbo2NH{{mb-!mG!f+XrBJ}0PV zx%QdDw)0v4sLxoX|5#3;PAfonC-ZZrG0BTmY6rB(#`|)9(<|(e=O3;3cq#AB{p&|F zW#)Ucyz>};HUdqZ&4gr3?ETnl%rF1rC;mXq9`(&PU$PInzvq?hX?PVR9?;zFx_Bd#|gOEa!S& z)NBIh;BnXA0YDx?D(N81H#vg*-RT~rs@$2V^}<8#;0X)T3MyPQ&WeS_T_NBCnc(6M6J~{yGv}dq)|km^Ogfb&YGX4B5g=UG+WRa_P7LJ>xXzeB)qQi5F_sI{VAK zqQe!*kkQoB6TB5H3Qs@s(F@0z#;M|}MNy?o^FHky_zF^C(Y#eFebZNk3Z-ST1nPgf z9Sy9w(L3c#!<uS0dyAKPk5uUJ0UF#zWk9oE!)ro~4<0>=2-JJULs%ke+JQ44)xIVTD znyr{nB00uY+Sy+y36g`>wU+tE=Mc^28h6}Jg7_7sH&yTFO3jkxkc=t)F?dyVwu4zh zVQtd4f_I)G3#m!9u3uaZ&B`90ug{sEP$6D7OfN>dWE3Fesq|yM{)NPDBMg!n@H}{} z%-eG2O`rDsqcY{+D_ATZHdu=dcvxFo{G=e|MPx+Ra!yZHR&_GtgP5#(oqI%4@We+>4Cwhax#Lk!2gCh2MfrG--4 zU$x*Wg|5#McSDmzWtjK*R+%>(&)i)xY}(}jkm`T+jK73uXSYn1S3wRpSX zrK-^?T(OL4FV&VJ|I;%#F&2G0=EWz}U61g15qcy~-mOq{*4wNC4dVO1@8|Q8{!vkM zhQUdjJx%PLdnaA~pj_5OYm^f};HMv&&-seiZU^IxJ7!-6Pt@0?vJ`eoMY49!&?tR% z%;~uG5g1^w^KKF+b3(KQ1qTDtht7jxO_BQUu2ssvty<{T@XFY`EHW8H7dF$ft{q#3 zS&8fO0Ui!@j<(F`iT8^`p_FFmM3?*2Y$<-IF z-ng0{r$UPxrO5Z|mot(8peK)ET~xejK)(=)1BsS|xA}God`VFQomAIynIaVPPk2zu zBwt0ub`DMRL(xzLzXIlj8)===VDo?Hf0SID9!S(nN-8NAZ&8eoOmvakGHok~l+PF! zNDBYVV9I(lI#9c{X0)T`8LYI5QeSTgw%EX2JT$+z64ANuwMc;qr@7c)vOFn;} z=;pZ@XKU%EnQbK49r2?;+q_{1x%WC(hzs{>JpnDbq&%B)U&P3mcqzPIo8Bi5@y`H7 z#u_u&CGu+5X?&N;{MwoSH7jgW_skdM)Jk?EV|ulzcWv`~hpQjX05HRtUQ8kwp-G&u)xS7UqO3@a3J}31 zXUe8Jqy@zAm?_Rcr1_hd^j_bxVGVN6<7`vg$8zqB&oWMd0Rp^rohrH|+^E&dscR|9DrrLh$nN4zDG6P%bal ztsPtEbgCwxsx|GWA8Xaz=rt{~!oxh_jI|OJot1`^;$+nxbAJ85?p*v|I1ru980dEfwNa%@-B+Iuh(%C%cRJ;VuAsMVUUlF`M+j*j)YGfcO z!-mnO6mv@fL|fkVeApRg)>gKa zI*@tOye8wmcN>>k@x6*<)7UDnP2@U4RIWm}R8%bu$Z1AS$029fL3mq66 z1&n+2cVTCj@e|d|6V|UF-E$#>zo5AR4-FpZMpKq@{`P^<(|-kCeTm4#6u|=LnUs zs6@ArDbm!8Xw46Y{&``EF%p?$uOUFxQ@i(%QaTIYNTehjhC> zfdl*#^R1EXC~&9RtaH-YhSjC%mUCt#~@`KeJV36P-g+e22sMRX#9qcIlQ`da2y*HPNJ&z*_QBSY%|fY z_nqkF$jm!J3T!+1jZ!%WjWvZ4Xre=^sU(5VvdHSO{Z|h}8#D1;&lEUh0;#)OKSfIBm{3%)$2W8G47hV<~&w zW94){h%j+=9E#o^kUOKu3izybtWRp6Zrq%Szsj@&dd%2(EeEG@(1j+e z)vm40`EGDE)ld3`O}kqM+cmLFX2*Gt62`KsmPqr4kx11&*FIA}zZ}v8}r<*ei*J*WEvC$XOF$I?2>5@W@d^S08cXHxjV`$#^Iu z^!7qcsJzl7%ivw{9QVJM)HtoJJo#~Ens#$7>Dtzc;Q@bWIgJJmjN%XE>cozGoFP}l zU&}5yj#c1xcV||9mc>>oNft23%HtvivL+I4hS^cwjk=R4VRx1=J0MhNT!xA!Sc?za zy_@ZZ4SIRkHsJ9m+s6CBm2{_Z=!KLR@lBk10~iUw!C!gMU$O#IO_w?fbM(7aQ@X{^ zJ2O+ZNpKDv;$9i^mcQp$9 z$pGNV0Ou8Q%y^R7%fOrII50zeD(hIjMx`K&=8uBV8MxH^+k43D#_s!pF|KCxEx zg24WBmP%!zCJpvXm%dyX(E6?XDGkv<%lQO@?i*pMSmk zqK(Yc-cm|>RXrKG`ZP2UAL7byeRg$0l5+v8>XTHaKv>C+m%)So> zspl+NP)iiYUy`2r-d3TOf6BDVuk_94CFc6~F>ub=V+{d>_F9&ou7{E6J<56aiSBmX z`^tmA(g(mk7iFIwrntOtYk=XNO+S8;kG7xYtv^3gKB!mwd}hia&OQO+;gNwPh_eqh zFN&<^*rq#BlJ4i6KoaBLS$=W^9y!q$HJ{{aJc}B8|d664BKKc!{k{!LD zH{ZI39RGO#Il%Jl?t;$&!PRW_{HH3Cvt$v*mZP1lQ48D=%P*dc9njgkRha+)AOJ~3 zK~%636suRc86|PgU5>5UUoMgAF)M!^Vrb~nV{p4KN6M5Zy4#ErgZh1Rjs;I-U_7XN z>Ry0Ui)nGrP^xT6124=`w}=i90RO*7ap3x6FOgC|a-i>=mf!ci|BugI=D2a(YutAA zUjNqtbtd-eF+5o~!!*g?l2hn(_4Y4$=lIfhu^RgGRy{q_a(NV+ZFjWEgkDup@b1D_^NEe-|^7P-| zGNkTSJ>hQ=uw0GKlK&pdc@ym+fJVz&%*N#N9Jeq3y5h%F)rvOxc_|g*4~=|;Y@{DL zaSkEco#Q)^kcm<13*2x&ffY-Qg;l@+Q$Vc0{(cu%DybjGD=GCB-WSaTU(~D%nt6Xj=PMfjtXVV|H{tXco5k_5&@{O@&*~t30!iMB{Mg zVH>`56Y+69R?*W&*+8#V&Pb4&JE0nnc#LGR&z{;xIaQyvX!;F3NVk0gOU&#B;O6MM z2mqYTxZvtRVbkS0nIy*m;b#Y1EM(Og9HDMiQko4HnsjEA>>~zz75G`20*j>ty4Vh@ z*wegXb;j=4+oC+TO<*biwh|M9bl-R3tXxhBss-wS9r}1AOE*1~%ji-Qv^u7@(FdKm zL8kRxk8LMzS>91S&NC5HS3aAB_shR8nuEyGsI@FPp60l@?2@L}wIuuu#207u*aJVE z?n!R6q?BE`O3>v%g|+Hqpf1uw*QmgpXkllu$&=xx`tLU^*ps!rV3;) zhmK`6#gUDhfp!g2g`GdN+n5mN$GW6Ae}h%G5@wxq+=pInDAnGrrUoF|#-vK^b<01U z44WQteQK?}|0g|H+s`S@8>x+PU`)5MbpzDHN2M$6=;2t& zfoac@wDDniE`~;Yf*KPEVlEou$Q-|sH1JaXYqQ=*Eno18xSq)Et9=eW7 z7yK26Nd(Hx^hvUh>W-S=TL0w0Y3@O9wYxzHcpZfx$MXLR0P>mpd&iKRLuw9Z_mQM@ zC_vb!hSd6mMx9I}vOUdqYiV#2(LNb8)$bhFCCXK*5_QcXqOPT$jmgh@rQ{|prmE!k z9s7A_PN$IZZBUspN5C!7H4XlSmLdnI`6mES>fud%Jd~2rxs?pS{96s*I-8`ph_f<( z6AAydZ6l@xG*B&f_mw%blRAF_kD8FmSW!i8VX4i=7#bOso_C?HuakaUz|l`{hpKXV z7d^ipd01h6=`rkNwD^wd+;Zm7E+B-Oy@Zrpl75sNHymI2X@p@)zTll7&=KKRAuoGyA2@oP#-6z#|Na-4fi!lW5%j2HCYA z@zYl;V(Q116XZnmgZ$xuJrg(e?X}cMs$+_Zag~%H7f!7h;6247|07_p3YMYCxxV@# zL9Ct!Q-gsdNvjIS^&oKp&Bs0IfWFph-a#TXw8MdalAyP?e2l~m!s|ioygN2C%!bTr z_q^b9yo{r}@7c1i1cdv=4x&XoJ$&+XI`Wb|wK8+7yLnDGWtAh6NLhDLu&Vtn^@*Qs z{P5TDKK~iP@V?W!U84qh zVMr1+`QEEx9*%n)2`jRZH|Ohq>n>)MU|XYoxgg!o>C@t84o1|l#h& z@0sgjasmJ|ttB{*Ut)cGHts3&^+##nrGUDc0$`v1XMOOv(PVtqJQN%f|6G}lLg($$ zy{3!O!>{kF?Tszg*_^7Fx#PFboYAI+LrHV$yhw9ix3BZ=i0>r*=Hov8rOasTptfLr z>Xne$g+X*@_c;QP-y}e?t{~03hGqD9>vzRoJ$5%PyP4f-XD!)JBqzHTm>bV~-EWQ5 z)k>D&`MKN2{*jQM5B%$w&7a?AvpVw`bUo2O=3LBj2{Oy~Vz{N}@*9LplJ<`ltu{F) z+nknFqzO{<;-v7EU)%Ao*O`6nC;bS-Mm(LNt#yZO_Y!hvKC=!zf-qfRR?N+aY$%-r3-hs=6t?Y!R3DT zr%f%hCLCxQNDP?DpFU^nw"pDJzrvYXPN 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