From bb55ca6e41a93ad47a3fd41d28ccae67fc1cd66f Mon Sep 17 00:00:00 2001 From: devjaja Date: Sun, 26 Jul 2026 20:07:10 +0100 Subject: [PATCH] feat: Trust Ledger, MCP Server, x402 payments UI, and CI fixes Backend: - Add Trust Ledger (reputation.ts): getReputation() + getReputationEvents() with two-tier RPC fallback for on-chain reputation reads - Add settlements.ts: persist x402 settlements to data/settlements.json - Add MCP Server (src/mcp/server.ts): 5 tools (list_agents, suggest_agents, dispatch_task, get_task_status, read_payment_history) via stdio transport - Fix /agents/:hash/reputation route to return { reputation, events } - Enrich /agents with tasksFailed/lastUpdated from chain - Add GET /x402/history route for settlement records - Replace require() with lazy import() in casperHandler.ts Frontend: - Add agent trust page (agents/[hash]/page.tsx): score bar, completion/failure counts, explorer-linked reputation events table - Add use-agent-reputation hook - Add pay-agent.tsx component: x402 signTypedData payment flow - Update payments page to fetch real settlement data from /x402/history - Fix rating derivation: reputationScore / 2000 (not old formula) - Add demo badge to AgentCard with FlaskConical icon - Link agent names to trust pages - Fix React hooks: eliminate synchronous setState in effects CI/Lint: - Create eslint.config.mjs for frontend (next lint removed in Next.js 16) - Fix backend lint: 0 errors (was 2 require()-import errors) - Fix frontend lint: 0 errors, 0 warnings - All checks green: backend 8/8 tests, frontend 6/6 tests, contracts 29/29 tests, tsc clean, next build clean --- backend/package-lock.json | 792 ++++++++++++-- backend/package.json | 7 +- backend/src/agentStore.ts | 29 +- backend/src/casperHandler.ts | 16 +- backend/src/coordinator.ts | 253 +++-- backend/src/mcp/server.ts | 82 ++ backend/src/reputation.ts | 163 +++ backend/src/server.ts | 63 +- backend/src/settlements.ts | 84 ++ backend/src/x402.ts | 152 ++- frontend/app/agents/[hash]/page.tsx | 143 +++ frontend/app/agents/page.tsx | 2 +- frontend/app/dashboard/page.tsx | 2 +- frontend/app/payments/page.tsx | 113 +- frontend/components/agents/agent-card.tsx | 18 +- frontend/components/payments/pay-agent.tsx | 107 ++ frontend/eslint.config.mjs | 7 + frontend/hooks/use-agent-reputation.ts | 51 + frontend/hooks/use-chain-agents.ts | 6 +- frontend/hooks/use-task-history.ts | 16 +- frontend/hooks/use-wallet.ts | 3 +- frontend/package-lock.json | 1114 ++++++++++++++++++-- frontend/package.json | 5 +- frontend/tsconfig.tsbuildinfo | 2 +- 24 files changed, 2887 insertions(+), 343 deletions(-) create mode 100644 backend/src/mcp/server.ts create mode 100644 backend/src/reputation.ts create mode 100644 backend/src/settlements.ts create mode 100644 frontend/app/agents/[hash]/page.tsx create mode 100644 frontend/components/payments/pay-agent.tsx create mode 100644 frontend/eslint.config.mjs create mode 100644 frontend/hooks/use-agent-reputation.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index a2baefd..d5f82d8 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@casper-ecosystem/casper-eip-712": "1.2.1", "@make-software/casper-x402": "1.0.0", + "@modelcontextprotocol/sdk": "^1.12.1", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0", @@ -19,7 +20,7 @@ "dotenv": "16.4.5", "express": "4.19.2", "express-rate-limit": "7.3.1", - "viem": "2.17.0" + "zod": "^3.24.4" }, "devDependencies": { "@types/cors": "2.8.17", @@ -35,12 +36,6 @@ "vitest": "^4.1.10" } }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", - "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", - "license": "MIT" - }, "node_modules/@casper-ecosystem/casper-eip-712": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@casper-ecosystem/casper-eip-712/-/casper-eip-712-1.2.1.tgz", @@ -358,6 +353,18 @@ ], "license": "MIT" }, + "node_modules/@hono/node-server": { + "version": "1.19.15", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.15.tgz", + "integrity": "sha512-Za2ai6TLdKjUvnur+eenO6nuYYipVAEhyCAdaV8IRvmU9kK8crOZUSYvIXn72E4f8fJqyAbpcJuTsYYmZp9Deg==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", @@ -463,6 +470,496 @@ "casper-js-sdk": "5.0.12" } }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.0.tgz", + "integrity": "sha512-XKJXDsASUOo0LLtFwW5hCcQGH0N4WQc/Rn8/Pvoia+TJFOkkFPvrtW9lZOeeNcxQJspvOIERMwiRLsVFlhHEkA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", @@ -1533,27 +2030,6 @@ "zod": "^3.24.2" } }, - "node_modules/abitype": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.5.tgz", - "integrity": "sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1655,6 +2131,45 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -2015,7 +2530,6 @@ "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", @@ -2524,6 +3038,15 @@ "node": ">=12.0.0" } }, + "node_modules/eventsource-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/expect-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", @@ -2595,7 +3118,6 @@ "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": { @@ -2612,6 +3134,22 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2900,6 +3438,15 @@ "node": ">= 0.4" } }, + "node_modules/hono": { + "version": "4.12.32", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.32.tgz", + "integrity": "sha512-XcuyW9qE2kJn07PkecMOBd5Vq/hMy7mmGw+idz1yblbg9N17ijJODrvPkn7/dwL3Kulj8LcRJ69DLOWf91dRUg==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -3010,6 +3557,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ip-address": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz", + "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -3081,26 +3637,25 @@ "node": ">=0.12.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "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.4", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.4.tgz", - "integrity": "sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], + "node_modules/jose": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.4.tgz", + "integrity": "sha512-N8acGzVsQy6M/fjFcxtysNc4Q379TcM5dM/qKkNtsHFji88yANnXTr7BLeP75iPnFwBfQzM/jg2BZ9+HZrHCZA==", "license": "MIT", - "peerDependencies": { - "ws": "*" + "funding": { + "url": "https://github.com/sponsors/panva" } }, "node_modules/json-buffer": { @@ -3117,6 +3672,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, "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", @@ -3770,7 +4331,6 @@ "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" @@ -3816,6 +4376,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/postcss": { "version": "8.5.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", @@ -3958,6 +4527,15 @@ "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", "license": "Apache-2.0" }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.12", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", @@ -4028,6 +4606,55 @@ "@rolldown/binding-win32-x64-msvc": "1.1.4" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -4122,7 +4749,6 @@ "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" @@ -4135,7 +4761,6 @@ "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" @@ -4580,7 +5205,7 @@ "version": "5.5.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -4641,48 +5266,6 @@ "node": ">= 0.8" } }, - "node_modules/viem": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.17.0.tgz", - "integrity": "sha512-+gaVlsfDsHL1oYdjpatdRxW1WK/slLYVvpOws3fEdLfQFUToezKI6YLC9l1g2uKm4Hg3OdGX1KQy/G7/58tTKQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.10.0", - "@noble/curves": "1.4.0", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0", - "abitype": "1.0.5", - "isows": "1.0.4", - "ws": "8.17.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", - "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/vitest": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", @@ -4911,7 +5494,6 @@ "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" @@ -4956,27 +5538,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -5018,6 +5579,15 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } } } } diff --git a/backend/package.json b/backend/package.json index 06f8391..c18755d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,9 +10,11 @@ "lint": "eslint src/", "format": "prettier --write src/", "test": "vitest run", - "test:watch": "vitest" + "test:watch": "vitest", + "mcp": "npx tsx src/mcp/server.ts" }, "dependencies": { + "@modelcontextprotocol/sdk": "^1.12.1", "@casper-ecosystem/casper-eip-712": "1.2.1", "@make-software/casper-x402": "1.0.0", "@noble/hashes": "1.4.0", @@ -23,7 +25,8 @@ "cors": "2.8.5", "dotenv": "16.4.5", "express": "4.19.2", - "express-rate-limit": "7.3.1" + "express-rate-limit": "7.3.1", + "zod": "^3.24.4" }, "devDependencies": { "@types/cors": "2.8.17", diff --git a/backend/src/agentStore.ts b/backend/src/agentStore.ts index 576a211..97ba3b4 100644 --- a/backend/src/agentStore.ts +++ b/backend/src/agentStore.ts @@ -9,7 +9,10 @@ export interface AgentRecord { active: boolean; reputationScore: number; tasksCompleted: number; + tasksFailed: number; + lastUpdated: string; // ISO timestamp of last reputation change source: "on-chain" | "local"; + demo?: boolean; // true for seeded coordinator agents } const STORE_PATH = path.resolve(__dirname, "..", "data", "agents.json"); @@ -34,7 +37,12 @@ function loadLocal(): void { removed++; continue; } - agents.set(k, { ...rec, source: rec.source ?? "local" }); + agents.set(k, { + ...rec, + source: rec.source ?? "local", + tasksFailed: rec.tasksFailed ?? 0, + lastUpdated: rec.lastUpdated ?? new Date(0).toISOString(), + }); } if (removed > 0) { console.warn(`[AgentStore] Removed ${removed} agents with invalid account hashes`); @@ -106,6 +114,8 @@ export function addAgent( active: true, reputationScore: 5000, tasksCompleted: 0, + tasksFailed: 0, + lastUpdated: new Date().toISOString(), source: "local", }); saveLocal(); @@ -173,9 +183,22 @@ export async function seedCoordinatorAgents(): Promise { const priceMotes = "500000000"; const caps = ["research", "risk", "coding", "design", "audit", "report"]; for (const cap of caps) { - addAgent(acctHash, `coordinator://${cap}`, cap, priceMotes); + agents.set(acctHash, { + accountHash: acctHash, + endpoint: `coordinator://${cap}`, + capability: cap, + pricePerTask: priceMotes, + active: true, + reputationScore: 5000, + tasksCompleted: 0, + tasksFailed: 0, + lastUpdated: new Date().toISOString(), + source: "local", + demo: true, + }); } - console.log(`[AgentStore] Seeded ${caps.length} coordinator agents with hash ${acctHash.slice(0, 14)}…`); + saveLocal(); + console.log(`[AgentStore] Seeded ${caps.length} coordinator agents (demo=true) with hash ${acctHash.slice(0, 14)}…`); } catch (err) { console.warn(`[AgentStore] Could not seed coordinator agents: ${err}`); } diff --git a/backend/src/casperHandler.ts b/backend/src/casperHandler.ts index 4f29aa3..e672883 100644 --- a/backend/src/casperHandler.ts +++ b/backend/src/casperHandler.ts @@ -1,7 +1,16 @@ import axios, { AxiosInstance } from "axios"; -const SDK = require("casper-js-sdk"); -const { TypedJSON } = require("typedjson"); +let sdkMod: typeof import("casper-js-sdk") | null = null; +let typedJsonMod: typeof import("typedjson") | null = null; + +async function loadSdk() { + if (!sdkMod) sdkMod = await import("casper-js-sdk"); + return sdkMod; +} +async function loadTypedJson() { + if (!typedJsonMod) typedJsonMod = await import("typedjson"); + return typedJsonMod; +} /** * Standalone RPC handler using standard axios (not fetch adapter). @@ -20,7 +29,8 @@ export class AxiosHandler { } async processCall(payload: object): Promise { - const ser = new TypedJSON(SDK.RpcRequest); + const [SDK, { TypedJSON }] = await Promise.all([loadSdk(), loadTypedJson()]); + const ser = new TypedJSON(SDK.RpcRequest as any); let jsonStr: string; try { jsonStr = ser.stringify(payload); diff --git a/backend/src/coordinator.ts b/backend/src/coordinator.ts index 3d62259..f7beab1 100644 --- a/backend/src/coordinator.ts +++ b/backend/src/coordinator.ts @@ -15,9 +15,11 @@ import crypto from "crypto"; import { config } from "./config"; import { csproCloudGet } from "./chain"; +import { buildEIP712Digest, signAuthorization, loadCoordinatorKey, type ExactCasperAuthorization } from "./x402"; import { settleX402Payment } from "./x402"; import { veniceChat } from "./agents/venice"; import { withRetry } from "./casperHandler"; +import { addSettlement } from "./settlements"; import { getAllAgents, getAgentsByCapability, @@ -39,6 +41,10 @@ async function getSdk() { return _sdk; } +// ── Re-export loadCoordinatorKey from x402.ts (single source of truth) ────── + +export { loadCoordinatorKey } from "./x402"; + // ── Query a named key from the TaskCoordinator contract ───────────────────── export async function queryContractVar(varName: string): Promise { @@ -121,18 +127,54 @@ async function findAgents(capability: string): Promise { // ── Build runtime args helper ───────────────────────────────────────────────── +type ArgValue = + | string + | bigint + | boolean + | { type: "U512"; value: string } + | { type: "Key"; value: string } + | { type: "ByteArray"; value: Uint8Array } + | { type: "PublicKey"; value: any } + | { type: "OptionString"; value: string | null }; + function buildArgs( sdk: any, - namedArgs: Record, + namedArgs: Record, ): any { - const { Args, CLValue } = sdk; + const { Args, CLValue, Key, CLTypeString } = sdk; const args = Args.fromMap({}); for (const [k, v] of Object.entries(namedArgs)) { - if (typeof v === "string") args.insert(k, CLValue.newCLString(v)); - else if (typeof v === "bigint") args.insert(k, CLValue.newCLUint64(v)); - else if (typeof v === "boolean") args.insert(k, CLValue.newCLValueBool(v)); - else if (typeof v === "object" && "type" in v && v.type === "U512") - args.insert(k, CLValue.newCLUInt512(v.value)); + if (typeof v === "string") { + args.insert(k, CLValue.newCLString(v)); + } else if (typeof v === "bigint") { + args.insert(k, CLValue.newCLUint64(v)); + } else if (typeof v === "boolean") { + args.insert(k, CLValue.newCLValueBool(v)); + } else if (typeof v === "object" && "type" in v) { + switch (v.type) { + case "U512": + args.insert(k, CLValue.newCLUInt512(v.value)); + break; + case "Key": + args.insert(k, CLValue.newCLKey(Key.fromAccountHash(v.value))); + break; + case "ByteArray": + args.insert(k, CLValue.newCLByteArray(v.value)); + break; + case "PublicKey": + args.insert(k, CLValue.newCLPublicKey(v.value)); + break; + case "OptionString": + args.insert( + k, + CLValue.newCLOption( + v.value !== null ? CLValue.newCLString(v.value) : null, + CLTypeString, + ), + ); + break; + } + } } return args; } @@ -141,10 +183,11 @@ function buildArgs( export async function buildDeployJSON( entryPoint: string, - namedArgs: Record, + namedArgs: Record, contractHash: string, initiatorPublicKeyHex: string, paymentMotes?: bigint, + legacy?: boolean, ): Promise { const sdk = await getSdk(); const { PublicKey, ContractCallBuilder } = sdk; @@ -152,14 +195,17 @@ export async function buildDeployJSON( const args = buildArgs(sdk, namedArgs); const cleanHash = contractHash.replace("hash-", ""); - const tx = new ContractCallBuilder() + const builder = new ContractCallBuilder() .from(PublicKey.fromHex(initiatorPublicKeyHex)) .chainName(config.casperChainName) .payment(Number(paymentMotes ?? config.taskBudgetMotes), 1) - .byHash(cleanHash) + .byPackageHash(cleanHash) .entryPoint(entryPoint) - .runtimeArgs(args) - .buildFor1_5(); + .runtimeArgs(args); + + // Legacy mode: build Deploy (for CSPR.click frontend signing) + // Default: build TransactionV1 (for backend-submitted calls) + const tx = legacy ? builder.buildFor1_5() : builder.build(); return tx.toJSON(); } @@ -168,85 +214,124 @@ export async function buildDeployJSON( export async function callContractEntry( entryPoint: string, - namedArgs: Record, + namedArgs: Record, paymentMotes?: bigint, contractOverride?: string, ): Promise { const sdk = await getSdk(); - const { KeyAlgorithm, PrivateKey, RpcClient, Deploy } = sdk; + const { RpcClient, Transaction } = sdk; const { AxiosHandler } = await import("./casperHandler"); - const fsPromises = await import("fs/promises"); - let pem: string; - try { - pem = await fsPromises.readFile(config.coordinatorKeyPath, "utf-8"); - } catch { - throw new Error( - `Coordinator key not found at ${config.coordinatorKeyPath}. Generate one with: casper-client keygen ${config.coordinatorKeyPath.replace("/secret_key.pem", "")}` - ); - } - const algo = config.coordinatorKeyAlgo === "secp256k1" - ? KeyAlgorithm.SECP256K1 - : KeyAlgorithm.ED25519; - let key: InstanceType; - try { - key = PrivateKey.fromPem(pem, algo); - } catch { - throw new Error(`Failed to parse coordinator key at ${config.coordinatorKeyPath} as ${config.coordinatorKeyAlgo}`); - } + const { key } = await loadCoordinatorKey(); const rpc = new RpcClient(new AxiosHandler(config.casperNodeRpc)); const contractHash = (contractOverride ?? config.contracts.taskCoordinator).replace("hash-", ""); const deployJSON = await buildDeployJSON(entryPoint, namedArgs, contractHash, key.publicKey.toHex(), paymentMotes); - const deploy = Deploy.fromJSON(deployJSON); - deploy.sign(key); + const transaction = Transaction.fromJSON(deployJSON); + transaction.sign(key); const result = await withRetry( - () => rpc.putDeploy(deploy) as Promise<{ deployHash: { toHex(): string } }>, - `putDeploy(${entryPoint})`, + () => rpc.putTransaction(transaction) as Promise<{ transactionHash: { toHex(): string } }>, + `putTransaction(${entryPoint})`, 3, 3000, ); - const hash = result.deployHash.toHex(); + const hash = result.transactionHash.toHex(); console.log(`[Coordinator] ${entryPoint} → ${hash}`); - console.log(`[Coordinator] https://testnet.cspr.live/deploy/${hash}`); + console.log(`[Coordinator] https://testnet.cspr.live/transaction/${hash}`); - await waitForDeploy(rpc, hash); + await waitForTransaction(rpc, hash); return hash; } /** - * Submit an already-signed Deploy JSON via the Casper RPC. + * Submit an already-signed Deploy or Transaction JSON via the Casper RPC. * Used by POST /agent/register/submit (frontend signs via CSPR.click). + * + * Auto-detects whether the JSON is a legacy Deploy or TransactionV1 + * and routes to the appropriate RPC method. */ export async function submitSignedDeploy(signedDeployJSON: object): Promise { const sdk = await import("casper-js-sdk").then(m => m.default ?? m); - const { Deploy, RpcClient } = sdk; + const { Deploy, Transaction, RpcClient } = sdk; const { AxiosHandler } = await import("./casperHandler"); const rpc = new RpcClient(new AxiosHandler(config.casperNodeRpc)); - const deploy = Deploy.fromJSON(signedDeployJSON); + const json = signedDeployJSON as any; + const isLegacyDeploy = !!(json.body && json.header && json.approvals); + + if (isLegacyDeploy) { + // Legacy Deploy format (from CSPR.click frontend signing) + const deploy = Deploy.fromJSON(signedDeployJSON); + + const result = await withRetry( + () => rpc.putDeploy(deploy) as Promise<{ deployHash: { toHex(): string } }>, + "putDeploy(signed)", + 3, + 3000, + ); + + const hash = result.deployHash.toHex(); + + console.log(`[submitSigned] User-signed deploy → ${hash}`); + console.log(`[submitSigned] https://testnet.cspr.live/deploy/${hash}`); + + await waitForDeployLegacy(rpc, hash); + return hash; + } + + // TransactionV1 format + const transaction = Transaction.fromJSON(signedDeployJSON); const result = await withRetry( - () => rpc.putDeploy(deploy) as Promise<{ deployHash: { toHex(): string } }>, - "putDeploy(signed)", + () => rpc.putTransaction(transaction) as Promise<{ transactionHash: { toHex(): string } }>, + "putTransaction(signed)", 3, 3000, ); - const hash = result.deployHash.toHex(); + const hash = result.transactionHash.toHex(); - console.log(`[submitSigned] User-signed tx → ${hash}`); - console.log(`[submitSigned] https://testnet.cspr.live/deploy/${hash}`); + console.log(`[submitSigned] User-signed transaction → ${hash}`); + console.log(`[submitSigned] https://testnet.cspr.live/transaction/${hash}`); - await waitForDeploy(rpc, hash); + await waitForTransaction(rpc, hash); return hash; } -async function waitForDeploy( +async function waitForTransaction( + rpc: { getTransactionByTransactionHash(h: string): Promise }, + hash: string, +): Promise { + const MAX_ATTEMPTS = 60; + const POLL_INTERVAL_MS = 4000; + + for (let i = 0; i < MAX_ATTEMPTS; i++) { + await new Promise(r => setTimeout(r, POLL_INTERVAL_MS)); + try { + const info = await rpc.getTransactionByTransactionHash(hash) as { + executionInfo?: { blockHeight?: number; executionResult?: { errorMessage?: string } }; + }; + const exec = info.executionInfo; + if (exec?.blockHeight && exec.blockHeight > 0 && exec.executionResult) { + if (exec.executionResult.errorMessage) { + throw new Error(`Casper transaction failed on-chain: ${exec.executionResult.errorMessage}`); + } + return; + } + } catch (e) { + const msg = (e as Error).message ?? ""; + if (msg.startsWith("Casper transaction failed")) throw e; + // Transient RPC errors — continue polling + } + } + throw new Error(`Transaction ${hash} not confirmed after ${MAX_ATTEMPTS * POLL_INTERVAL_MS / 1000}s (${MAX_ATTEMPTS} attempts)`); +} + +async function waitForDeployLegacy( rpc: { getTransactionByDeployHash(h: string): Promise }, hash: string, ): Promise { @@ -303,24 +388,74 @@ async function hireAndPay( taskId: bigint, result: TaskResult, ): Promise { - // 1. Record hire on Casper chain (with retry) + const sdk = await getSdk(); + + // Load coordinator key for EIP-712 signing (from x402.ts shared helper) + const coordinator = await loadCoordinatorKey(); + + // Build EIP-712 TransferAuthorization + const now = Math.floor(Date.now() / 1000); + const validAfter = String(now - 60); + const validBefore = String(now + config.x402.timeoutSeconds); + const nonce = crypto.randomBytes(32).toString("hex"); + + const authorization: ExactCasperAuthorization = { + from: coordinator.accountHash, + to: agent.accountHash, + value: agent.pricePerTask, + validAfter, + validBefore, + nonce, + }; + + // Sign via centralized signAuthorization helper + const { signature: sigHex } = await signAuthorization(authorization); + const sigBytes = new Uint8Array(Buffer.from(sigHex, "hex")); + + // Convert nonce hex to 32-byte Uint8Array + const nonceBytes = new Uint8Array(32); + for (let i = 0; i < 32; i++) { + nonceBytes[i] = parseInt(nonce.slice(i * 2, i * 2 + 2), 16); + } + + // 1. Record hire on Casper chain with full x402 auth args (with retry) const hireHash = await callContractEntry("hire_agent", { - task_id: taskId, - agent: agent.accountHash, + task_id: taskId, + agent: { type: "Key", value: agent.accountHash }, + value: { type: "U512", value: agent.pricePerTask }, + valid_after: BigInt(validAfter), + valid_before: BigInt(validBefore), + nonce: { type: "ByteArray", value: nonceBytes }, + public_key: { type: "PublicKey", value: coordinator.publicKey }, + signature: { type: "ByteArray", value: sigBytes }, }); result.agentsHired.push(agent.accountHash); - result.casperExplorerLinks.push(`https://testnet.cspr.live/deploy/${hireHash}`); + result.casperExplorerLinks.push(`https://testnet.cspr.live/transaction/${hireHash}`); // 2. Real x402 payment via CSPR.cloud facilitator - const x402Hash = await settleX402Payment( + const settleResult = await settleX402Payment( agent.accountHash, agent.pricePerTask, agent.endpoint || `https://guildnet.io/agents/${agent.capability}` ); - result.txHashes.push(x402Hash); - result.casperExplorerLinks.push(`https://testnet.cspr.live/deploy/${x402Hash}`); + result.txHashes.push(settleResult.hash); + result.casperExplorerLinks.push(`https://testnet.cspr.live/deploy/${settleResult.hash}`); + + // 3. Persist settlement record + try { + addSettlement({ + hash: settleResult.hash, + from: settleResult.from, + to: settleResult.to, + amount: settleResult.amount, + capability: agent.capability, + taskId: String(taskId), + }); + } catch (e) { + console.warn(`[Coordinator] Failed to persist settlement: ${e}`); + } - // 3. Update local agent store + // 4. Update local agent store incrementAgentTasks(agent.accountHash); } @@ -334,7 +469,7 @@ async function completeTaskOnChain( try { await callContractEntry("complete_task", { task_id: taskId, - result_hash: resultHash, + result_hash: { type: "OptionString", value: resultHash }, }); console.log(`[Coordinator] Task ${taskId} completed on-chain. Result hash: ${resultHash}`); @@ -410,7 +545,7 @@ export async function runCoordinator( 2, 5000, ); - result.casperExplorerLinks.push(`https://testnet.cspr.live/deploy/${createHash}`); + result.casperExplorerLinks.push(`https://testnet.cspr.live/transaction/${createHash}`); onChain = true; result.onChain = true; console.log(`[Coordinator] Task ${TASK_ID} created on-chain → ${createHash}`); diff --git a/backend/src/mcp/server.ts b/backend/src/mcp/server.ts new file mode 100644 index 0000000..b5df352 --- /dev/null +++ b/backend/src/mcp/server.ts @@ -0,0 +1,82 @@ +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { z } from "zod"; + +const BACKEND_URL = process.env.GUILDNET_BACKEND_URL || "http://localhost:3000"; + +async function api(path: string, init?: RequestInit): Promise { + const res = await fetch(`${BACKEND_URL}${path}`, { + headers: { "Content-Type": "application/json", ...init?.headers }, + ...init, + }); + return res.json(); +} + +const server = new McpServer({ + name: "guildnet", + version: "0.1.0", +}); + +server.tool("list_agents", "List all registered AI agents on Casper Testnet", {}, async () => { + const data = await api("/agents"); + const agents = (data.agents ?? []).map((a: any) => + `[${a.capability}] ${a.name} — rep:${a.reputationScore ?? "?"} $${a.priceCSPR ?? "?"}/task${a.demo ? " (demo)" : ""}` + ); + return { content: [{ type: "text" as const, text: agents.join("\n") || "No agents registered." }] }; +}); + +server.tool("suggest_agents", "Suggest which agents to use for a task", { + taskDescription: z.string().describe("Plain-English description of the work"), +}, async ({ taskDescription }) => { + const data = await api("/suggest-agents", { + method: "POST", + body: JSON.stringify({ taskDescription }), + }); + const lines = (data.agents ?? []).map((a: any) => `• ${a.name} (${a.capability})`); + return { content: [{ type: "text" as const, text: lines.join("\n") || data.error || "No suggestion." }] }; +}); + +server.tool("dispatch_task", "Dispatch a task to the coordinator", { + taskDescription: z.string().describe("Plain-English task description"), +}, async ({ taskDescription }) => { + const data = await api("/task", { + method: "POST", + body: JSON.stringify({ taskDescription }), + }); + if (data.error) return { content: [{ type: "text" as const, text: `Error: ${data.error}` }] }; + const taskId = data.taskId ?? "unknown"; + const agents = (data.agentsHired ?? []).map((a: any) => ` → ${a.name}`).join("\n"); + return { content: [{ type: "text" as const, text: `Task #${taskId} dispatched.\nAgents:\n${agents || " (none)"}` }] }; +}); + +server.tool("get_task_status", "Get status and results of a task", { + taskId: z.union([z.string(), z.number()]).describe("Task ID"), +}, async ({ taskId }) => { + const data = await api(`/task/${taskId}`); + if (data.error) return { content: [{ type: "text" as const, text: `Error: ${data.error}` }] }; + const status = data.task?.status ?? "unknown"; + const results = (data.task?.results ?? []).map((r: any) => ` → ${r.agent}: ${r.output?.slice(0, 200) ?? "…"}`).join("\n"); + return { content: [{ type: "text" as const, text: `Task #${taskId}: ${status}\nResults:\n${results || " (none yet)"}` }] }; +}); + +server.tool("read_payment_history", "List x402 settlement records", { + agent: z.string().optional().describe("Filter by agent account hash"), + limit: z.number().optional().describe("Max records to return"), +}, async ({ agent, limit }) => { + const data = await api("/x402/history"); + let settlements = data.settlements ?? []; + if (agent) settlements = settlements.filter((s: any) => s.payee === agent || s.payer === agent); + if (limit) settlements = settlements.slice(-limit); + const rows = settlements.map((s: any) => + `${s.amountCSPR} CSPR ${s.payer.slice(0, 12)}→${s.payee.slice(0, 12)} ${s.transactionHash.slice(0, 16)}… ${new Date(s.timestamp * 1000).toLocaleDateString()}` + ); + return { content: [{ type: "text" as const, text: rows.join("\n") || "No settlements found." }] }; +}); + +async function main() { + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error("GuildNet MCP server running on stdio"); +} + +main().catch(e => { console.error(e); process.exit(1); }); diff --git a/backend/src/reputation.ts b/backend/src/reputation.ts new file mode 100644 index 0000000..a9018c7 --- /dev/null +++ b/backend/src/reputation.ts @@ -0,0 +1,163 @@ +/** + * reputation.ts — Live Trust Ledger + * + * Reads reputation data from the AgentReputation contract via two-tier fallback: + * 1. Direct Casper RPC query_global_state + * 2. CSPR.cloud named-keys API fallback + * + * Also exports getReputationEvents() to fetch ReputationRecorded events + * from the CSPR.cloud events API. + */ + +import { config } from "./config"; +import { csproCloudGet } from "./chain"; + +// ── Types ──────────────────────────────────────────────────────────────────── + +export interface ReputationData { + tasksCompleted: number; + tasksFailed: number; + score: number; + lastUpdated: string; // ISO timestamp +} + +export interface ReputationEvent { + agent: string; + taskId: string; + score: number; + completed: boolean; + timestamp: string; +} + +// ── Two-tier fallback query ────────────────────────────────────────────────── + +let _sdk: any = null; + +async function getSdk() { + if (!_sdk) { + const casperSdk = await import("casper-js-sdk"); + _sdk = casperSdk.default ?? casperSdk; + } + return _sdk; +} + +/** + * Query a named key from the AgentReputation contract. + * Two-tier fallback: direct CSPRPC → CSPR.cloud named-keys API. + */ +async function queryReputationVar(varName: string): Promise { + const contractHash = config.contracts.agentReputation.replace("hash-", ""); + + // Attempt 1 — direct Casper RPC via queryLatestGlobalState + try { + const sdk = await getSdk(); + const { RpcClient } = sdk; + const { AxiosHandler } = await import("./casperHandler"); + const rpc = new RpcClient(new AxiosHandler(config.casperNodeRpc)); + const result = await rpc.queryLatestGlobalState( + `hash-${contractHash}`, + [varName], + ); + const clv = result.storedValue?.clValue; + if (clv?.toString) { + return clv.toString(); + } + } catch (err) { + console.warn(`[Reputation] RPC queryReputationVar(${varName}) failed: ${err}`); + } + + // Attempt 2 — CSPR.cloud named-keys API (reliable fallback) + try { + const data = await csproCloudGet( + `/contracts/${contractHash}/named-keys` + ) as { data?: Array<{ name: string; value: string }> }; + for (const entry of (data.data ?? [])) { + if (entry.name === varName) { + return entry.value; + } + } + } catch (err) { + console.warn(`[Reputation] CSPR.cloud queryReputationVar(${varName}) failed: ${err}`); + } + + return undefined; +} + +/** + * Get reputation data for an agent from the AgentReputation contract. + * Returns tasksCompleted, tasksFailed, score, and lastUpdated. + */ +export async function getReputation(agentHash: string): Promise { + const defaults: ReputationData = { + tasksCompleted: 0, + tasksFailed: 0, + score: 5000, + lastUpdated: new Date(0).toISOString(), + }; + + try { + // Try to query individual fields from the reputation contract + const [completedStr, failedStr, scoreStr] = await Promise.all([ + queryReputationVar(`reputation_completed_${agentHash}`), + queryReputationVar(`reputation_failed_${agentHash}`), + queryReputationVar(`reputation_score_${agentHash}`), + ]); + + if (completedStr !== undefined) { + defaults.tasksCompleted = Number(BigInt(completedStr)); + } + if (failedStr !== undefined) { + defaults.tasksFailed = Number(BigInt(failedStr)); + } + if (scoreStr !== undefined) { + defaults.score = Number(BigInt(scoreStr)); + } + + // Try to get last event timestamp from CSPR.cloud events + try { + const events = await getReputationEvents(agentHash); + if (events.length > 0) { + defaults.lastUpdated = events[events.length - 1].timestamp; + } + } catch { + // Non-critical — use epoch default + } + } catch (err) { + console.warn(`[Reputation] Failed to fetch reputation for ${agentHash.slice(0, 14)}…: ${err}`); + } + + return defaults; +} + +/** + * Fetch ReputationRecorded events from CSPR.cloud for a given agent. + * These are emitted by the AgentReputation contract on each task completion. + */ +export async function getReputationEvents(agentHash: string): Promise { + try { + const data = await csproCloudGet( + `/contracts/${config.contracts.agentReputation.replace("hash-", "")}/events?limit=50` + ) as { data?: Array<{ event_name: string; cl_value: string; timestamp: string }> }; + + const events: ReputationEvent[] = []; + for (const evt of (data.data ?? [])) { + if (evt.event_name === "ReputationRecorded") { + // Parse the CL value — format: (account_hash, task_id, score, completed) + const match = evt.cl_value?.match(/"([^"]+)".*"([^"]+)".*(\d+).*\((true|false)\)/); + if (match && match[1] === agentHash) { + events.push({ + agent: match[1], + taskId: match[2], + score: Number(match[3]), + completed: match[4] === "true", + timestamp: evt.timestamp, + }); + } + } + } + return events; + } catch (err) { + console.warn(`[Reputation] Failed to fetch events for ${agentHash.slice(0, 14)}…: ${err}`); + return []; + } +} diff --git a/backend/src/server.ts b/backend/src/server.ts index 8cb8080..790664c 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -6,6 +6,8 @@ import { config } from "./config"; import { runCoordinator, findAllAgents, queryContractVar, buildDeployJSON, submitSignedDeploy } from "./coordinator"; import { runAgent, type Capability } from "./agentRunner"; import { buildProject } from "./builder"; +import { getReputation, getReputationEvents } from "./reputation"; +import { getSettlements } from "./settlements"; const app = express(); app.use(cors({ @@ -27,11 +29,46 @@ app.get("/health", (_req: Request, res: Response) => { /** * GET /agents * Returns all registered agents from the AgentRegistry contract. + * Includes tasksFailed and lastUpdated from the reputation contract. */ app.get("/agents", async (_req: Request, res: Response, next: NextFunction) => { try { const agents = await findAllAgents(); - res.json({ agents }); + + // Enrich with on-chain reputation data (best-effort) + const enriched = await Promise.all(agents.map(async (agent) => { + try { + const rep = await getReputation(agent.accountHash); + return { + ...agent, + tasksFailed: rep.tasksFailed, + lastUpdated: rep.lastUpdated, + }; + } catch { + return { + ...agent, + tasksFailed: 0, + lastUpdated: new Date(0).toISOString(), + }; + } + })); + + res.json({ agents: enriched }); + } catch (err) { next(err); } +}); + +/** + * GET /agents/:accountHash/reputation + * Returns reputation data from the AgentReputation contract for a specific agent. + */ +app.get("/agents/:accountHash/reputation", async (req: Request, res: Response, next: NextFunction) => { + try { + const { accountHash } = req.params; + const [rep, events] = await Promise.all([ + getReputation(accountHash), + getReputationEvents(accountHash), + ]); + res.json({ reputation: rep, events }); } catch (err) { next(err); } }); @@ -83,11 +120,14 @@ app.get("/setup/check", async (_req: Request, res: Response) => { app.get("/stats", async (_req: Request, res: Response, next: NextFunction) => { try { + let chainReadOk = true; const [taskCount, agentCount] = await Promise.all([ - queryContractVar("task_count").then(v => v !== undefined ? Number(v) : 0), + queryContractVar("task_count") + .then(v => v !== undefined ? Number(v) : (chainReadOk = false, 0)) + .catch(() => { chainReadOk = false; return 0; }), findAllAgents().then(a => a.length), ]); - res.json({ taskCount, agentCount }); + res.json({ taskCount, agentCount, chainReadOk }); } catch (err) { next(err); } }); @@ -252,8 +292,8 @@ app.post("/agent/register/submit", limiter, async (req: Request, res: Response, /** * POST /agent/:capability/run - * A2A route: run a specific agent directly. The agent can autonomously hire - * sub-agents on-chain using its own wallet before performing Venice AI inference. + * Run a single agent for inference via Venice AI. + * External agents can call this endpoint to run work. * * Body: { taskId: string, description: string, context?: string } */ @@ -276,8 +316,6 @@ app.post("/agent/:capability/run", limiter, async (req: Request, res: Response, capability: result.capability, agentAddress: result.agentAddress, output: result.output, - subAgentsHired: result.subAgentsHired, - txHashes: result.txHashes, }); } catch (err) { next(err); } }); @@ -678,6 +716,17 @@ app.post("/x402/submit", limiter, async (req: Request, res: Response, next: Next } catch (err) { next(err); } }); +/** + * GET /x402/history + * Returns all persisted x402 settlement records. + */ +app.get("/x402/history", async (_req: Request, res: Response, next: NextFunction) => { + try { + const settlements = getSettlements(); + res.json({ settlements, count: settlements.length }); + } catch (err) { next(err); } +}); + // ── Error handler ───────────────────────────────────────────────────────────── app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => { const stackLines = err.stack?.split("\n").slice(1, 3).join("\n"); diff --git a/backend/src/settlements.ts b/backend/src/settlements.ts new file mode 100644 index 0000000..9bbb232 --- /dev/null +++ b/backend/src/settlements.ts @@ -0,0 +1,84 @@ +/** + * settlements.ts — x402 settlement persistence + * + * Persists x402 settlement records to data/settlements.json. + * Each record captures a successful payment for history tracking. + */ + +import fs from "fs"; +import path from "path"; + +// ── Types ──────────────────────────────────────────────────────────────────── + +export interface SettlementRecord { + hash: string; // Casper deploy hash + from: string; // payer account hash + to: string; // payee account hash + amount: string; // token amount in base units + capability: string; // agent capability (e.g. "research") + taskId: string; // task ID string + timestamp: string; // ISO timestamp +} + +// ── Persistence ────────────────────────────────────────────────────────────── + +const STORE_PATH = path.resolve(__dirname, "..", "data", "settlements.json"); + +let settlements: SettlementRecord[] | null = null; + +function load(): SettlementRecord[] { + if (settlements) return settlements; + try { + const dir = path.dirname(STORE_PATH); + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); + if (fs.existsSync(STORE_PATH)) { + settlements = JSON.parse(fs.readFileSync(STORE_PATH, "utf-8")); + if (!Array.isArray(settlements)) settlements = []; + } else { + settlements = []; + } + } catch { + settlements = []; + } + return settlements; +} + +function save(): void { + try { + const dir = path.dirname(STORE_PATH); + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(STORE_PATH, JSON.stringify(settlements ?? [], null, 2)); + } catch (e) { + console.warn(`[Settlements] Failed to persist: ${e}`); + } +} + +// ── Public API ─────────────────────────────────────────────────────────────── + +/** + * Record a successful x402 settlement. + */ +export function addSettlement(record: Omit & { timestamp?: string }): void { + const entry: SettlementRecord = { + ...record, + timestamp: record.timestamp ?? new Date().toISOString(), + }; + load(); + settlements!.push(entry); + save(); + console.log(`[Settlements] Recorded ${entry.hash.slice(0, 12)}… → ${entry.to.slice(0, 12)}… (${entry.amount} motes)`); +} + +/** + * Return all settlement records. + */ +export function getSettlements(): SettlementRecord[] { + return load(); +} + +/** + * Return settlement records filtered by recipient account hash. + */ +export function getSettlementsByAgent(accountHash: string): SettlementRecord[] { + return load().filter(s => s.to === accountHash); +} diff --git a/backend/src/x402.ts b/backend/src/x402.ts index 435799c..705c5f6 100644 --- a/backend/src/x402.ts +++ b/backend/src/x402.ts @@ -76,6 +76,12 @@ export interface SettleResult { errorMessage?: string; } +export interface SignedAuthorization { + signature: string; + publicKey: string; + authorization: ExactCasperAuthorization; +} + // ── EIP-712 typed-data hashing (Casper flavour) ─────────────────────────────── // // Casper x402 uses EIP-712 structured-data signing: @@ -108,16 +114,100 @@ function encodeAddress(value: string): Buffer { return Buffer.from(hex.padStart(64, "0"), "hex"); } +// ── Coordinator key loading (shared between x402 + coordinator) ────────────── + +interface CoordinatorKey { + key: any; + publicKey: any; + accountHash: string; // "00" + 64 hex +} + +let _cachedKey: CoordinatorKey | null = null; + +/** + * Load the coordinator private key from disk (cached after first call). + * Used by both x402 settlement and coordinator contract calls. + */ +export async function loadCoordinatorKey(): Promise { + if (_cachedKey) return _cachedKey; + + const casper = await import("casper-js-sdk"); + const { KeyAlgorithm, PrivateKey } = casper.default ?? casper; + const fs = await import("fs/promises"); + + let pem: string; + try { + pem = await fs.readFile(config.coordinatorKeyPath, "utf-8"); + } catch { + throw new Error( + `[x402] Coordinator key not found at ${config.coordinatorKeyPath}. Generate one with: casper-client keygen ${config.coordinatorKeyPath.replace("/secret_key.pem", "")}` + ); + } + const algo = config.coordinatorKeyAlgo === "secp256k1" + ? KeyAlgorithm.SECP256K1 + : KeyAlgorithm.ED25519; + let key: InstanceType; + try { + key = PrivateKey.fromPem(pem, algo); + } catch { + throw new Error(`[x402] Failed to parse coordinator key at ${config.coordinatorKeyPath} as ${config.coordinatorKeyAlgo}`); + } + + const accountHash = "00" + key.publicKey.accountHash().toHex(); + _cachedKey = { key, publicKey: key.publicKey, accountHash }; + return _cachedKey; +} + +/** + * Return the coordinator's payer account hash ("00" + 64 hex). + * Convenience wrapper over loadCoordinatorKey(). + */ +export async function getPayerAccountHash(): Promise { + const { accountHash } = await loadCoordinatorKey(); + return accountHash; +} + +/** + * Build an EIP-712 digest AND sign it with the coordinator key. + * Returns the signature, public key, and authorization together. + * + * This consolidates the signing logic used by both settleX402Payment() + * and coordinator.ts hireAndPay(). + */ +export async function signAuthorization( + auth: ExactCasperAuthorization, +): Promise { + const { key, publicKey } = await loadCoordinatorKey(); + + const digest = buildEIP712Digest( + auth, + config.x402.tokenName, + config.x402.tokenVersion, + config.x402.network, + config.x402.assetPackage, + ); + const signature = await key.signAndAddAlgorithmBytes(digest); + const sigHex = Buffer.from(signature).toString("hex"); + + return { + signature: sigHex, + publicKey: publicKey.toHex(), + authorization: auth, + }; +} + /** * Compute the EIP-712 typed-data hash for a Casper x402 TransferWithAuthorization. * * Uses the Casper-specific domain format (name, version, chain_name, contract_package_hash) * matching the @make-software/casper-x402 package and CSPR.cloud facilitator. + * + * When called with just (auth), uses config.x402 defaults. */ export function buildEIP712Digest( auth: ExactCasperAuthorization, - tokenName: string, - tokenVersion: string, + tokenName?: string, + tokenVersion?: string, network?: string, assetPackage?: string, ): Buffer { @@ -129,14 +219,17 @@ export function buildEIP712Digest( ); // Normalise asset hex: strip "0x" prefix and pad to 32 bytes (64 hex chars) - const assetHex = (assetPackage ?? "").replace(/^0x/, "").padStart(64, "0"); + const assetHex = (assetPackage ?? config.x402.assetPackage).replace(/^0x/, "").padStart(64, "0"); + const resolvedName = tokenName ?? config.x402.tokenName; + const resolvedVersion = tokenVersion ?? config.x402.tokenVersion; + const resolvedNetwork = network ?? config.x402.network; const domainSeparator = keccak256( Buffer.concat([ DOMAIN_TYPE_HASH, - keccak256(Buffer.from(tokenName)), - keccak256(Buffer.from(tokenVersion)), - keccak256(Buffer.from(network ?? "")), + keccak256(Buffer.from(resolvedName)), + keccak256(Buffer.from(resolvedVersion)), + keccak256(Buffer.from(resolvedNetwork)), Buffer.from(assetHex, "hex"), ]) ); @@ -203,46 +296,45 @@ function isValidAccountHash(hash: string): boolean { // ── Main exported function ──────────────────────────────────────────────────── +export interface SettleX402Result { + hash: string; // Casper deploy hash + from: string; // payer account hash + to: string; // payee account hash + amount: string; // token amount in base units + resourceUrl: string; +} + /** * Execute a real Casper x402 payment from the coordinator account to an agent. * * Steps: - * 1. Load coordinator private key via casper-js-sdk + * 1. Load coordinator private key via shared loadCoordinatorKey() * 2. Build a TransferAuthorization (EIP-712 typed data) * 3. Sign the EIP-712 digest with the coordinator's key * 4. POST /verify — validate signature off-chain (no gas) * 5. POST /settle — submit CEP-18 transfer on Casper Testnet - * 6. Return the Casper deploy hash as proof of payment + * 6. Return the full payment info for persistence * * @param payeeAccountHash Casper account-hash of the agent being paid ("00<64hex>") * @param amountBaseUnits Payment amount in token base units (e.g. "1000000000" = 1 WCSPR) * @param resourceUrl URL label for the payment (e.g. the agent's endpoint) - * @returns deploy hash of the settled transaction + * @returns full payment info including deploy hash, from/to, and amount */ export async function settleX402Payment( payeeAccountHash: string, amountBaseUnits: string, resourceUrl: string, -): Promise { +): Promise { if (!isValidAccountHash(payeeAccountHash)) { throw new Error( `[x402] Invalid payTo account-hash: "${payeeAccountHash}" — must be "00" followed by 64 hex chars (${payeeAccountHash.length} chars total)` ); } - const casper = await import("casper-js-sdk"); - const { KeyAlgorithm, PrivateKey } = casper.default ?? casper; - // Load coordinator key - const fs = await import("fs/promises"); - const pemContent = await fs.readFile(config.coordinatorKeyPath, "utf-8"); - const algo = config.coordinatorKeyAlgo === "secp256k1" - ? KeyAlgorithm.SECP256K1 - : KeyAlgorithm.ED25519; - const privateKey = PrivateKey.fromPem(pemContent, algo); - - // Derive payer account hash ("00" + hex) - const payerAccountHash = "00" + privateKey.publicKey.accountHash().toHex(); - const payerPublicKey = privateKey.publicKey.toHex(); + // Load coordinator key via shared helper + const coordinator = await loadCoordinatorKey(); + const payerAccountHash = coordinator.accountHash; + const payerPublicKey = coordinator.publicKey.toHex(); if (!isValidAccountHash(payerAccountHash)) { throw new Error( @@ -265,10 +357,8 @@ export async function settleX402Payment( nonce, }; - // Sign EIP-712 digest (Casper domain with chain_name + contract_package_hash) - const digest = buildEIP712Digest(authorization, config.x402.tokenName, config.x402.tokenVersion, config.x402.network, config.x402.assetPackage); - const signature = await privateKey.signAndAddAlgorithmBytes(digest); - const sigHex = Buffer.from(signature).toString("hex"); + // Sign via shared helper + const { signature: sigHex } = await signAuthorization(authorization); const payload: ExactCasperPayload = { signature: sigHex, @@ -335,5 +425,11 @@ export async function settleX402Payment( console.log(`[x402] ✓ Settled. Deploy hash: ${settleResult.transaction}`); console.log(`[x402] Explorer: https://testnet.cspr.live/deploy/${settleResult.transaction}`); - return settleResult.transaction; + return { + hash: settleResult.transaction, + from: payerAccountHash, + to: payeeAccountHash, + amount: amountBaseUnits, + resourceUrl, + }; } diff --git a/frontend/app/agents/[hash]/page.tsx b/frontend/app/agents/[hash]/page.tsx new file mode 100644 index 0000000..7eeb24e --- /dev/null +++ b/frontend/app/agents/[hash]/page.tsx @@ -0,0 +1,143 @@ +"use client"; + +import { useParams } from "next/navigation"; +import { useAgentReputation } from "@/hooks/use-agent-reputation"; +import { useWallet } from "@/hooks/use-wallet"; +import { CASPER_EXPLORER, BACKEND_URL } from "@/lib/constants"; +import { shortenAddress } from "@/lib/utils"; +import { + Shield, ExternalLink, CheckCircle, XCircle, Clock, ArrowLeft, + TrendingUp, Activity, +} from "lucide-react"; +import Link from "next/link"; + +export default function AgentTrustPage() { + const params = useParams(); + const hash = params?.hash as string; + const { reputation, events, loading, error } = useAgentReputation(hash); + const { connected, address } = useWallet(); + + const score = reputation?.score ?? 5000; + const scorePercent = Math.round((score / 10000) * 100); + const scoreColor = score > 6000 ? "text-green-400" : score > 4000 ? "text-amber-400" : "text-red-400"; + + if (loading) { + return ( +
+
+
+
+
+ ); + } + + return ( +
+ {/* Header */} +
+ + + +
+

Agent Trust Profile

+ {hash ? shortenAddress(hash) : "—"} +
+ +
+ + {error && ( +
+

{error}

+
+ )} + + {/* Score overview */} +
+
+
+
+ +
+
+

{score}/10000

+

On-chain reputation score

+
+
+ {/* Score bar */} +
+
6000 ? "bg-green-500" : score > 4000 ? "bg-amber-500" : "bg-red-500"}`} + style={{ width: `${scorePercent}%` }} + /> +
+

Formula: completions / (completions + failures×2) × 10000

+
+ +
+
+ +
+

{reputation?.tasksCompleted ?? 0}

+

Tasks completed

+
+ +
+
+ +
+

{reputation?.tasksFailed ?? 0}

+

Tasks failed

+
+
+ + {/* Event history */} +
+

+ + Reputation History +

+ {events.length > 0 ? ( +
+ {events.map((ev, i) => ( +
+
+ {ev.success + ? + : } +
+
+

+ Task #{ev.taskId} — {ev.success ? "completed" : "failed"} +

+

+ + {new Date(ev.timestamp * 1000).toLocaleString()} +

+
+ {ev.deployHash && ( + + + + )} +
+ ))} +
+ ) : ( +
+ +

No reputation events yet

+

Events appear after tasks are completed on-chain.

+
+ )} +
+
+ ); +} diff --git a/frontend/app/agents/page.tsx b/frontend/app/agents/page.tsx index de3415d..5e9e47f 100644 --- a/frontend/app/agents/page.tsx +++ b/frontend/app/agents/page.tsx @@ -29,7 +29,7 @@ export default function AgentsPage() {

Agent Marketplace

-

Live agents on Casper Testnet — auto-selected and paid per task

+

Agents on Casper Testnet — auto-selected and paid per task

Register Agent diff --git a/frontend/app/dashboard/page.tsx b/frontend/app/dashboard/page.tsx index 5728877..4c5c24d 100644 --- a/frontend/app/dashboard/page.tsx +++ b/frontend/app/dashboard/page.tsx @@ -29,7 +29,7 @@ export default function DashboardPage() { const totalSpent = history.reduce((s, t) => s + t.agentsHired.length * 0.5, 0); const STATS = [ - { label: "Agents", value: agentCount, sub: "on-chain", icon: Users, color: "text-cyan-400", bg: "from-cyan-500/15 to-cyan-500/5" }, + { label: "Agents", value: agentCount, sub: "registered", icon: Users, color: "text-cyan-400", bg: "from-cyan-500/15 to-cyan-500/5" }, { label: "Tasks", value: taskCount, sub: "on-chain", icon: Zap, color: "text-violet-400", bg: "from-violet-500/15 to-violet-500/5" }, { label: "Sessions", value: String(history.length), sub: "local", icon: Activity, color: "text-blue-400", bg: "from-blue-500/15 to-blue-500/5" }, { label: "Spend", value: `${totalSpent.toFixed(2)}`, sub: "CSPR", icon: TrendingUp, color: "text-green-400", bg: "from-green-500/15 to-green-500/5" }, diff --git a/frontend/app/payments/page.tsx b/frontend/app/payments/page.tsx index 4766eea..ea108b3 100644 --- a/frontend/app/payments/page.tsx +++ b/frontend/app/payments/page.tsx @@ -1,42 +1,54 @@ "use client"; -import { ExternalLink, ArrowUpRight, ArrowDownLeft, Wallet, Receipt } from "lucide-react"; +import { useEffect, useState } from "react"; import { useWallet } from "@/hooks/use-wallet"; -import { useTaskHistory } from "@/hooks/use-task-history"; -import { CASPER_EXPLORER } from "@/lib/constants"; +import { CASPER_EXPLORER, BACKEND_URL } from "@/lib/constants"; import { shortenAddress } from "@/lib/utils"; +import { ExternalLink, ArrowUpRight, ArrowDownLeft, Wallet, Receipt, Loader2 } from "lucide-react"; + +interface Settlement { + id: string; + payer: string; + payee: string; + amountBaseUnits: string; + amountCSPR: string; + resource: string; + transactionHash: string; + timestamp: number; +} export default function PaymentsPage() { const { connected, address, connect } = useWallet(); - const { history } = useTaskHistory(); + const [settlements, setSettlements] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); - const txRows = history.flatMap(task => - task.txHashes.map((hash, i) => ({ - hash, - label: i === 0 ? `Task #${task.taskId}` - : i === task.txHashes.length - 1 ? `Refund — #${task.taskId}` - : `Agent payment — #${task.taskId}`, - type: i === task.txHashes.length - 1 ? "in" : "out", - amount: i === 0 ? "4 CSPR" : i === task.txHashes.length - 1 ? "refund" : "0.5 CSPR", - })) - ); + useEffect(() => { + fetch(`${BACKEND_URL}/x402/history`) + .then(r => r.ok ? r.json() : Promise.reject(new Error(`HTTP ${r.status}`))) + .then(data => setSettlements(data.settlements ?? [])) + .catch(e => setError(e.message)) + .finally(() => setLoading(false)); + }, []); - const totalOut = history.reduce((s, t) => s + t.agentsHired.length * 0.5, 0); + const totalOut = settlements + .filter(s => !address || s.payer.toLowerCase() === address.toLowerCase()) + .reduce((s, x) => s + parseFloat(x.amountCSPR || "0"), 0); return (

Payments

-

On-chain payment history via x402 payment rail

+

Settled x402 payment history on Casper Testnet

{[ - { label: "Total Spent", value: `${totalOut.toFixed(2)} CSPR` }, - { label: "Transactions", value: String(txRows.length) }, - { label: "Tasks", value: String(history.length) }, + { label: "Total Spent", value: `${totalOut.toFixed(2)} CSPR` }, + { label: "Transactions", value: String(settlements.length) }, + { label: "Agents Paid", value: String(new Set(settlements.map(s => s.payee)).size) }, ].map(({ label, value }) => (

{label}

@@ -48,7 +60,7 @@ export default function PaymentsPage() { {!connected ? (
-

Connect wallet to view on CSPR.live

+

Connect wallet to link on-chain explorer

) : ( @@ -64,31 +76,46 @@ export default function PaymentsPage() {
- {txRows.length > 0 ? ( + {loading ? ( +
+ +

Loading settlement history…

+
+ ) : error ? ( +
+

Could not load settlements

+

{error}

+
+ ) : settlements.length > 0 ? (
-

Transactions

- {txRows.map(tx => ( -
-
- {tx.type === "out" - ? - : } -
-
-

{tx.label}

- {tx.hash.slice(0, 16)}... -
-
- - {tx.type === "out" ? "-" : "+"}{tx.amount} - - - - +

Settled Payments

+ {settlements.map(s => { + const isPayer = address && s.payer.toLowerCase() === address.toLowerCase(); + return ( +
+
+ {isPayer + ? + : } +
+
+

+ {isPayer ? `Payment to ${shortenAddress(s.payee)}` : `Payment from ${shortenAddress(s.payer)}`} +

+ {s.transactionHash.slice(0, 16)}… +
+
+ + {isPayer ? "-" : "+"}{s.amountCSPR} CSPR + + + + +
-
- ))} + ); + })}
) : (
diff --git a/frontend/components/agents/agent-card.tsx b/frontend/components/agents/agent-card.tsx index fae72dd..7f9d79b 100644 --- a/frontend/components/agents/agent-card.tsx +++ b/frontend/components/agents/agent-card.tsx @@ -1,6 +1,7 @@ "use client"; -import { Star, Zap, Shield } from "lucide-react"; +import Link from "next/link"; +import { Star, Zap, Shield, FlaskConical } from "lucide-react"; import { cn } from "@/lib/utils"; export interface Agent { @@ -10,11 +11,13 @@ export interface Agent { price: number; rating: number; tasks: number; + tasksFailed?: number; reputationScore?: number; status: "online" | "busy" | "offline"; skills: string[]; accountHash?: string; source?: "on-chain" | "local"; + demo?: boolean; } const GRADIENTS: Record = { @@ -29,7 +32,7 @@ const EMOJIS: Record = { Research: "🔍", Risk: "⚠️", Coding: "💻", Design: "🎨", Report: "📄", Audit: "✅", }; -export function AgentCard({ name, type, description, price, rating, tasks, reputationScore, status, skills, source }: Agent) { +export function AgentCard({ name, type, description, price, rating, tasks, reputationScore, status, skills, accountHash, source, demo }: Agent) { const gradient = GRADIENTS[type] ?? "from-cyan-500 to-violet-400"; const emoji = EMOJIS[type] ?? "🤖"; const isOnline = status === "online"; @@ -44,13 +47,22 @@ export function AgentCard({ name, type, description, price, rating, tasks, reput {emoji}
-

{name}

+

+ {accountHash ? ( + {name} + ) : name} +

{status} {isOnChain && ( on-chain )} + {demo && ( + + demo + + )}
diff --git a/frontend/components/payments/pay-agent.tsx b/frontend/components/payments/pay-agent.tsx new file mode 100644 index 0000000..d7f569d --- /dev/null +++ b/frontend/components/payments/pay-agent.tsx @@ -0,0 +1,107 @@ +"use client"; + +import { useState } from "react"; +import { useWallet } from "@/hooks/use-wallet"; +import { BACKEND_URL } from "@/lib/constants"; +import { shortenAddress } from "@/lib/utils"; +import { Loader2, CreditCard, ExternalLink, CheckCircle, AlertCircle } from "lucide-react"; + +interface PayAgentProps { + agentAccountHash: string; + agentName: string; + amountMotes: string; + amountLabel: string; + onSuccess?: (explorerLink: string) => void; +} + +export function PayAgent({ agentAccountHash, agentName, amountMotes, amountLabel, onSuccess }: PayAgentProps) { + const { connected, address, connect, signTypedData } = useWallet(); + const [loading, setLoading] = useState(false); + const [result, setResult] = useState<{ success: boolean; explorerLink?: string; error?: string } | null>(null); + + async function handlePay() { + if (!connected || !signTypedData) { connect(); return; } + setLoading(true); + setResult(null); + + try { + // Step 1: Prepare payment + const prepRes = await fetch(`${BACKEND_URL}/x402/prepare`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + payeeAccountHash: agentAccountHash, + amountBaseUnits: amountMotes, + resourceUrl: `https://guildnet.io/agents/pay/${agentAccountHash}`, + }), + }); + if (!prepRes.ok) throw new Error(`Prepare failed: ${prepRes.status}`); + const prepData = await prepRes.json(); + + // Step 2: Sign via CSPR.click + const signed = await signTypedData(prepData.signTypedDataParams); + if (!signed || signed.cancelled || !signed.signatureHex) throw new Error("Signing was rejected or cancelled"); + + // Step 3: Submit signed payment + const submitRes = await fetch(`${BACKEND_URL}/x402/submit`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + authorization: prepData.authorization, + signature: signed.signatureHex, + publicKey: address, + resourceUrl: prepData.resourceUrl, + }), + }); + if (!submitRes.ok) { + const err = await submitRes.json().catch(() => ({})); + throw new Error(err.error ?? `Submit failed: ${submitRes.status}`); + } + const submitData = await submitRes.json(); + + const link = submitData.explorerLink ?? `https://testnet.cspr.live/deploy/${submitData.transactionHash}`; + setResult({ success: true, explorerLink: link }); + onSuccess?.(link); + } catch (e) { + setResult({ success: false, error: (e as Error).message }); + } finally { + setLoading(false); + } + } + + return ( +
+ + + {result?.success && result.explorerLink && ( +
+ +
+

Payment settled!

+ + View on explorer + +
+
+ )} + + {result?.error && ( +
+ +

{result.error}

+
+ )} +
+ ); +} diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs new file mode 100644 index 0000000..a1d492c --- /dev/null +++ b/frontend/eslint.config.mjs @@ -0,0 +1,7 @@ +import nextConfig from "eslint-config-next"; + +const config = [ + ...nextConfig, +]; + +export default config; diff --git a/frontend/hooks/use-agent-reputation.ts b/frontend/hooks/use-agent-reputation.ts new file mode 100644 index 0000000..2f423ac --- /dev/null +++ b/frontend/hooks/use-agent-reputation.ts @@ -0,0 +1,51 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { BACKEND_URL } from "@/lib/constants"; + +export interface ReputationData { + tasksCompleted: number; + tasksFailed: number; + score: number; + lastUpdated: number; +} + +export interface ReputationEvent { + agent: string; + taskId: number; + success: boolean; + timestamp: number; + deployHash?: string; +} + +export function useAgentReputation(accountHash: string | undefined) { + const [reputation, setReputation] = useState(null); + const [events, setEvents] = useState([]); + const [loading, setLoading] = useState(!!accountHash); + const [error, setError] = useState(null); + + useEffect(() => { + if (!accountHash) return; + let cancelled = false; + + async function fetchReputation() { + try { + const res = await window.fetch(`${BACKEND_URL}/agents/${accountHash}/reputation`); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const data = await res.json(); + if (cancelled) return; + setReputation(data.reputation ?? null); + setEvents(data.events ?? []); + } catch (e) { + if (!cancelled) setError((e as Error).message); + } finally { + if (!cancelled) setLoading(false); + } + } + + fetchReputation(); + return () => { cancelled = true; }; + }, [accountHash]); + + return { reputation, events, loading, error }; +} diff --git a/frontend/hooks/use-chain-agents.ts b/frontend/hooks/use-chain-agents.ts index 73e48af..2adf0a1 100644 --- a/frontend/hooks/use-chain-agents.ts +++ b/frontend/hooks/use-chain-agents.ts @@ -38,8 +38,10 @@ export function useChainAgents() { type: TYPE_MAP[a.capability] ?? a.capability, description: `Autonomous ${a.capability} agent on GuildNet. ${a.tasksCompleted > 0 ? `${a.tasksCompleted} tasks completed.` : "Ready for hire."} Reputation: ${a.reputationScore}/10000.`, price: Number(a.pricePerTask) / 1e9, - rating: Math.min(5.0, 3.5 + (a.reputationScore / 10000) * 1.5), - tasks: a.tasksCompleted ?? 0, + rating: Math.min(5.0, (a.reputationScore ?? 5000) / 2000), + tasks: a.tasksCompleted ?? 0, + tasksFailed: (a as any).tasksFailed ?? 0, + demo: (a as any).demo ?? false, reputationScore: a.reputationScore ?? 5000, status: a.active ? "online" as const : "offline" as const, skills: SKILL_MAP[a.capability] ?? [a.capability], diff --git a/frontend/hooks/use-task-history.ts b/frontend/hooks/use-task-history.ts index 6083ee8..626e725 100644 --- a/frontend/hooks/use-task-history.ts +++ b/frontend/hooks/use-task-history.ts @@ -5,15 +5,15 @@ import type { TaskRecord } from "./use-tasks"; const STORAGE_KEY = "guildnet:task-history"; -export function useTaskHistory() { - const [history, setHistory] = useState([]); +function readHistory(): TaskRecord[] { + try { + const raw = localStorage.getItem(STORAGE_KEY); + return raw ? JSON.parse(raw) : []; + } catch { return []; } +} - useEffect(() => { - try { - const raw = localStorage.getItem(STORAGE_KEY); - if (raw) setHistory(JSON.parse(raw)); - } catch {} - }, []); +export function useTaskHistory() { + const [history, setHistory] = useState(readHistory); const addTask = useCallback((task: TaskRecord) => { setHistory(prev => { diff --git a/frontend/hooks/use-wallet.ts b/frontend/hooks/use-wallet.ts index 6385d36..1691155 100644 --- a/frontend/hooks/use-wallet.ts +++ b/frontend/hooks/use-wallet.ts @@ -30,7 +30,6 @@ export function useWallet(): WalletState { }, []); useEffect(() => { - setConnecting(false); if (connectTimeoutRef.current) { clearTimeout(connectTimeoutRef.current); connectTimeoutRef.current = undefined; @@ -70,7 +69,7 @@ export function useWallet(): WalletState { return { connected: !!publicKey, address: publicKey ?? "", - connecting, + connecting: connecting && !publicKey, sdkReady: ready, error: sdkError, copied, diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 25405df..dff46d8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -18,18 +18,21 @@ "tailwind-merge": "2.4.0" }, "devDependencies": { + "@eslint/eslintrc": "^3.3.6", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/node": "20.14.9", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "autoprefixer": "10.4.19", + "eslint": "^9.39.5", "eslint-config-next": "^16.2.10", "jsdom": "^29.1.1", "postcss": "8.4.39", "prettier": "^3.9.4", "tailwindcss": "3.4.6", "typescript": "5.5.3", + "typescript-eslint": "^8.65.0", "vitest": "^4.1.10" } }, @@ -635,6 +638,167 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/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/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.3.0", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/js": { + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@exodus/bytes": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", @@ -653,6 +817,72 @@ } } }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.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/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -1894,6 +2124,13 @@ "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/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1932,17 +2169,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz", - "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", + "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/type-utils": "8.63.0", - "@typescript-eslint/utils": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/type-utils": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -1955,22 +2192,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.63.0", + "@typescript-eslint/parser": "^8.65.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz", - "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", + "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "debug": "^4.4.3" }, "engines": { @@ -2004,14 +2241,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz", - "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", + "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.63.0", - "@typescript-eslint/types": "^8.63.0", + "@typescript-eslint/tsconfig-utils": "^8.65.0", + "@typescript-eslint/types": "^8.65.0", "debug": "^4.4.3" }, "engines": { @@ -2044,14 +2281,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz", - "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", + "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0" + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2062,9 +2299,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz", - "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", + "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", "dev": true, "license": "MIT", "engines": { @@ -2079,15 +2316,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz", - "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", + "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/utils": "8.63.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -2122,9 +2359,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz", - "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", + "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", "dev": true, "license": "MIT", "engines": { @@ -2136,16 +2373,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz", - "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", + "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.63.0", - "@typescript-eslint/tsconfig-utils": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/project-service": "8.65.0", + "@typescript-eslint/tsconfig-utils": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -2174,16 +2411,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", + "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { @@ -2221,16 +2458,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz", - "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", + "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0" + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2245,13 +2482,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz", - "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", + "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/types": "8.65.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2765,6 +3002,62 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "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.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "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/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -2793,6 +3086,13 @@ "dev": true, "license": "MIT" }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -3214,6 +3514,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -3254,6 +3564,23 @@ "node": ">=18" } }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -3307,6 +3634,26 @@ "node": ">=6" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -3331,6 +3678,21 @@ "dev": true, "license": "MIT" }, + "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/css-tree": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", @@ -3464,6 +3826,13 @@ "dev": true, "license": "MIT" }, + "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/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3802,6 +4171,79 @@ "node": ">=6" } }, + "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": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", + "@eslint/plugin-kit": "^0.4.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", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.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", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, "node_modules/eslint-config-next": { "version": "16.2.10", "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.10.tgz", @@ -4097,6 +4539,23 @@ "semver": "bin/semver.js" } }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "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", @@ -4110,6 +4569,104 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/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/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "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": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "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", @@ -4150,6 +4707,13 @@ "node": ">=12.0.0" } }, + "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-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -4180,6 +4744,20 @@ "node": ">= 6" } }, + "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/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -4208,6 +4786,19 @@ } } }, + "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/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4221,6 +4812,44 @@ "node": ">=8" } }, + "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.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.3.tgz", + "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==", + "dev": true, + "license": "ISC" + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -4469,6 +5098,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -4571,15 +5210,42 @@ } }, "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -5050,6 +5716,13 @@ "dev": true, "license": "MIT" }, + "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/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", @@ -5085,6 +5758,29 @@ "dev": true, "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsdom": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", @@ -5139,6 +5835,27 @@ "node": ">=6" } }, + "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/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -5168,6 +5885,16 @@ "node": ">=4.0" } }, + "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/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -5188,6 +5915,20 @@ "node": ">=0.10" } }, + "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/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -5478,6 +6219,29 @@ "dev": true, "license": "MIT" }, + "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/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -5941,6 +6705,24 @@ "node": ">=12.20.0" } }, + "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/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -5959,6 +6741,51 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse5": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", @@ -5972,6 +6799,26 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "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/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -6204,6 +7051,16 @@ "dev": true, "license": "MIT" }, + "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/prettier": { "version": "3.9.4", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.4.tgz", @@ -6416,6 +7273,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -6676,6 +7543,29 @@ "@img/sharp-win32-x64": "0.34.5" } }, + "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/side-channel": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", @@ -6940,6 +7830,19 @@ "node": ">=8" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -6986,6 +7889,19 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -7245,6 +8161,19 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "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/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -7338,16 +8267,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz", - "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", + "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.63.0", - "@typescript-eslint/parser": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/utils": "8.63.0" + "@typescript-eslint/eslint-plugin": "8.65.0", + "@typescript-eslint/parser": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7466,6 +8395,16 @@ "browserslist": ">= 4.21.0" } }, + "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/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7744,6 +8683,22 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, + "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/which-boxed-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", @@ -7850,6 +8805,16 @@ "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/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -7890,6 +8855,19 @@ "url": "https://github.com/sponsors/eemeli" } }, + "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" + } + }, "node_modules/zod": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7e96454..9cabd8e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,7 +6,7 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint", + "lint": "eslint .", "format": "prettier --write .", "test": "vitest run", "test:watch": "vitest" @@ -22,18 +22,21 @@ "tailwind-merge": "2.4.0" }, "devDependencies": { + "@eslint/eslintrc": "^3.3.6", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/node": "20.14.9", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "autoprefixer": "10.4.19", + "eslint": "^9.39.5", "eslint-config-next": "^16.2.10", "jsdom": "^29.1.1", "postcss": "8.4.39", "prettier": "^3.9.4", "tailwindcss": "3.4.6", "typescript": "5.5.3", + "typescript-eslint": "^8.65.0", "vitest": "^4.1.10" } } diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo index 934ab5c..dfdbb29 100644 --- a/frontend/tsconfig.tsbuildinfo +++ b/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.string.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.object.d.ts","./node_modules/typescript/lib/lib.esnext.regexp.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/globals.global.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/dev/types/routes.d.ts","./next-env.d.ts","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./lib/utils.ts","./components/agents/agent-card.tsx","./hooks/use-agents.ts","./lib/constants.ts","./hooks/use-chain-agents.ts","./hooks/use-tasks.ts","./hooks/use-task-history.ts","./node_modules/@make-software/csprclick-core-types/account.d.ts","./node_modules/@make-software/csprclick-core-types/actions.d.ts","./node_modules/@make-software/csprclick-core-types/customjwt.d.ts","./node_modules/@make-software/csprclick-core-types/events.d.ts","./node_modules/@make-software/csprclick-core-types/ledger.d.ts","./node_modules/typedjson/lib/types/types.d.ts","./node_modules/typedjson/lib/types/helpers.d.ts","./node_modules/typedjson/lib/types/options-base.d.ts","./node_modules/typedjson/lib/types/type-descriptor.d.ts","./node_modules/typedjson/lib/types/metadata.d.ts","./node_modules/typedjson/lib/types/deserializer.d.ts","./node_modules/typedjson/lib/types/serializer.d.ts","./node_modules/typedjson/lib/types/parser.d.ts","./node_modules/typedjson/lib/types/json-object.d.ts","./node_modules/typedjson/lib/types/json-member.d.ts","./node_modules/typedjson/lib/types/json-array-member.d.ts","./node_modules/typedjson/lib/types/json-set-member.d.ts","./node_modules/typedjson/lib/types/json-map-member.d.ts","./node_modules/typedjson/lib/types/to-json.d.ts","./node_modules/typedjson/lib/types/index.d.ts","./node_modules/@make-software/csprclick-core-types/messages.d.ts","./node_modules/@make-software/csprclick-core-types/metamask.d.ts","./node_modules/@make-software/csprclick-core-types/rpc.d.ts","./node_modules/@make-software/csprclick-core-types/settings.d.ts","./node_modules/@make-software/csprclick-core-types/torus.d.ts","./node_modules/@make-software/csprclick-core-types/walletconnect.d.ts","./node_modules/@make-software/csprclick-core-types/wallets.d.ts","./node_modules/@make-software/csprclick-core-types/w3aoidc.d.ts","./node_modules/@make-software/csprclick-core-types/transaction-status.d.ts","./node_modules/@make-software/csprclick-core-types/isdk.d.ts","./node_modules/@make-software/csprclick-core-types/index.d.ts","./contexts/click-context.tsx","./hooks/use-wallet.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./components/layout/sidebar.tsx","./components/layout/wallet-connect.tsx","./components/layout/global-search.tsx","./components/layout/header.tsx","./components/layout/app-shell.tsx","./node_modules/@make-software/csprclick-ui/dist/index.d.ts","./components/wallet-provider.tsx","./components/providers.tsx","./app/layout.tsx","./app/page.tsx","./app/agents/page.tsx","./app/builder/page.tsx","./components/tasks/task-creator.tsx","./app/dashboard/page.tsx","./app/payments/page.tsx","./app/register/page.tsx","./app/settings/page.tsx","./app/tasks/page.tsx","./components/providers-inner.tsx","./.next/types/cache-life.d.ts","./.next/types/routes.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/validator.ts","./node_modules/@types/parse-json/index.d.ts","./node_modules/@types/react-transition-group/config.d.ts","./node_modules/@types/react-transition-group/Transition.d.ts","./node_modules/@types/react-transition-group/CSSTransition.d.ts","./node_modules/@types/react-transition-group/SwitchTransition.d.ts","./node_modules/@types/react-transition-group/TransitionGroup.d.ts","./node_modules/@types/react-transition-group/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5",{"version":"4af6b0c727b7a2896463d512fafd23634229adf69ac7c00e2ae15a09cb084fad","affectsGlobalScope":true},{"version":"9c00a480825408b6a24c63c1b71362232927247595d7c97659bc24dc68ae0757","affectsGlobalScope":true},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true},"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc",{"version":"8ca4709dbd22a34bcc1ebf93e1877645bdb02ebd3f3d9a211a299a8db2ee4ba1","affectsGlobalScope":true},"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","2db0dd3aaa2ed285950273ce96ae8a450b45423aa9da2d10e194570f1233fa6b","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"e7be367719c613d580d4b27fdf8fe64c9736f48217f4b322c0d63b2971460918","affectsGlobalScope":true},"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36",{"version":"392eadc2af403dd10b4debfbc655c089a7fa6a9750caeb770cfb30051e55e848","affectsGlobalScope":true},"62f1c00d3d246e0e3cf0224f91e122d560428ec1ccc36bb51d4574a84f1dbad0","53f0960fdcc53d097918adfd8861ffbe0db989c56ffc16c052197bf115da5ed6",{"version":"662163e5327f260b23ca0a1a1ad8a74078aabb587c904fcb5ef518986987eaff","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"c48c503c6b3f63baf18257e9a87559b5602a4e960107c762586d2a6a62b64a18","affectsGlobalScope":true},"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","0364f8bb461d6e84252412d4e5590feda4eb582f77d47f7a024a7a9ff105dfdc","5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","d0ca5d7df114035258a9d01165be309371fcccf0cccd9d57b1453204686d1ed0",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"9a30b7fefd7f8abbca4828d481c61c18e40fe5ff107e113b1c1fcd2c8dcf2743","affectsGlobalScope":true},"173b6275a81ebdb283b180654890f46516c21199734fed01a773b1c168b8c45c","304f66274aa8119e8d65a49b1cff84cbf803def6afe1b2cc987386e9a9890e22","1b9adafe8a7fefaeaf9099a0e06f602903f6268438147b843a33a5233ac71745","98273274f2dbb79b0b2009b20f74eca4a7146a3447c912d580cd5d2d94a7ae30","c933f7ba4b201c98b14275fd11a14abb950178afd2074703250fe3654fc10cd2","2eaa31492906bc8525aff3c3ec2236e22d90b0dfeee77089f196cd0adf0b3e3b",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"8f5814f29dbaf8bacd1764aebdf1c8a6eb86381f6a188ddbac0fcbaab855ce52","a63d03de72adfb91777784015bd3b4125abd2f5ef867fc5a13920b5649e8f52b","d20e003f3d518a7c1f749dbe27c6ab5e3be7b3c905a48361b04a9557de4a6900",{"version":"1d4d78c8b23c9ddaaaa49485e6adc2ec01086dfe5d8d4d36ca4cdc98d2f7e74a","affectsGlobalScope":true},{"version":"44fc16356b81c0463cc7d7b2b35dcf324d8144136f5bc5ce73ced86f2b3475b5","affectsGlobalScope":true},"575fb200043b11b464db8e42cc64379c5fd322b6d787638e005b5ee98a64486d","6de2f225d942562733e231a695534b30039bdf1875b377bb7255881f0df8ede8","56249fd3ef1f6b90888e606f4ea648c43978ef43a7263aafad64f8d83cd3b8aa","139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","7b166975fdbd3b37afb64707b98bca88e46577bbc6c59871f9383a7df2daacd1","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","81505c54d7cad0009352eaa21bd923ab7cdee7ec3405357a54d9a5da033a2084","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","2ee1645e0df9d84467cfe1d67b0ad3003c2f387de55874d565094464ee6f2927",{"version":"071d4b4af5755e1a081aa3b785b5526d09276af5a50e4725dea26edd4e7deb31","affectsGlobalScope":true},{"version":"9cf780e96b687e4bdfd1907ed26a688c18b89797490a00598fa8b8ab683335dd","affectsGlobalScope":true},"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","9ae88ce9f73446c24b2d2452e993b676da1b31fca5ceb7276e7f36279f693ed1","e49d7625faff2a7842e4e7b9b197f972633fca685afcf6b4403400c97d087c36","b82c38abc53922b1b3670c3af6f333c21b735722a8f156e7d357a2da7c53a0a0",{"version":"b423f53647708043299ded4daa68d95c967a2ac30aa1437adc4442129d7d0a6c","affectsGlobalScope":true},{"version":"7245af181218216bacb01fbdf51095617a51661f20d77178c69a377e16fb69ed","affectsGlobalScope":true},"4f0fc7b7f54422bd97cfaf558ddb4bca86893839367b746a8f86b60ac7619673","4cdd8b6b51599180a387cc7c1c50f49eca5ce06595d781638fd0216520d98246","d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c",{"version":"8704423bf338bff381ebc951ed819935d0252d90cd6de7dffe5b0a5debb65d07","affectsGlobalScope":true},"7c6929fd7cbf38499b6a600b91c3b603d1d78395046dc3499b2b92d01418b94b",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","6f5260f4bb7ed3f820fd0dfa080dc673b5ef84e579a37da693abdb9f4b82f7dd","97aeb764d7abf52656d5dab4dcb084862fd4bd4405b16e1dc194a2fe8bbaa5dc","adb17fea4d847e1267ae1241fa1ac3917c7e332999ebdab388a24d82d4f58240","5dbf2a502a7fcd85bfe753b585cfc6c9f60294570ee6a18084e574cf93be3fa0","bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027",{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true},"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369",{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true},"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b",{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true},"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023",{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true},"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","cd9304972e6d616197fb44fce00540a904f38b54306a1951b5dbeaf3c01ab5bd","77438e2c397a3db78407621cfc57241a305b310ddea2c185f1d555248297f587","120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","7715134a0cf07dd41a9da2895d708625a3a303a0385e355ecaaf0b8bfaef2550","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","e5c939d896565dcac0f6fbdbada11284e7728ef26a069561c09aa5aa4a788393","9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","dad97c99382889e9c7d1a9d8275500ff71235130fae9f8916fdbf3641d56e592","a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","b55eb9f72166093b5460d34b34f5d8699c968de3bc3fc696e40f2c93f2ebf650","71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f",{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true},"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","05321b823dd3781d0b6aac8700bfdc0c9181d56479fe52ba6a40c9196fd661a8",{"version":"f269a1c2a37fdf64fbf3808d72da60acdbd48d2023f5a16ab51b21de39dd318f","affectsGlobalScope":true},"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","6ee598cdfdd0fa52039dca135b3dfff7b49035dc13292143e0a93843e3861967","27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","eb5acb58487367e502d994b57e2c58255d8241f481ea8efa8e79af23af3f41c2","9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","f1f4095f04343ad6e6825eba41eb50f1555685560dde164179a467e65c4a921c","35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49",{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true},"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0",{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true},"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9",{"version":"528c39acaf39289d3fa67d8af6fa80f928f4dd9f6459e6acc20581807de3eb3f","affectsGlobalScope":true},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc","acc9b958b822fe0a2da8d6377f7c25046f82a6bbcc2e948faaf727a7933bd58d","c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","9970ef80d5414c25679f4be4feffcc51375c54b520df496a0871a7c89e3b65e5",{"version":"54f1fc376fb21a4df84164945bfad62d8c03f69f36f5fa64759bc8a5854d43d6","signature":"6570921ddc36c5d6dd1a401b12f0fd9dc2aa2ba58540a416f09fb4b8c0bcd3c6"},{"version":"25b2e4de5f876b6c9c853cd2c264cea800c1f63ca2f0510cff7d5d61c2061e26","signature":"d7ba67cf91b8356a3b061823d2a221d6e3f74ff1b57b88b7db51b97887e72625"},{"version":"d2ee4711a3e1af4f6645d4413eac888bdc4ad47cd780b32e41ada60e6ae588d9","signature":"d9253fe8fe1ea18d12cd6a5ad92c5f31576ed4cca287badde8ffca9a3546f95e"},{"version":"0af8747f2ccfac506bf2ab774c651922c1cd1d17713994e4f3e8565c3b0ef8af","signature":"dcb547c88c840cf5915152fc11c37ecdf919919318747a8963c6dc73b5473617"},{"version":"4bae198acfed1e03f8e9846895059785da66b5ea1d8719425f5fef0f77fe97ac","signature":"f42ebf9472d165b329b9c9d97ce8a8a3c4f35009a7cde1c483f1723cfba744c9"},{"version":"1800afbdd0603608d5a8d8eb5360bcfde4082d73f8a7e212151d0dcd95e38aa4","signature":"72c726b845993dd6924e1253486a3348f104fdb1c541253baaff1ea4faffda83"},{"version":"0f496b1ed4ed6f4686605e6cb6f75be49724462527b0f68155c2ea51cca51304","signature":"c33b785db80e1bcf7f8fa6a83d8f551e6a21781ca9d7d52288e777f9b64c1eac"},"882487459f426a31ac9082e70d42b717642aa9bd13fd0c5ca634d3a85d755040","5edf18cce52b115e524741ff84f2189d5967213dd60d4aa7fe93411afc1123ae","3f8ad662a60bb3a71ab635aa1eb639dd3aba0a343a91996dd2d187482902df47","f48a419a3322a7242d737dbf4624264f1513ede949100f4c0fe79ef22d8e38e1","37c60ea154ed0c29f179eff1444480ab1e93a2456e8e63ac0e0f22f4ab84af43","a04015b77b8c0a0216708de88e18fcdadd9ab477fe5a486dbbc945874d238537","0b1895965e2d1ad4a218c621229eab82b829491ef451d9c81cfaaefd98949c54","2bb601e5e584d09bbbf94bee2d28faf290d8cb383b3ed3b953e5779704afd1f5","82550c2041775bde023d68f4acc2b9cc1d9e460dcbfb6c45e43f6a7d0824ac8d","b7c6dd8b1897890d33e203a00430b0034ae8b304ac14131560ccafc60a6429b4","16198a84c3b8e81e03919abe36d7bf38a25d807c84dedc8f178f2a0334ad7e10","0168f02da45ed36c12ebd5222edc187e47cbfa9fa8542fb2cd95fa9db6498b6f","93f3ecaa10318b91772dc07efaf94a9032d3af1fd5109b1e6acbeaea1fe889c8","9b7fbea422e82cce8e25408a4a34f501310324ed75a76512d8a2de507579d457","e9cac6ac6585ee82d57e6de52e4da15ec985561bc6b493d58827a3434442621b","8e4290bef1d732d9149696ac2fe9d115facba9a94c93798d2bb6eaf2ace4a65e","df2cca0f3d7119ad63c6d2f424f545cc41bfc57896dd3d063d354bef5e70e2cd","17721a27127dfbad4c281f66f56802fa3d596cd3b5ccfba717a93581b3e8260d","b5e2bac15570739c3f8e496f8f7beacb19965bdb909fb106807ac40f97d9bba4","8f3e596982ca9520df3c0356a505a5ad5839352abbfdf703e998f0f42c5258a5","928c72b09d2272186e728852ac7ecbcff52f744bd9bb4425a82c4df7a381f35a","1f5c00e50ba23ff0d75e5c1139400166caeb3d76cf7ef30885481c09c9167fc2","1d69e402c7346e651e07113898fbf032b537132d01f71763c9e85c02591830c3","39c839539dac409dbfe29cd2d40375b20ee7cc894c995012b079a217da27b0af","58764421a0a271e70684c1a7c3e053a2f471eb019d6cd6bf08565adfc76b65f8","fa961e08b28e0a5f8d0038b0dda62e6d6a6263f59838de17b3c32eedbd326ab9","d915942a45da32c09bd631da1a1e2e9c01899f22bb07bb9c6bce78ec00d024bf","f1c1be2f4cbccd940f6d972ac914d91c7c1b44427ff3b657f9d9c1730fbf652c","57a0a2f564288560467424aa4f732ed9a00e8f08c57bb4b64b052610a3dc6912","26c8664563cb649bfd3860c785d33fe881049870bd273b4568b0114e28f3dc5f","1b29ebb66b44950e9e9dad57fcab3d2cf811b7c5c5c767aff7df5a1d5dbd899e",{"version":"79e9b39e20ed7af7fce9018e2efeec61a99b8463b73ca791febbcc3390e10a64","signature":"2abf8f2e7ab372203ffe363625b71dfac3ff15e781fdfbf30bc87f4e6bf1d3b5"},{"version":"d3febadc65514290dedab79df0f451dcf7d582aaa2b05072f7c90e2f4c0a9ad3","signature":"55afa4d0e55397e58c9a36773f88c568e295f380bc50cbda8e6d97fdc07814c2"},"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7",{"version":"9348ac95f9466907c443c14562c0626ff1f4baad689807796675c27eebd3d31c","signature":"1bec7d528744e42962cc694e22d04e8ed15287dc885be6829d5d71dd17844021"},{"version":"a804be1fbda71723f8a21857ea6d7d0c5793f1d7fb004b876a764615d89104a8","signature":"e1b5ab398a4010f141b5c99fbed362066480bcbc12a3775dfffc927e2685bcdb"},{"version":"87679ea4170cfb3bc386bf98fa15acdbed7056b30e892eef96d5ce5d561bbf97","signature":"94fc5de33d24ea5ae581765aa9704bccb1781187f90f5c00678df51d36a0f772"},{"version":"1518af205f5e10ae18108e6f969b0db7a014d1fe2a7db691af29466bec54bfe8","signature":"1f536c4153db9b0ad7284f5966cff35e3c797c5067adbdcdd14b86660001cb9d"},{"version":"5d029fcb75228e58c445d9b9ff7ea969a392fabde7480d9b5b3fd5b11f0fdabc","signature":"e666e090702df36e9953c06c84778309d5783d1199a1451c205f715b50ae9fe5"},{"version":"8aff5fdab486fa6e56a3cc57f70e776e59825920b60e57b70d3b87973e630aec","affectsGlobalScope":true},{"version":"3e356de74596aaa0755d6eeba4c8371f7c7d85827ab3a79a04d998c63c7cf04f","signature":"ac779e4d56b9af723f679f9f4875728a25c29e21d066fb9c1cb23c6dcd052a90"},{"version":"74b25e834dace557f65606f485341ee9b2101cf55fc2704eb657b67b2c065ab7","signature":"6af4de77a13a46b7cf848e304c50e5da0dfac628cf008bb261810887682c677a"},{"version":"d052297944ce1baa7563756e35d25768659d68ff9678a24edc16de3051694a29","signature":"2e66fdffc8dc6d1387535d5137750f1a1138fa19d8c9c7e0c702ff76218bd560"},{"version":"842882bda20274403db6d584efae8c58f1d63d36228a693b0ae5c0e53ca26468","signature":"7b87720aae5dbfb749d597c437531239e4019502dc0e78633561735db617b6f3"},{"version":"fb8a91de7170cc71f57621ebae9b3cbb757de17e4555b77bc98d031bf7518288","signature":"30bf92459b2952107f34bbe1a40334113c6241bdf0320c4724035f8379700d93"},{"version":"f8d612e397855a4284f11d221328ddb4e2ce9db85f91d4bd870f1a569477e406","signature":"2a897700826ae8301e811e36dc89e5bcc11973bbbd7fc54c09fedd92fe03f7c9"},{"version":"18f2065531cbdf71c0e1e1c710d1bcfba3a0330e41eb699dc2979768ee89ab8f","signature":"82029637f49d64cbdeb80d1c8c59ee220df382e25928e791c8dd1005626f8c05"},{"version":"ba7523f9614ad6c02d271061ffafc9b574a99bc3ca6f18766311cc3c1fb0c103","signature":"7a4fe07bffc8b6ec1785aec2b011f454fc93828d90b9269ccdda995af85bf073"},{"version":"d0c7eb3329c5152f19ea53063da21af238935a445d82731fbdf2d634df9bcdac","signature":"d3e7c64dac397a064a82357f935f2342507ae7fe8f670acc768d61a2b4df96a3"},{"version":"39b5fd9326241c97e8336527d7c7ffef3fd40f4baeac4e3264b84340f9aff323","signature":"f4ecb6ec2d112966e64eabc473e883cd21229cb069c907fb0ed446786add8188"},{"version":"474e72993457e91ac3667c7da628bb0763c9a420eb8675440dfeebbdd9713729","signature":"14015613b6b5d535af589c95b5d2b0533b6db9e709fa964c5324b48ec6ffc1c8"},{"version":"d53b9ca696c450f3a6ff4f3e6c234b76c86881785492925ecbe1a9301a6f41aa","signature":"0078116c0e25922860911af3973f73124e7b73d1583b50bdd0254590b081dc5d"},{"version":"f11ec397b36acdf59c756a157f26da96fa9cebfbbe9209157c135c31ec6905cd","signature":"b9ddd9fa30fe3c59b0150ba8418f5296c3109bc7293d1d1dd307ef57b8ea9353"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"528c39acaf39289d3fa67d8af6fa80f928f4dd9f6459e6acc20581807de3eb3f","affectsGlobalScope":true},{"version":"a4b78daadedb5a0d0dd5dff579e841a41565d3878b6d547c03c08b5d93b1159c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"8cf092cb4457e4cba76980fce51fa2f660910a7bfca1a623e5ba2e9fbff4d369","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","960a68ced7820108787135bdae5265d2cc4b511b7dcfd5b8f213432a8483daf1","7c52a6d05a6e68269e63bc63fad6e869368a141ad23a20e2350c831dc499c5f2","2e7ebdc7d8af978c263890bbde991e88d6aa31cc29d46735c9c5f45f0a41243b","b57fd1c0a680d220e714b76d83eff51a08670f56efcc5d68abc82f5a2684f0c0","8cf121e98669f724256d06bebafec912b92bb042a06d4944f7fb27a56c545109","1084565c68b2aed5d6d5cea394799bd688afdf4dc99f4e3615957857c15bb231"],"root":[507,508,[512,518],550,551,[555,559],[561,578]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"fileIdsList":[[460,461,462,463,574],[574,577],[205,504,507,563,564,565,566,568,569,570,571,572,574,577],[460,461,462,463,577],[205,504,563,564,565,566,568,569,570,571,572,574,575,577],[205,484,509,513,516,574,577],[77,205,509,515,574,577],[77,205,484,509,513,515,516,517,518,567,574,577],[205,502,505,554,559,562,574,577],[205,482,484,509,574,577],[205,509,512,515,518,551,574,577],[77,205,494,509,515,551,574,577],[205,484,509,515,516,574,577],[205,509,515,517,518,567,574,577],[205,509,512,574,577],[77,205,555,558,574,577],[77,205,494,509,516,518,574,577],[205,509,556,557,574,577],[77,205,482,484,494,509,574,577],[205,509,512,515,551,574,577],[205,574,577],[205,468,561,574,577],[77,205,509,515,517,551,574,577],[77,205,550,560,574,577],[77,205,549,574,577],[77,205,513,574,577],[77,205,513,515,574,577],[77,205,517,574,577],[77,205,515,574,577],[77,205,549,550,574,577],[205,510,511,574,577],[505,506,507,574,577],[519,574,577],[519,520,521,522,523,539,540,541,542,543,544,545,546,547,548,574,577],[519,545,547,574,577],[519,538,574,577],[84,574,577],[119,574,577],[120,125,154,574,577],[121,126,132,133,140,151,162,574,577],[121,122,132,140,574,577],[123,163,574,577],[124,125,133,141,574,577],[125,151,159,574,577],[126,128,132,140,574,577],[119,127,574,577],[128,129,574,577],[132,574,577],[130,132,574,577],[119,132,574,577],[132,133,134,151,162,574,577],[132,133,134,147,151,154,574,577],[117,120,167,574,577],[128,132,135,140,151,162,574,577],[132,133,135,136,140,151,159,162,574,577],[135,137,151,159,162,574,577],[84,85,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,574,577],[132,138,574,577],[139,162,167,574,577],[128,132,140,151,574,577],[141,574,577],[142,574,577],[119,143,574,577],[140,141,144,161,167,574,577],[145,574,577],[146,574,577],[132,147,148,574,577],[147,149,163,165,574,577],[120,132,151,152,153,154,574,577],[120,151,153,574,577],[151,152,574,577],[154,574,577],[155,574,577],[119,151,574,577],[132,157,158,574,577],[157,158,574,577],[125,140,151,159,574,577],[160,574,577],[140,161,574,577],[120,135,146,162,574,577],[125,163,574,577],[151,164,574,577],[139,165,574,577],[166,574,577],[120,125,132,134,143,151,162,165,167,574,577],[151,168,574,577],[77,173,174,175,437,574,577],[77,574,577],[77,173,174,574,577],[77,174,437,574,577],[77,574,577,581],[574,577,580,581,582,583,584],[77,81,172,455,500,574,577],[77,81,171,455,500,574,577],[74,75,76,574,577],[458,574,577],[460,461,462,463,574,577],[408,469,470,574,577],[180,181,183,195,219,334,345,451,574,577],[183,214,215,216,218,451,574,577],[183,351,353,355,356,358,451,453,574,577],[183,217,254,451,574,577],[181,183,194,195,201,207,212,333,334,335,344,451,453,574,577],[451,574,577],[190,196,215,235,330,574,577],[183,574,577],[176,190,196,574,577],[362,574,577],[359,360,362,574,577],[359,361,451,574,577],[135,235,432,448,574,577],[135,306,309,325,330,448,574,577],[135,278,448,574,577],[338,574,577],[337,338,339,574,577],[337,574,577],[83,135,176,183,195,201,207,213,215,219,220,233,234,301,331,332,345,451,455,574,577],[180,183,217,254,351,352,357,451,503,574,577],[217,503,574,577],[180,234,403,451,503,574,577],[503,574,577],[183,217,218,503,574,577],[354,503,574,577],[220,333,336,343,574,577],[77,408,574,577],[146,190,205,574,577],[190,205,574,577],[77,275,574,577],[77,205,574,577],[77,196,205,408,574,577],[190,261,275,276,485,492,574,577],[260,486,487,488,489,491,574,577],[311,574,577],[311,312,574,577],[194,196,263,264,574,577],[196,270,271,574,577],[196,265,273,574,577],[270,574,577],[188,196,263,264,265,266,267,268,269,270,273,574,577],[196,263,270,271,272,274,574,577],[196,264,266,267,574,577],[264,266,269,271,574,577],[490,574,577],[196,574,577],[77,184,479,574,577],[77,162,574,577],[77,217,252,574,577],[77,217,345,574,577],[250,255,574,577],[77,251,457,574,577],[552,574,577],[77,81,135,171,172,455,499,574,577],[135,196,574,577],[135,195,200,281,298,340,341,345,400,402,451,452,574,577],[233,342,574,577],[455,574,577],[182,574,577],[77,187,190,405,421,423,574,577],[146,190,405,420,421,422,502,574,577],[414,415,416,417,418,419,574,577],[416,574,577],[420,574,577],[205,369,370,372,574,577],[77,196,363,364,365,366,371,574,577],[369,371,574,577],[367,574,577],[368,574,577],[77,205,251,457,574,577],[77,205,456,457,574,577],[77,205,457,574,577],[298,299,574,577],[299,574,577],[135,452,457,574,577],[328,574,577],[119,327,574,577],[190,196,202,204,306,319,323,325,402,405,440,441,448,452,574,577],[196,245,267,574,577],[306,317,320,325,574,577],[77,187,190,306,309,325,328,362,409,410,411,412,413,424,425,426,427,428,429,430,431,503,574,577],[187,190,215,306,313,314,315,318,319,574,577],[151,196,215,317,324,405,406,448,574,577],[321,574,577],[135,146,184,196,200,210,242,243,246,298,301,366,400,401,440,451,452,453,455,503,574,577],[187,188,190,574,577],[306,574,577],[119,215,242,243,300,301,302,303,304,305,452,574,577],[325,574,577],[119,189,190,200,204,240,306,313,314,315,316,317,320,321,322,323,324,441,574,577],[135,240,241,313,452,453,574,577],[215,243,298,301,306,402,452,574,577],[135,451,453,574,577],[135,151,448,452,453,574,577],[135,146,176,190,195,202,204,207,210,217,237,242,243,244,245,246,281,282,284,287,289,292,293,294,295,297,345,400,402,448,451,452,453,574,577],[135,151,574,577],[183,184,185,213,448,449,450,455,457,503,574,577],[180,181,451,574,577],[374,574,577],[135,151,162,192,358,362,363,364,365,366,372,373,503,574,577],[146,162,176,190,192,204,207,243,282,287,297,298,351,378,379,380,386,389,390,400,402,448,451,574,577],[207,213,220,233,243,301,451,574,577],[135,162,184,195,204,243,384,448,451,574,577],[404,574,577],[135,374,387,388,397,574,577],[448,451,574,577],[303,441,574,577],[204,242,345,457,574,577],[135,146,182,287,347,351,380,386,389,392,448,574,577],[135,220,233,351,393,574,577],[183,244,345,395,451,453,574,577],[135,162,366,451,574,577],[135,217,244,345,346,347,356,374,394,396,451,574,577],[83,135,242,399,455,457,574,577],[296,400,574,577],[135,146,190,193,195,196,202,204,210,219,220,233,243,246,282,284,294,297,298,345,378,379,380,381,383,385,400,402,448,457,574,577],[135,151,220,386,391,397,448,574,577],[223,224,225,226,227,228,229,230,231,232,574,577],[237,288,574,577],[290,574,577],[288,574,577],[290,291,574,577],[135,194,195,196,200,201,452,574,577],[135,146,182,184,202,206,242,245,246,280,400,448,453,455,457,574,577],[135,146,162,186,193,194,204,206,243,398,441,447,452,574,577],[313,574,577],[314,574,577],[196,207,440,574,577],[315,574,577],[189,574,577],[191,203,574,577],[135,191,195,202,574,577],[198,203,574,577],[199,574,577],[191,192,574,577],[191,247,574,577],[191,574,577],[193,237,286,574,577],[285,574,577],[190,192,193,574,577],[193,283,574,577],[190,192,574,577],[242,345,574,577],[440,574,577],[135,162,202,204,208,242,345,399,402,405,406,407,433,434,436,439,441,448,452,574,577],[256,259,261,262,275,276,574,577],[77,173,174,175,205,435,574,577],[77,173,174,175,205,435,438,574,577],[329,574,577],[215,236,241,242,306,307,308,309,310,312,325,326,328,331,399,402,451,453,574,577],[275,574,577],[135,280,448,574,577],[280,574,577],[135,202,248,277,279,281,399,448,455,457,574,577],[256,257,258,259,261,262,275,276,456,574,577],[83,135,146,162,191,192,204,210,242,243,246,345,397,398,400,448,451,452,455,574,577],[187,190,197,574,577],[241,243,375,378,574,577],[241,376,442,443,444,445,446,574,577],[135,237,451,574,577],[135,574,577],[240,325,574,577],[239,574,577],[241,294,574,577],[238,240,451,574,577],[135,186,241,375,376,377,448,451,452,574,577],[77,190,196,274,574,577],[77,188,574,577],[178,179,574,577],[77,184,574,577],[77,190,260,574,577],[77,83,242,246,455,457,574,577],[184,479,480,574,577],[77,255,574,577],[77,146,162,182,249,251,253,254,457,574,577],[190,217,452,574,577],[190,382,574,577],[77,133,135,146,180,182,255,353,455,456,574,577],[77,171,172,455,500,574,577],[77,78,79,80,81,574,577],[125,574,577],[348,349,350,574,577],[348,574,577],[77,81,135,137,146,170,171,172,173,175,176,182,210,215,392,420,453,454,457,500,574,577],[465,574,577],[467,574,577],[471,574,577],[553,574,577],[473,574,577],[475,476,477,574,577],[481,574,577],[82,459,464,466,468,472,474,478,482,484,494,495,497,501,502,503,504,574,577],[483,574,577],[493,574,577],[251,574,577],[496,574,577],[119,241,375,376,378,442,443,445,446,498,500,574,577],[170,574,577],[151,170,574,577],[524,526,527,528,574,577],[524,574,577],[524,527,528,531,532,533,534,535,536,537,574,577],[526,527,528,574,577],[524,526,528,574,577],[524,526,527,574,577],[525,574,577],[524,526,528,529,530,574,577],[94,98,162,574,577],[94,151,162,574,577],[89,574,577],[91,94,159,162,574,577],[140,159,574,577],[89,170,574,577],[91,94,140,162,574,577],[86,87,90,93,120,132,151,162,574,577],[86,92,574,577],[90,94,120,154,162,170,574,577],[120,170,574,577],[110,120,170,574,577],[88,89,170,574,577],[94,574,577],[88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,574,577],[94,101,102,574,577],[92,94,102,103,574,577],[93,574,577],[86,89,94,574,577],[94,98,102,103,574,577],[98,574,577],[92,94,97,162,574,577],[86,91,92,94,98,101,574,577],[120,151,574,577],[89,94,110,120,167,170,574,577]],"referencedMap":[[577,1],[507,2],[578,3],[574,4],[575,2],[576,5],[565,6],[566,7],[568,8],[563,9],[564,10],[569,11],[570,12],[571,13],[572,14],[513,15],[559,16],[557,17],[558,18],[555,19],[556,20],[573,21],[562,22],[567,23],[561,24],[550,25],[514,26],[516,27],[518,28],[517,29],[551,30],[515,21],[512,31],[508,32],[519,2],[520,2],[521,2],[522,33],[549,34],[548,35],[523,33],[539,36],[540,2],[541,2],[542,2],[543,2],[547,2],[546,2],[544,33],[545,2],[560,25],[353,2],[84,37],[85,37],[119,38],[120,39],[121,40],[122,41],[123,42],[124,43],[125,44],[126,45],[127,46],[128,47],[129,47],[131,48],[130,49],[132,50],[133,51],[134,52],[118,53],[169,2],[135,54],[136,55],[137,56],[170,57],[138,58],[139,59],[140,60],[141,61],[142,62],[143,63],[144,64],[145,65],[146,66],[147,67],[148,67],[149,68],[150,2],[151,69],[153,70],[152,71],[154,72],[155,73],[156,74],[157,75],[158,76],[159,77],[160,78],[161,79],[162,80],[163,81],[164,82],[165,83],[166,84],[167,85],[168,86],[579,2],[76,2],[174,87],[437,88],[175,89],[173,88],[438,90],[582,91],[583,88],[581,88],[584,91],[580,2],[585,92],[171,93],[172,94],[74,2],[77,95],[435,88],[205,88],[510,2],[75,2],[509,88],[459,96],[464,97],[471,98],[454,99],[209,2],[217,100],[357,101],[360,102],[332,2],[345,103],[352,104],[234,2],[334,2],[215,2],[331,105],[377,106],[216,2],[207,107],[359,108],[361,109],[362,110],[433,111],[326,112],[279,113],[339,114],[340,115],[338,116],[337,2],[333,117],[358,118],[218,119],[403,2],[404,120],[245,121],[219,122],[246,121],[282,121],[185,121],[355,123],[354,2],[344,124],[449,2],[194,2],[470,125],[411,126],[412,127],[408,128],[488,2],[309,2],[413,129],[409,130],[493,131],[492,132],[487,2],[260,2],[312,133],[311,2],[486,134],[410,88],[265,135],[272,136],[274,137],[264,2],[269,138],[271,139],[273,140],[268,141],[266,2],[270,142],[489,2],[485,2],[491,143],[490,2],[263,144],[480,145],[483,146],[253,147],[252,148],[251,149],[496,88],[250,150],[239,2],[498,2],[553,151],[552,2],[499,88],[500,152],[177,2],[341,153],[342,154],[343,155],[181,2],[346,2],[201,156],[176,2],[425,88],[183,157],[424,158],[423,159],[414,2],[415,2],[422,2],[417,2],[420,160],[416,2],[418,161],[421,162],[419,161],[214,2],[211,2],[212,121],[366,2],[371,163],[372,164],[370,165],[368,166],[369,167],[364,2],[431,129],[206,129],[458,168],[465,169],[469,170],[300,171],[299,2],[294,2],[445,172],[453,173],[327,174],[328,175],[406,176],[316,2],[429,177],[304,88],[321,178],[432,179],[317,2],[320,180],[318,2],[430,181],[427,182],[426,2],[428,2],[324,2],[402,183],[189,184],[302,185],[306,186],[322,187],[325,188],[314,189],[307,190],[452,191],[380,192],[298,193],[186,194],[451,195],[182,196],[373,197],[365,2],[374,198],[391,199],[363,2],[390,200],[83,2],[385,201],[210,2],[405,202],[381,2],[195,2],[197,2],[336,2],[389,203],[213,2],[237,204],[323,205],[243,206],[303,2],[388,2],[367,2],[393,207],[394,208],[335,2],[396,209],[398,210],[397,211],[347,2],[387,194],[400,212],[297,213],[386,214],[392,215],[222,2],[226,2],[225,2],[224,2],[229,2],[223,2],[232,2],[231,2],[228,2],[227,2],[230,2],[233,216],[221,2],[289,217],[288,2],[293,218],[290,219],[292,220],[295,218],[291,219],[202,221],[281,222],[448,223],[446,2],[475,224],[477,225],[441,226],[476,227],[190,228],[187,228],[220,2],[204,229],[203,230],[199,231],[200,232],[208,233],[236,233],[247,233],[283,234],[248,234],[192,235],[191,2],[287,236],[286,237],[285,238],[284,239],[193,240],[434,241],[235,242],[440,243],[407,244],[436,245],[439,246],[330,247],[329,248],[310,249],[296,250],[278,251],[280,252],[277,253],[399,254],[301,2],[463,2],[198,255],[401,256],[447,257],[308,2],[238,258],[315,259],[313,260],[240,261],[375,262],[442,2],[241,263],[376,263],[461,2],[460,2],[462,2],[444,2],[443,2],[378,264],[305,2],[275,265],[196,266],[254,2],[180,267],[242,2],[467,88],[179,2],[479,268],[262,88],[473,129],[261,269],[456,270],[259,268],[184,2],[481,271],[257,88],[258,88],[249,2],[178,2],[256,272],[255,273],[244,274],[319,66],[379,66],[395,2],[383,275],[382,2],[267,144],[188,2],[276,88],[450,156],[457,276],[78,88],[81,277],[82,278],[79,88],[80,2],[356,279],[351,280],[350,2],[349,281],[348,2],[455,282],[466,283],[468,284],[472,285],[554,286],[474,287],[478,288],[506,289],[482,289],[505,290],[484,291],[494,292],[495,293],[497,294],[501,295],[504,156],[503,2],[502,296],[384,297],[511,2],[529,298],[525,299],[538,300],[534,301],[536,301],[533,298],[532,302],[535,301],[528,303],[526,304],[531,305],[530,298],[537,2],[527,299],[524,2],[72,2],[73,2],[12,2],[13,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[4,2],[25,2],[29,2],[26,2],[27,2],[28,2],[30,2],[31,2],[32,2],[5,2],[33,2],[34,2],[35,2],[36,2],[6,2],[40,2],[37,2],[38,2],[39,2],[41,2],[7,2],[42,2],[47,2],[48,2],[43,2],[44,2],[45,2],[46,2],[8,2],[52,2],[49,2],[50,2],[51,2],[53,2],[9,2],[54,2],[55,2],[56,2],[59,2],[57,2],[58,2],[60,2],[61,2],[10,2],[62,2],[1,2],[63,2],[64,2],[11,2],[69,2],[66,2],[65,2],[70,2],[68,2],[71,2],[67,2],[101,306],[108,307],[100,306],[115,308],[92,309],[91,310],[114,296],[109,311],[112,312],[94,313],[93,314],[89,315],[88,316],[111,317],[90,318],[95,319],[96,2],[99,319],[86,2],[117,320],[116,319],[103,321],[104,322],[106,323],[102,324],[105,325],[110,296],[97,326],[98,327],[107,328],[87,329],[113,330]],"affectedFilesPendingEmit":[578,576,565,566,568,563,564,569,570,571,572,513,559,557,558,555,556,573,562,567,561,550,514,516,518,517,551,515,512]},"version":"5.5.3"} \ No newline at end of file +{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.string.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.object.d.ts","./node_modules/typescript/lib/lib.esnext.regexp.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/globals.global.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-BSNejiLS.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-B1q9aYT-.d.mts","./node_modules/@rolldown/pluginutils/dist/filter/index.d.mts","./node_modules/@rolldown/pluginutils/dist/index.d.mts","./node_modules/rolldown/dist/shared/define-config-BBz954-q.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-2i1T9YcF.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-CEmFsvJW.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/vite/node_modules/postcss/lib/previous-map.d.ts","./node_modules/vite/node_modules/postcss/lib/input.d.ts","./node_modules/vite/node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/vite/node_modules/postcss/lib/declaration.d.ts","./node_modules/vite/node_modules/postcss/lib/root.d.ts","./node_modules/vite/node_modules/postcss/lib/warning.d.ts","./node_modules/vite/node_modules/postcss/lib/lazy-result.d.ts","./node_modules/vite/node_modules/postcss/lib/no-work-result.d.ts","./node_modules/vite/node_modules/postcss/lib/processor.d.ts","./node_modules/vite/node_modules/postcss/lib/result.d.ts","./node_modules/vite/node_modules/postcss/lib/document.d.ts","./node_modules/vite/node_modules/postcss/lib/rule.d.ts","./node_modules/vite/node_modules/postcss/lib/node.d.ts","./node_modules/vite/node_modules/postcss/lib/comment.d.ts","./node_modules/vite/node_modules/postcss/lib/container.d.ts","./node_modules/vite/node_modules/postcss/lib/at-rule.d.ts","./node_modules/vite/node_modules/postcss/lib/list.d.ts","./node_modules/vite/node_modules/postcss/lib/postcss.d.ts","./node_modules/vite/node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.DtoKVV2s.d.ts","./node_modules/vitest/dist/chunks/plugin.d.DwFIiJ7i.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./vitest.config.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./lib/utils.ts","./__tests__/utils.test.ts","./lib/constants.ts","./hooks/use-agent-reputation.ts","./node_modules/lucide-react/dist/lucide-react.d.ts","./components/agents/agent-card.tsx","./hooks/use-chain-agents.ts","./hooks/use-tasks.ts","./hooks/use-task-history.ts","./node_modules/@make-software/csprclick-core-types/account.d.ts","./node_modules/@make-software/csprclick-core-types/actions.d.ts","./node_modules/@make-software/csprclick-core-types/customjwt.d.ts","./node_modules/@make-software/csprclick-core-types/events.d.ts","./node_modules/@make-software/csprclick-core-types/ledger.d.ts","./node_modules/@make-software/csprclick-core-types/messages.d.ts","./node_modules/@make-software/csprclick-core-types/metamask.d.ts","./node_modules/@make-software/csprclick-core-types/rpc.d.ts","./node_modules/@make-software/csprclick-core-types/settings.d.ts","./node_modules/@make-software/csprclick-core-types/torus.d.ts","./node_modules/@make-software/csprclick-core-types/walletconnect.d.ts","./node_modules/@make-software/csprclick-core-types/wallets.d.ts","./node_modules/@make-software/csprclick-core-types/w3aoidc.d.ts","./node_modules/@make-software/csprclick-core-types/transaction-status.d.ts","./node_modules/@make-software/csprclick-core-types/isdk.d.ts","./node_modules/@make-software/csprclick-core-types/index.d.ts","./node_modules/@make-software/csprclick-core-types/clickui.d.ts","./contexts/click-context.tsx","./hooks/use-wallet.ts","./__tests__/health.test.tsx","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./components/layout/sidebar.tsx","./components/layout/wallet-connect.tsx","./components/layout/global-search.tsx","./components/layout/header.tsx","./components/layout/app-shell.tsx","./components/wallet-provider.tsx","./components/providers.tsx","./app/layout.tsx","./app/page.tsx","./app/agents/page.tsx","./app/agents/[hash]/page.tsx","./app/builder/page.tsx","./components/tasks/task-creator.tsx","./app/dashboard/page.tsx","./app/payments/page.tsx","./app/register/page.tsx","./app/settings/page.tsx","./app/submit/page.tsx","./app/tasks/page.tsx","./components/payments/pay-agent.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5",{"version":"4af6b0c727b7a2896463d512fafd23634229adf69ac7c00e2ae15a09cb084fad","affectsGlobalScope":true},{"version":"9c00a480825408b6a24c63c1b71362232927247595d7c97659bc24dc68ae0757","affectsGlobalScope":true},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true},"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","a305ee2f90e34e9e70aba9a9e9a154ce20c4d5cd1499cd21b8dc3617e1e5c810","acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","2db0dd3aaa2ed285950273ce96ae8a450b45423aa9da2d10e194570f1233fa6b","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"e7be367719c613d580d4b27fdf8fe64c9736f48217f4b322c0d63b2971460918","affectsGlobalScope":true},"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36",{"version":"392eadc2af403dd10b4debfbc655c089a7fa6a9750caeb770cfb30051e55e848","affectsGlobalScope":true},"62f1c00d3d246e0e3cf0224f91e122d560428ec1ccc36bb51d4574a84f1dbad0","53f0960fdcc53d097918adfd8861ffbe0db989c56ffc16c052197bf115da5ed6",{"version":"662163e5327f260b23ca0a1a1ad8a74078aabb587c904fcb5ef518986987eaff","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"c48c503c6b3f63baf18257e9a87559b5602a4e960107c762586d2a6a62b64a18","affectsGlobalScope":true},"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","0364f8bb461d6e84252412d4e5590feda4eb582f77d47f7a024a7a9ff105dfdc","5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","d0ca5d7df114035258a9d01165be309371fcccf0cccd9d57b1453204686d1ed0",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"9a30b7fefd7f8abbca4828d481c61c18e40fe5ff107e113b1c1fcd2c8dcf2743","affectsGlobalScope":true},"173b6275a81ebdb283b180654890f46516c21199734fed01a773b1c168b8c45c","304f66274aa8119e8d65a49b1cff84cbf803def6afe1b2cc987386e9a9890e22","1b9adafe8a7fefaeaf9099a0e06f602903f6268438147b843a33a5233ac71745","98273274f2dbb79b0b2009b20f74eca4a7146a3447c912d580cd5d2d94a7ae30","c933f7ba4b201c98b14275fd11a14abb950178afd2074703250fe3654fc10cd2","2eaa31492906bc8525aff3c3ec2236e22d90b0dfeee77089f196cd0adf0b3e3b",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"8f5814f29dbaf8bacd1764aebdf1c8a6eb86381f6a188ddbac0fcbaab855ce52","a63d03de72adfb91777784015bd3b4125abd2f5ef867fc5a13920b5649e8f52b","d20e003f3d518a7c1f749dbe27c6ab5e3be7b3c905a48361b04a9557de4a6900",{"version":"1d4d78c8b23c9ddaaaa49485e6adc2ec01086dfe5d8d4d36ca4cdc98d2f7e74a","affectsGlobalScope":true},{"version":"44fc16356b81c0463cc7d7b2b35dcf324d8144136f5bc5ce73ced86f2b3475b5","affectsGlobalScope":true},"575fb200043b11b464db8e42cc64379c5fd322b6d787638e005b5ee98a64486d","6de2f225d942562733e231a695534b30039bdf1875b377bb7255881f0df8ede8","56249fd3ef1f6b90888e606f4ea648c43978ef43a7263aafad64f8d83cd3b8aa","139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","7b166975fdbd3b37afb64707b98bca88e46577bbc6c59871f9383a7df2daacd1","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","81505c54d7cad0009352eaa21bd923ab7cdee7ec3405357a54d9a5da033a2084","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","2ee1645e0df9d84467cfe1d67b0ad3003c2f387de55874d565094464ee6f2927",{"version":"071d4b4af5755e1a081aa3b785b5526d09276af5a50e4725dea26edd4e7deb31","affectsGlobalScope":true},{"version":"9cf780e96b687e4bdfd1907ed26a688c18b89797490a00598fa8b8ab683335dd","affectsGlobalScope":true},"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","9ae88ce9f73446c24b2d2452e993b676da1b31fca5ceb7276e7f36279f693ed1","e49d7625faff2a7842e4e7b9b197f972633fca685afcf6b4403400c97d087c36","b82c38abc53922b1b3670c3af6f333c21b735722a8f156e7d357a2da7c53a0a0",{"version":"b423f53647708043299ded4daa68d95c967a2ac30aa1437adc4442129d7d0a6c","affectsGlobalScope":true},{"version":"7245af181218216bacb01fbdf51095617a51661f20d77178c69a377e16fb69ed","affectsGlobalScope":true},"4f0fc7b7f54422bd97cfaf558ddb4bca86893839367b746a8f86b60ac7619673","4cdd8b6b51599180a387cc7c1c50f49eca5ce06595d781638fd0216520d98246","d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c",{"version":"8704423bf338bff381ebc951ed819935d0252d90cd6de7dffe5b0a5debb65d07","affectsGlobalScope":true},"7c6929fd7cbf38499b6a600b91c3b603d1d78395046dc3499b2b92d01418b94b",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","865a2612f5ec073dd48d454307ccabb04c48f8b96fda9940c5ebfe6b4b451f51","89e7fd23f6e6ced38596054161f5fb88737018909c6529c946cb349b74b95275","115b2ad73fa7d175cd71a5873d984c21593b2a022f1a2036cc39d9f53629e5dc","1be330b3a0b00590633f04c3b35db7fa618c9ee079258e2b24c137eb4ffcd728","bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027",{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true},"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369",{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true},"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b",{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true},"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023",{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true},"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","cd9304972e6d616197fb44fce00540a904f38b54306a1951b5dbeaf3c01ab5bd","77438e2c397a3db78407621cfc57241a305b310ddea2c185f1d555248297f587","120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","7715134a0cf07dd41a9da2895d708625a3a303a0385e355ecaaf0b8bfaef2550","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","e5c939d896565dcac0f6fbdbada11284e7728ef26a069561c09aa5aa4a788393","9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","dad97c99382889e9c7d1a9d8275500ff71235130fae9f8916fdbf3641d56e592","a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","b55eb9f72166093b5460d34b34f5d8699c968de3bc3fc696e40f2c93f2ebf650","71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f",{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true},"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","88e9caa9c5d2ba629240b5913842e7c57c5c0315383b8dc9d436ef2b60f1c391",{"version":"ddf68b3b62e49cf6fd93ba2351ad0fbbcf62ca2d5d7afc9f186114e4b481c3cd","affectsGlobalScope":true},"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","6ee598cdfdd0fa52039dca135b3dfff7b49035dc13292143e0a93843e3861967","27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","eb5acb58487367e502d994b57e2c58255d8241f481ea8efa8e79af23af3f41c2","9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","f1f4095f04343ad6e6825eba41eb50f1555685560dde164179a467e65c4a921c","35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49",{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true},"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0",{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true},"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9",{"version":"7c2e3c874c3e92ced85db270d5053e5a8ad14cefddb7d3b74dd641f232d31d5f","affectsGlobalScope":true},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651","c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d",{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true},"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","f2ff36fddc8fdbadde620cdfc653ee3e7b722649e1769a527c84a88aa91a76bf","638a22f8e16b31c37297483fa38cfc760ed309b16d4c606a7b4532f4394c9c0c","9394183f4c37b8591156f32e41223c9e0dd211eefe7499155d4cdf15268eaea8","7cd005825cded848f6aef39302c91906c828b56eb2a871f7ec2905be03c410ee","8f5dd83a487a147ef727ea1f134d3270feb6e5820c7cec2f3bea2b1896969987","ef4cf7840808d33d454407e836d7186000b25b5132d1e5e5d864a598541839fc","7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","c21183546a150db7c0619335e32af4fac9a633156a24c49985bd0c54ef93ae2e","6209d9e7e93217ab3ff8cef7357ed16a457d8419038de522dafae421bfeeeaa6","738aecb56bf52a994c4e3980f356255c5843b505c66ffa8a3142c8e13d30d2b2","e04b33dbc442d710225fdc64ad081a202f8b6ac8c6965a46d34fecf1ba3c2a9b","4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e",{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true},"94325c2597b60c34988a0b335b1b4e94ee758c9cc28fdb3d6837c2b5771d5638",{"version":"e50d04d261120f8f9d07e85698735d5b88f3a66bc395c08ce26c3d817d141a73","affectsGlobalScope":true},"27a65fc36588a883248464d29685939a70859d9133db601b696941f518793639","b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","7fa6fdc6eeeb3850e6b3166836f8c9199594c4f4bed3cee02cac0ca33d71894d","e53757f3e6688e8be16b36ccbeedc85637e607353fc67ff7b6665d6005aeaa12","88ba2660f5b024c7afd02ea700bc0c677687e17e34f0a94c3256ddb55e0f1c5d","7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4",{"version":"3175c8ea4a85dbdf859aee8d51056cdd7a9fb3135ad7d9eeba98fc797f407665","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","dd51e53752b310bd20c9b1a87bbf12b1fe2be7fe40f505b43199496481096275","a87be4662442b3feeffc331ecafe6b36cafd08727e2d7f2425a5099577e7fd18","cd4cd9220a1ba793bc935e76d8e5481c110a90d9868ae7866a182ee71cdb6abb","0a7fb8619b10bc05fd933ca9ac1c8b2ab2220be7a57b57565c3ac158595494ef","c4a5f91feb9c5a6b2a91089d959c38391b79a961db3b9cc73b8877d57ad7dcdc","90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","9970ef80d5414c25679f4be4feffcc51375c54b520df496a0871a7c89e3b65e5",{"version":"54f1fc376fb21a4df84164945bfad62d8c03f69f36f5fa64759bc8a5854d43d6","signature":"6570921ddc36c5d6dd1a401b12f0fd9dc2aa2ba58540a416f09fb4b8c0bcd3c6"},{"version":"ff1faaa149987ccc999b81364609c580eed025a593440e9a5252397be41f4706","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"40bd987a596ca9649a40eff9afb763697f711190762f3f54817b9d3f3fc32376","signature":"dcb547c88c840cf5915152fc11c37ecdf919919318747a8963c6dc73b5473617"},{"version":"7cf151bdc2f2b084015a01617e85de8c45eced91e9eb5d0efb8d460c9595ddab","signature":"e47ced082a344612aeb7dc1f7af60cefc67904c205e3196b3452b21144071b6e"},"acc9b958b822fe0a2da8d6377f7c25046f82a6bbcc2e948faaf727a7933bd58d",{"version":"75b914e24d5d3f5b538ecf095a6d3d61948eeb2ae24816bb4be6a1f11c9cb341","signature":"62db37258bc5c7e271df261fef3cc7b8dcff3bba592534b02ca36934d48d168a"},{"version":"f2cb832d7cb9087255a6216398040e10ec57264e89f82a852dd2e7940401d77c","signature":"f42ebf9472d165b329b9c9d97ce8a8a3c4f35009a7cde1c483f1723cfba744c9"},{"version":"c4994824de9afd3907ea02d30f39d53e9c3ccfcf7261fea22477bf566ce357a5","signature":"02fe0577f8bc68e50907c5f55b7daa1fcaac01369a672f7536577b0cf53dd752"},{"version":"a2e074987d15ae62813fc5ddba693bb8a1381e0e0a3bb6c60ba86bcbd8b35ed6","signature":"c33b785db80e1bcf7f8fa6a83d8f551e6a21781ca9d7d52288e777f9b64c1eac"},"882487459f426a31ac9082e70d42b717642aa9bd13fd0c5ca634d3a85d755040","5edf18cce52b115e524741ff84f2189d5967213dd60d4aa7fe93411afc1123ae","3f8ad662a60bb3a71ab635aa1eb639dd3aba0a343a91996dd2d187482902df47","f48a419a3322a7242d737dbf4624264f1513ede949100f4c0fe79ef22d8e38e1","37c60ea154ed0c29f179eff1444480ab1e93a2456e8e63ac0e0f22f4ab84af43","928c72b09d2272186e728852ac7ecbcff52f744bd9bb4425a82c4df7a381f35a","1f5c00e50ba23ff0d75e5c1139400166caeb3d76cf7ef30885481c09c9167fc2","1d69e402c7346e651e07113898fbf032b537132d01f71763c9e85c02591830c3","39c839539dac409dbfe29cd2d40375b20ee7cc894c995012b079a217da27b0af","58764421a0a271e70684c1a7c3e053a2f471eb019d6cd6bf08565adfc76b65f8","fa961e08b28e0a5f8d0038b0dda62e6d6a6263f59838de17b3c32eedbd326ab9","d915942a45da32c09bd631da1a1e2e9c01899f22bb07bb9c6bce78ec00d024bf","f1c1be2f4cbccd940f6d972ac914d91c7c1b44427ff3b657f9d9c1730fbf652c","57a0a2f564288560467424aa4f732ed9a00e8f08c57bb4b64b052610a3dc6912","26c8664563cb649bfd3860c785d33fe881049870bd273b4568b0114e28f3dc5f","1b29ebb66b44950e9e9dad57fcab3d2cf811b7c5c5c767aff7df5a1d5dbd899e","f83ac0c98918691eb6a08c04e237bbf26674a0f2bfd5f81a3b06c6ee6387c39e",{"version":"8e26dd6a847097d0328b79ac80894120137292eee440fa79fcd86eb5c6df4405","signature":"2e531131d20f0a4c76ec1df567a8b87e149c1faab624430d65aa6fddd5639d6c","affectsGlobalScope":true},{"version":"dcd42caf3c269950ca88adb92792b639d09d11e08d768cb426cf53325d7cf69a","signature":"55afa4d0e55397e58c9a36773f88c568e295f380bc50cbda8e6d97fdc07814c2"},{"version":"f89467376e930f4ace2181142a28df963aaaad571963ed25fa5fac4c837551d2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7",{"version":"9348ac95f9466907c443c14562c0626ff1f4baad689807796675c27eebd3d31c","signature":"1bec7d528744e42962cc694e22d04e8ed15287dc885be6829d5d71dd17844021"},{"version":"3e94a854a812113e818e559684501f56d1096f15a2c6c861130ea80647dccdb6","signature":"e1b5ab398a4010f141b5c99fbed362066480bcbc12a3775dfffc927e2685bcdb"},{"version":"69c26fa327a3f7d03855a73d80c1f4123d288a8d43f6feb11aa263f89edf79ca","signature":"94fc5de33d24ea5ae581765aa9704bccb1781187f90f5c00678df51d36a0f772"},{"version":"19b62065a89d1c8cbd9a3c49d3c06403b1eef4525669eef7807a810ba289c82b","signature":"1f536c4153db9b0ad7284f5966cff35e3c797c5067adbdcdd14b86660001cb9d"},{"version":"5d029fcb75228e58c445d9b9ff7ea969a392fabde7480d9b5b3fd5b11f0fdabc","signature":"e666e090702df36e9953c06c84778309d5783d1199a1451c205f715b50ae9fe5"},{"version":"9c0c2c3a7c7dd6e0f36d2e56fed2a967d6671f11d64f99ee08ab6aa09fa25403","signature":"ac779e4d56b9af723f679f9f4875728a25c29e21d066fb9c1cb23c6dcd052a90"},{"version":"74b25e834dace557f65606f485341ee9b2101cf55fc2704eb657b67b2c065ab7","signature":"6af4de77a13a46b7cf848e304c50e5da0dfac628cf008bb261810887682c677a"},{"version":"d5a94f8d70a741fde599b40a7a9432dfcb59000f4ba58fbe0533d38a0a7aba22","signature":"2e66fdffc8dc6d1387535d5137750f1a1138fa19d8c9c7e0c702ff76218bd560"},{"version":"fedd5bebf0cc3f691815eaf3f9c54287107ab4aa1c782a677be48247c150be3a","signature":"7b87720aae5dbfb749d597c437531239e4019502dc0e78633561735db617b6f3"},{"version":"34b0086eae8bd9ab5df7b10af22ddf079b8ad4f81f62ab35a327ad664abc16f6","signature":"30bf92459b2952107f34bbe1a40334113c6241bdf0320c4724035f8379700d93"},{"version":"d0e1b25174550fa5d5592d175f954a5c4333e24d65c6936b9bb999acfd3e7084","signature":"f41ec03286dff29d48f32db4c166a9db23c0088f2c4aebca35589e0f8dcc7aa1"},{"version":"0df84905d992fa2f6a1b7d2a959b6b6abfd6834194ae20071507d01e2cabfb55","signature":"2a897700826ae8301e811e36dc89e5bcc11973bbbd7fc54c09fedd92fe03f7c9"},{"version":"5fea89138ad17b6d649b3f1e29d25792d0650505ba9d01d829e2fd7fbbddec4e","signature":"82029637f49d64cbdeb80d1c8c59ee220df382e25928e791c8dd1005626f8c05"},{"version":"bda0fefa85ba27e69af861d3638d8a53e5d34ce54a581e57a5ac132feb6e2b06","signature":"7a4fe07bffc8b6ec1785aec2b011f454fc93828d90b9269ccdda995af85bf073"},{"version":"efb4dcef65f508dd74b893fe72a6989b65352b0405bbdb97f498a2a11aea00f3","signature":"d3e7c64dac397a064a82357f935f2342507ae7fe8f670acc768d61a2b4df96a3"},{"version":"f4a4195fd7f99f0ead15985de440b8ab57bfe55e2e85c9e4afe58b66e02d4cd0","signature":"f4ecb6ec2d112966e64eabc473e883cd21229cb069c907fb0ed446786add8188"},{"version":"ec56bbeb2d39f84ae13662ce7c6cfb3d27b141261297c92b54209f2e7583d0bc","signature":"14015613b6b5d535af589c95b5d2b0533b6db9e709fa964c5324b48ec6ffc1c8"},{"version":"98c5b1b156db1d6218a2f1be16324033b398797d7d969cf74f89c777f0b21a6f","signature":"ac959c320767fb4edd75162949cf2a3e5b5934478446b66efae4cb31d3d0f55f"},{"version":"63d55adb789b7dbf757158002777bfdae579d052f1c95b2a21d3b5adc5bc5dfc","signature":"0078116c0e25922860911af3973f73124e7b73d1583b50bdd0254590b081dc5d"},{"version":"db278bbfa592b95378baab77418cb70535f9aa25bf48678cde9d25ed4ba1ac41","signature":"21d832bd4c0554c6af1e053846074f0d0840ac9e56cf554117e164b50296fe3c"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"7e92d24b9651c4433c41ea71711a67b3f271877b632aa4d4cb113f8b4d74a1a5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"762341cd35fe2bfb72d871a89952f8511b54b91e62bd242954ad53969a34dcd2","affectsGlobalScope":true},{"version":"d98934d9b3b3d1221763733ae5ab952754af322b72046de3b311ab5f3b8bdcd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538"],"root":[507,508,603,[617,620],[622,625],[643,645],[649,673]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"fileIdsList":[[460,461,462,463,669],[669,671],[204,504,656,657,658,660,662,663,664,665,666,667,669,671,672],[460,461,462,463,671],[204,504,507,656,657,658,659,660,662,663,664,665,666,667,669,671],[204,614,669,671],[204,614,617,669,671],[204,484,494,617,619,620,621,644,669,671],[76,204,484,494,621,622,623,669,671],[76,204,619,621,669,671],[76,204,484,619,621,622,623,624,625,661,669,671],[204,502,505,648,653,655,669,671],[204,482,484,621,669,671],[76,204,617,619,621,644,669,671],[76,204,494,619,621,643,644,669,671],[204,484,619,621,623,669,671],[76,204,621,669,671],[76,204,619,621,624,625,661,669,671],[204,484,617,621,669,671],[76,204,649,652,669,671],[76,204,494,621,623,625,669,671],[204,621,650,651,669,671],[76,204,482,484,494,621,669,671],[204,617,619,621,644,669,671],[204,468,654,669,671],[76,204,619,621,624,644,669,671],[76,204,619,641,643,669,671],[76,204,641,642,669,671],[76,204,619,669,671],[76,204,619,622,669,671],[76,204,624,669,671],[204,669,671],[76,204,641,643,669,671],[204,615,616,669,671],[505,506,507,669,671],[626,669,671],[626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,669,671],[626,637,639,669,671],[527,669,671],[517,518,669,671],[83,669,671],[118,669,671],[119,124,153,669,671],[120,125,131,132,139,150,161,669,671],[120,121,131,139,669,671],[122,162,669,671],[123,124,132,140,669,671],[124,150,158,669,671],[125,127,131,139,669,671],[118,126,669,671],[127,128,669,671],[131,669,671],[129,131,669,671],[118,131,669,671],[131,132,133,150,161,669,671],[131,132,133,146,150,153,669,671],[116,119,166,669,671],[127,131,134,139,150,161,669,671],[131,132,134,135,139,150,158,161,669,671],[134,136,150,158,161,669,671],[83,84,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,669,671],[131,137,669,671],[138,161,166,669,671],[127,131,139,150,669,671],[140,669,671],[141,669,671],[118,142,669,671],[139,140,143,160,166,669,671],[144,669,671],[145,669,671],[131,146,147,669,671],[146,148,162,164,669,671],[119,131,150,151,152,153,669,671],[119,150,152,669,671],[150,151,669,671],[153,669,671],[154,669,671],[118,150,669,671],[131,156,157,669,671],[156,157,669,671],[124,139,150,158,669,671],[159,669,671],[139,160,669,671],[119,134,145,161,669,671],[124,162,669,671],[150,163,669,671],[138,164,669,671],[165,669,671],[119,124,131,133,142,150,161,164,166,669,671],[150,167,669,671],[76,172,174,669,671],[76,669,671],[76,172,173,669,671],[76,437,669,671],[76,80,171,455,500,669,671],[76,80,170,455,500,669,671],[74,75,669,671],[510,511,512,515,516,519,669,671],[589,669,671],[589,590,669,671],[515,573,574,669,671],[515,573,669,671],[573,669,671],[513,573,577,578,669,671],[513,573,577,669,671],[509,669,671],[513,514,669,671],[513,669,671],[513,514,570,594,669,671],[570,669,671],[513,516,570,571,572,669,671],[609,610,669,671],[609,610,611,612,669,671],[609,611,669,671],[609,669,671],[562,563,669,671],[458,669,671],[460,461,462,463,669,671],[407,469,470,669,671],[179,180,182,194,218,333,344,451,669,671],[182,213,214,215,217,451,669,671],[182,350,352,354,355,357,451,453,669,671],[182,216,253,451,669,671],[180,182,193,194,200,206,211,332,333,334,343,451,453,669,671],[451,669,671],[189,195,214,234,329,669,671],[182,669,671],[175,189,195,669,671],[361,669,671],[358,359,361,669,671],[358,360,451,669,671],[134,234,431,448,669,671],[134,305,308,324,329,448,669,671],[134,277,448,669,671],[337,669,671],[336,337,338,669,671],[336,669,671],[82,134,175,182,194,200,206,212,214,218,219,232,233,300,330,331,344,451,455,669,671],[179,182,216,253,350,351,356,451,503,669,671],[216,503,669,671],[179,233,402,451,503,669,671],[503,669,671],[182,216,217,503,669,671],[353,503,669,671],[219,332,335,342,669,671],[76,407,669,671],[145,189,204,669,671],[189,204,669,671],[76,274,669,671],[76,204,669,671],[76,195,204,407,669,671],[189,260,274,275,485,492,669,671],[259,486,487,488,489,491,669,671],[310,669,671],[310,311,669,671],[193,195,262,263,669,671],[195,269,270,669,671],[195,264,272,669,671],[269,669,671],[187,195,262,263,264,265,266,267,268,269,272,669,671],[195,262,269,270,271,273,669,671],[195,263,265,266,669,671],[263,265,268,270,669,671],[490,669,671],[195,669,671],[76,183,479,669,671],[76,161,669,671],[76,216,251,669,671],[76,216,344,669,671],[249,254,669,671],[76,250,457,669,671],[646,669,671],[76,80,134,170,171,455,499,669,671],[134,195,669,671],[134,194,199,280,297,339,340,344,399,401,451,452,669,671],[232,341,669,671],[455,669,671],[181,669,671],[76,186,189,404,420,422,669,671],[145,189,404,419,420,421,502,669,671],[413,414,415,416,417,418,669,671],[415,669,671],[419,669,671],[204,368,369,371,669,671],[76,195,362,363,364,365,370,669,671],[368,370,669,671],[366,669,671],[367,669,671],[76,204,250,457,669,671],[76,204,456,457,669,671],[76,204,457,669,671],[297,298,669,671],[298,669,671],[134,452,457,669,671],[327,669,671],[118,326,669,671],[189,195,201,203,305,318,322,324,401,404,440,441,448,452,669,671],[195,244,266,669,671],[305,316,319,324,669,671],[76,186,189,305,308,324,327,361,408,409,410,411,412,423,424,425,426,427,428,429,430,503,669,671],[186,189,214,305,312,313,314,317,318,669,671],[150,195,214,316,323,404,405,448,669,671],[320,669,671],[134,145,183,195,199,209,241,242,245,297,300,365,399,400,440,451,452,453,455,503,669,671],[186,187,189,669,671],[305,669,671],[118,214,241,242,299,300,301,302,303,304,452,669,671],[324,669,671],[118,188,189,199,203,239,305,312,313,314,315,316,319,320,321,322,323,441,669,671],[134,239,240,312,452,453,669,671],[214,242,297,300,305,401,452,669,671],[134,451,453,669,671],[134,150,448,452,453,669,671],[134,145,175,189,194,201,203,206,209,216,236,241,242,243,244,245,280,281,283,286,288,291,292,293,294,296,344,399,401,448,451,452,453,669,671],[134,150,669,671],[182,183,184,212,448,449,450,455,457,503,669,671],[179,180,451,669,671],[373,669,671],[134,150,161,191,357,361,362,363,364,365,371,372,503,669,671],[145,161,175,189,191,203,206,242,281,286,296,297,350,377,378,379,385,388,389,399,401,448,451,669,671],[206,212,219,232,242,300,451,669,671],[134,161,183,194,203,242,383,448,451,669,671],[403,669,671],[134,373,386,387,396,669,671],[448,451,669,671],[302,441,669,671],[203,241,344,457,669,671],[134,145,181,286,346,350,379,385,388,391,448,669,671],[134,219,232,350,392,669,671],[182,243,344,394,451,453,669,671],[134,161,365,451,669,671],[134,216,243,344,345,346,355,373,393,395,451,669,671],[82,134,241,398,455,457,669,671],[295,399,669,671],[134,145,189,192,194,195,201,203,209,218,219,232,242,245,281,283,293,296,297,344,377,378,379,380,382,384,399,401,448,457,669,671],[134,150,219,385,390,396,448,669,671],[222,223,224,225,226,227,228,229,230,231,669,671],[236,287,669,671],[289,669,671],[287,669,671],[289,290,669,671],[134,193,194,195,199,200,452,669,671],[134,145,181,183,201,205,241,244,245,279,399,448,453,455,457,669,671],[134,145,161,185,192,193,203,205,242,397,441,447,452,669,671],[312,669,671],[313,669,671],[195,206,440,669,671],[314,669,671],[188,669,671],[190,202,669,671],[134,190,194,201,669,671],[197,202,669,671],[198,669,671],[190,191,669,671],[190,246,669,671],[190,669,671],[192,236,285,669,671],[284,669,671],[189,191,192,669,671],[192,282,669,671],[189,191,669,671],[241,344,669,671],[440,669,671],[134,161,201,203,207,241,344,398,401,404,405,406,432,433,436,439,441,448,452,669,671],[255,258,260,261,274,275,669,671],[76,172,174,204,434,435,669,671],[76,172,174,204,434,435,438,669,671],[328,669,671],[214,235,240,241,305,306,307,308,309,311,324,325,327,330,398,401,451,453,669,671],[274,669,671],[134,279,448,669,671],[279,669,671],[134,201,247,276,278,280,398,448,455,457,669,671],[255,256,257,258,260,261,274,275,456,669,671],[82,134,145,161,190,191,203,209,241,242,245,344,396,397,399,448,451,452,455,669,671],[186,189,196,669,671],[240,242,374,377,669,671],[240,375,442,443,444,445,446,669,671],[134,236,451,669,671],[134,669,671],[239,324,669,671],[238,669,671],[240,293,669,671],[237,239,451,669,671],[134,185,240,374,375,376,448,451,452,669,671],[76,189,195,273,669,671],[76,187,669,671],[177,178,669,671],[76,183,669,671],[76,189,259,669,671],[76,82,241,245,455,457,669,671],[183,479,480,669,671],[76,254,669,671],[76,145,161,181,248,250,252,253,457,669,671],[189,216,452,669,671],[189,381,669,671],[76,132,134,145,179,181,254,352,455,456,669,671],[76,170,171,455,500,669,671],[76,77,78,79,80,669,671],[124,669,671],[347,348,349,669,671],[347,669,671],[76,80,134,136,145,169,170,171,172,174,175,181,209,214,391,419,453,454,457,500,669,671],[465,669,671],[467,669,671],[471,669,671],[647,669,671],[473,669,671],[475,476,477,669,671],[481,669,671],[81,459,464,466,468,472,474,478,482,484,494,495,497,501,502,503,504,669,671],[483,669,671],[493,669,671],[250,669,671],[496,669,671],[118,240,374,375,377,442,443,445,446,498,500,669,671],[169,669,671],[529,669,671],[524,526,529,669,671],[525,526,669,671],[526,529,533,669,671],[525,669,671],[526,529,669,671],[524,525,526,528,669,671],[524,526,669,671],[525,526,535,669,671],[150,169,669,671],[93,97,161,669,671],[93,150,161,669,671],[88,669,671],[90,93,158,161,669,671],[139,158,669,671],[88,169,669,671],[90,93,139,161,669,671],[85,86,89,92,119,131,150,161,669,671],[85,91,669,671],[89,93,119,153,161,169,669,671],[119,169,669,671],[109,119,169,669,671],[87,88,169,669,671],[93,669,671],[87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,669,671],[93,100,101,669,671],[91,93,101,102,669,671],[92,669,671],[85,88,93,669,671],[93,97,101,102,669,671],[97,669,671],[91,93,96,161,669,671],[85,90,91,93,97,100,669,671],[119,150,669,671],[88,93,109,119,166,169,669,671],[521,669,671],[131,132,134,135,136,139,150,158,161,167,169,521,522,523,530,531,532,534,536,538,539,540,541,561,565,566,567,568,569,669,671],[521,522,523,537,669,671],[557,669,671],[555,557,669,671],[546,554,555,556,558,560,669,671],[544,669,671],[547,552,557,560,669,671],[543,560,669,671],[547,548,551,552,553,560,669,671],[547,548,549,551,552,560,669,671],[544,545,546,547,548,552,553,554,556,557,558,560,669,671],[560,669,671],[542,544,545,546,547,548,549,551,552,553,554,555,556,557,558,559,669,671],[542,560,669,671],[547,549,550,552,553,560,669,671],[551,560,669,671],[552,553,557,560,669,671],[545,555,669,671],[523,669,671],[564,669,671],[530,540,569,669,671],[530,569,669,671],[596,669,671],[520,601,604,669,671],[510,513,515,516,571,572,573,575,576,579,580,592,593,595,604,669,671],[575,586,587,604,669,671],[575,576,583,604,669,671],[513,515,575,576,579,604,669,671],[538,669,671],[513,520,575,576,579,588,604,669,671],[569,599,601,669,671],[122,132,150,513,515,520,569,573,575,576,579,580,583,584,585,588,591,592,593,597,598,601,604,669,671],[538,575,576,579,604,669,671],[575,586,587,588,604,669,671],[538,575,580,581,582,604,669,671],[122,132,150,513,515,520,538,569,573,575,576,579,580,581,582,583,584,585,586,587,588,591,592,593,597,598,599,600,601,604,669,671],[510,513,515,520,538,573,575,576,579,580,581,582,583,584,586,587,588,591,604,605,606,607,608,613,669,671],[513,515,575,576,579,580,586,587,588,604,606,669,671],[141,204,602,669,671]],"referencedMap":[[671,1],[672,2],[673,3],[669,4],[507,2],[670,5],[645,6],[618,7],[659,8],[658,9],[660,10],[662,11],[656,12],[657,13],[663,14],[664,15],[665,16],[666,17],[667,18],[622,19],[653,20],[651,21],[652,22],[649,23],[650,24],[668,14],[655,25],[661,26],[654,27],[643,28],[620,29],[623,30],[625,31],[624,32],[644,33],[619,32],[617,34],[508,35],[626,2],[627,2],[642,2],[628,2],[629,36],[641,37],[640,38],[630,36],[631,36],[632,2],[633,2],[634,2],[635,2],[639,2],[638,2],[636,36],[637,2],[352,2],[525,2],[527,2],[528,39],[512,2],[519,40],[517,2],[674,2],[675,2],[676,2],[83,41],[84,41],[118,42],[119,43],[120,44],[121,45],[122,46],[123,47],[124,48],[125,49],[126,50],[127,51],[128,51],[130,52],[129,53],[131,54],[132,55],[133,56],[117,57],[168,2],[134,58],[135,59],[136,60],[169,61],[137,62],[138,63],[139,64],[140,65],[141,66],[142,67],[143,68],[144,69],[145,70],[146,71],[147,71],[148,72],[149,2],[150,73],[152,74],[151,75],[153,76],[154,77],[155,78],[156,79],[157,80],[158,81],[159,82],[160,83],[161,84],[162,85],[163,86],[164,87],[165,88],[166,89],[167,90],[173,91],[437,92],[174,93],[172,92],[438,94],[170,95],[435,2],[171,96],[74,2],[76,97],[434,92],[204,92],[520,98],[590,99],[591,100],[589,2],[513,2],[575,101],[574,102],[586,101],[577,103],[579,104],[598,104],[578,105],[510,106],[509,2],[515,107],[516,108],[595,109],[571,110],[573,111],[594,2],[592,110],[572,2],[514,108],[570,2],[518,2],[615,2],[75,2],[611,112],[613,113],[612,114],[610,115],[609,2],[562,2],[564,116],[563,2],[621,92],[459,117],[464,118],[471,119],[454,120],[208,2],[216,121],[356,122],[359,123],[331,2],[344,124],[351,125],[233,2],[333,2],[214,2],[330,126],[376,127],[215,2],[206,128],[358,129],[360,130],[361,131],[432,132],[325,133],[278,134],[338,135],[339,136],[337,137],[336,2],[332,138],[357,139],[217,140],[402,2],[403,141],[244,142],[218,143],[245,142],[281,142],[184,142],[354,144],[353,2],[343,145],[449,2],[193,2],[470,146],[410,147],[411,148],[407,149],[488,2],[308,2],[412,150],[408,151],[493,152],[492,153],[487,2],[259,2],[311,154],[310,2],[486,155],[409,92],[264,156],[271,157],[273,158],[263,2],[268,159],[270,160],[272,161],[267,162],[265,2],[269,163],[489,2],[485,2],[491,164],[490,2],[262,165],[480,166],[483,167],[252,168],[251,169],[250,170],[496,92],[249,171],[238,2],[498,2],[647,172],[646,2],[499,92],[500,173],[176,2],[340,174],[341,175],[342,176],[180,2],[345,2],[200,177],[175,2],[424,92],[182,178],[423,179],[422,180],[413,2],[414,2],[421,2],[416,2],[419,181],[415,2],[417,182],[420,183],[418,182],[213,2],[210,2],[211,142],[365,2],[370,184],[371,185],[369,186],[367,187],[368,188],[363,2],[430,150],[205,150],[458,189],[465,190],[469,191],[299,192],[298,2],[293,2],[445,193],[453,194],[326,195],[327,196],[405,197],[315,2],[428,198],[303,92],[320,199],[431,200],[316,2],[319,201],[317,2],[429,202],[426,203],[425,2],[427,2],[323,2],[401,204],[188,205],[301,206],[305,207],[321,208],[324,209],[313,210],[306,211],[452,212],[379,213],[297,214],[185,215],[451,216],[181,217],[372,218],[364,2],[373,219],[390,220],[362,2],[389,221],[82,2],[384,222],[209,2],[404,223],[380,2],[194,2],[196,2],[335,2],[388,224],[212,2],[236,225],[322,226],[242,227],[302,2],[387,2],[366,2],[392,228],[393,229],[334,2],[395,230],[397,231],[396,232],[346,2],[386,215],[399,233],[296,234],[385,235],[391,236],[221,2],[225,2],[224,2],[223,2],[228,2],[222,2],[231,2],[230,2],[227,2],[226,2],[229,2],[232,237],[220,2],[288,238],[287,2],[292,239],[289,240],[291,241],[294,239],[290,240],[201,242],[280,243],[448,244],[446,2],[475,245],[477,246],[441,247],[476,248],[189,249],[186,249],[219,2],[203,250],[202,251],[198,252],[199,253],[207,254],[235,254],[246,254],[282,255],[247,255],[191,256],[190,2],[286,257],[285,258],[284,259],[283,260],[192,261],[433,262],[234,263],[440,264],[406,265],[436,266],[439,267],[329,268],[328,269],[309,270],[295,271],[277,272],[279,273],[276,274],[398,275],[300,2],[463,2],[197,276],[400,277],[447,278],[307,2],[237,279],[314,280],[312,281],[239,282],[374,283],[442,2],[240,284],[375,284],[461,2],[460,2],[462,2],[444,2],[443,2],[377,285],[304,2],[274,286],[195,287],[253,2],[179,288],[241,2],[467,92],[178,2],[479,289],[261,92],[473,150],[260,290],[456,291],[258,289],[183,2],[481,292],[256,92],[257,92],[248,2],[177,2],[255,293],[254,294],[243,295],[318,70],[378,70],[394,2],[382,296],[381,2],[266,165],[187,2],[275,92],[450,177],[457,297],[77,92],[80,298],[81,299],[78,92],[79,2],[355,300],[350,301],[349,2],[348,302],[347,2],[455,303],[466,304],[468,305],[472,306],[648,307],[474,308],[478,309],[506,310],[482,310],[505,311],[484,312],[494,313],[495,314],[497,315],[501,316],[504,177],[503,2],[502,317],[567,318],[530,319],[531,320],[534,321],[526,322],[533,323],[529,324],[524,2],[535,325],[536,326],[383,327],[542,2],[616,2],[587,2],[511,2],[72,2],[73,2],[12,2],[13,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[4,2],[25,2],[29,2],[26,2],[27,2],[28,2],[30,2],[31,2],[32,2],[5,2],[33,2],[34,2],[35,2],[36,2],[6,2],[40,2],[37,2],[38,2],[39,2],[41,2],[7,2],[42,2],[47,2],[48,2],[43,2],[44,2],[45,2],[46,2],[8,2],[52,2],[49,2],[50,2],[51,2],[53,2],[9,2],[54,2],[55,2],[56,2],[59,2],[57,2],[58,2],[60,2],[61,2],[10,2],[62,2],[1,2],[63,2],[64,2],[11,2],[69,2],[66,2],[65,2],[70,2],[68,2],[71,2],[67,2],[100,328],[107,329],[99,328],[114,330],[91,331],[90,332],[113,317],[108,333],[111,334],[93,335],[92,336],[88,337],[87,338],[110,339],[89,340],[94,341],[95,2],[98,341],[85,2],[116,342],[115,341],[102,343],[103,344],[105,345],[101,346],[104,347],[109,317],[96,348],[97,349],[106,350],[86,351],[112,352],[522,353],[569,354],[538,355],[558,356],[556,357],[557,358],[545,359],[546,357],[553,360],[544,361],[549,362],[559,2],[550,363],[555,364],[561,365],[560,366],[543,367],[551,368],[552,369],[547,370],[554,356],[548,371],[523,353],[521,2],[537,372],[568,2],[566,2],[539,2],[565,373],[532,374],[541,2],[540,375],[597,376],[602,377],[596,378],[588,379],[584,380],[580,381],[593,2],[581,103],[607,382],[604,383],[600,384],[599,385],[582,386],[606,387],[576,2],[583,388],[601,389],[614,390],[608,391],[605,2],[585,2],[603,392]],"affectedFilesPendingEmit":[673,670,645,618,659,658,660,662,656,657,663,664,665,666,667,622,653,651,652,649,650,668,655,661,654,643,620,623,625,624,644,619,617,603]},"version":"5.5.3"} \ No newline at end of file