@oracle-agent/oracle 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/README.md +13 -498
  2. package/bin/oracle.mjs +25 -0
  3. package/package.json +16 -61
  4. package/SECURITY.md +0 -114
  5. package/SETUP.md +0 -316
  6. package/artifacts/inscription/oracle-was-here-preview.png +0 -0
  7. package/artifacts/inscription/oracle-was-here.svg +0 -1
  8. package/artifacts/specialist-packs/oracle-full-crypto.json +0 -295
  9. package/dist/action-receipts.mjs +0 -1
  10. package/dist/action-semantics.mjs +0 -1
  11. package/dist/address-book.mjs +0 -2
  12. package/dist/bin/desk-server.mjs +0 -14
  13. package/dist/bin/oracle-data-mcp.mjs +0 -8
  14. package/dist/bin/oracle-init.mjs +0 -24
  15. package/dist/bin/oracle-public-server.mjs +0 -5
  16. package/dist/bin/oracle-route.mjs +0 -22
  17. package/dist/bin/oracle-scan.mjs +0 -18
  18. package/dist/bin/oracle-upgrade.mjs +0 -21
  19. package/dist/bin/oracle.mjs +0 -68
  20. package/dist/chains.mjs +0 -1
  21. package/dist/cli/commands/auth.mjs +0 -16
  22. package/dist/cli/commands/bootstrap.mjs +0 -18
  23. package/dist/cli/commands/chain.mjs +0 -21
  24. package/dist/cli/commands/chat.mjs +0 -35
  25. package/dist/cli/commands/credential.mjs +0 -1
  26. package/dist/cli/commands/data-mcp.mjs +0 -2
  27. package/dist/cli/commands/data.mjs +0 -12
  28. package/dist/cli/commands/doctor.mjs +0 -5
  29. package/dist/cli/commands/gate.mjs +0 -13
  30. package/dist/cli/commands/help.mjs +0 -1
  31. package/dist/cli/commands/init.mjs +0 -3
  32. package/dist/cli/commands/mcp.mjs +0 -33
  33. package/dist/cli/commands/model.mjs +0 -44
  34. package/dist/cli/commands/prepare.mjs +0 -2
  35. package/dist/cli/commands/public.mjs +0 -3
  36. package/dist/cli/commands/route.mjs +0 -2
  37. package/dist/cli/commands/runner.mjs +0 -1
  38. package/dist/cli/commands/scan.mjs +0 -2
  39. package/dist/cli/commands/setup.mjs +0 -34
  40. package/dist/cli/commands/sign.mjs +0 -4
  41. package/dist/cli/commands/signer.mjs +0 -1
  42. package/dist/cli/commands/upgrade.mjs +0 -2
  43. package/dist/cli/commands/vault.mjs +0 -1
  44. package/dist/cli/commands/version.mjs +0 -2
  45. package/dist/data/desk-data.mjs +0 -12
  46. package/dist/index.mjs +0 -17
  47. package/dist/nft-gas-war-guard.mjs +0 -1
  48. package/dist/onboarding/harness-configs.mjs +0 -4
  49. package/dist/portfolio-risk.mjs +0 -1
  50. package/dist/prepare-envelope.mjs +0 -1
  51. package/dist/public-control/policy-schema.mjs +0 -1
  52. package/dist/router/index.mjs +0 -2
  53. package/dist/scanner/index.mjs +0 -4
  54. package/dist/signals/index.mjs +0 -1
  55. package/dist/watch-preferences.mjs +0 -1
  56. package/public/agent-connect/app.js +0 -84
  57. package/public/agent-connect/index.html +0 -83
  58. package/public/agent-connect/styles.css +0 -70
  59. package/public/index.html +0 -12
  60. package/public/oracle-console/app.js +0 -272
  61. package/public/oracle-console/bitcoin-wallets.js +0 -206
  62. package/public/oracle-console/index.html +0 -91
  63. package/public/oracle-console/styles.css +0 -239
  64. package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
  65. package/public/oracle-splash/assets/hero/orb.avif +0 -0
  66. package/public/oracle-splash/assets/hero/orb.webm +0 -0
  67. package/public/oracle-splash/assets/llms/claude.svg +0 -1
  68. package/public/oracle-splash/assets/llms/codex-icon.svg +0 -1
  69. package/public/oracle-splash/assets/llms/codex.svg +0 -1
  70. package/public/oracle-splash/assets/llms/cursor-icon.svg +0 -12
  71. package/public/oracle-splash/assets/llms/cursor.svg +0 -17
  72. package/public/oracle-splash/assets/llms/deepseek.svg +0 -1
  73. package/public/oracle-splash/assets/llms/gemini-icon.svg +0 -1
  74. package/public/oracle-splash/assets/llms/gemini.svg +0 -1
  75. package/public/oracle-splash/assets/llms/grok.svg +0 -8
  76. package/public/oracle-splash/assets/llms/hermes.png +0 -0
  77. package/public/oracle-splash/assets/llms/kimi-icon.svg +0 -1
  78. package/public/oracle-splash/assets/llms/kimi.svg +0 -1
  79. package/public/oracle-splash/assets/llms/manus.svg +0 -18
  80. package/public/oracle-splash/assets/llms/openclaw.svg +0 -22
  81. package/public/oracle-splash/assets/llms/perplexity.svg +0 -1
  82. package/public/oracle-splash/assets/llms/qwen.svg +0 -1
  83. package/public/oracle-splash/assets/llms/windsurf.svg +0 -1
  84. package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
  85. package/public/oracle-splash/assets/protocols/across.png +0 -0
  86. package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
  87. package/public/oracle-splash/assets/protocols/balancer.png +0 -0
  88. package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
  89. package/public/oracle-splash/assets/protocols/curve.png +0 -0
  90. package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
  91. package/public/oracle-splash/assets/protocols/felix.png +0 -0
  92. package/public/oracle-splash/assets/protocols/gmx.png +0 -0
  93. package/public/oracle-splash/assets/protocols/hyena.png +0 -0
  94. package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
  95. package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
  96. package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
  97. package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
  98. package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
  99. package/public/oracle-splash/assets/protocols/lfj.png +0 -0
  100. package/public/oracle-splash/assets/protocols/lifi.png +0 -0
  101. package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
  102. package/public/oracle-splash/assets/protocols/morpho.png +0 -0
  103. package/public/oracle-splash/assets/protocols/odos.png +0 -0
  104. package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
  105. package/public/oracle-splash/assets/protocols/opensea.png +0 -0
  106. package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
  107. package/public/oracle-splash/assets/protocols/paragon.png +0 -0
  108. package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
  109. package/public/oracle-splash/assets/protocols/pendle.png +0 -0
  110. package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
  111. package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
  112. package/public/oracle-splash/assets/protocols/relay.png +0 -0
  113. package/public/oracle-splash/assets/protocols/stargate.png +0 -0
  114. package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
  115. package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
  116. package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
  117. package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
  118. package/public/oracle-splash/assets/wordmarks/across-icon.webp +0 -0
  119. package/public/oracle-splash/assets/wordmarks/across.svg +0 -4
  120. package/public/oracle-splash/assets/wordmarks/aerodrome.svg +0 -23
  121. package/public/oracle-splash/assets/wordmarks/balancer.svg +0 -3
  122. package/public/oracle-splash/assets/wordmarks/cowswap.svg +0 -1
  123. package/public/oracle-splash/assets/wordmarks/curve.png +0 -0
  124. package/public/oracle-splash/assets/wordmarks/gmx.svg +0 -13
  125. package/public/oracle-splash/assets/wordmarks/hop-icon.webp +0 -0
  126. package/public/oracle-splash/assets/wordmarks/hyena.svg +0 -7
  127. package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +0 -21
  128. package/public/oracle-splash/assets/wordmarks/hyperswap.svg +0 -13
  129. package/public/oracle-splash/assets/wordmarks/jupiter.svg +0 -35
  130. package/public/oracle-splash/assets/wordmarks/kinetiq.svg +0 -1
  131. package/public/oracle-splash/assets/wordmarks/lfj.webp +0 -0
  132. package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
  133. package/public/oracle-splash/assets/wordmarks/magic-eden.svg +0 -1
  134. package/public/oracle-splash/assets/wordmarks/markets.svg +0 -1
  135. package/public/oracle-splash/assets/wordmarks/morpho.svg +0 -1
  136. package/public/oracle-splash/assets/wordmarks/odos.svg +0 -3
  137. package/public/oracle-splash/assets/wordmarks/oneinch-icon.webp +0 -0
  138. package/public/oracle-splash/assets/wordmarks/oneinch.svg +0 -6
  139. package/public/oracle-splash/assets/wordmarks/opensea-icon.svg +0 -17
  140. package/public/oracle-splash/assets/wordmarks/opensea.svg +0 -1
  141. package/public/oracle-splash/assets/wordmarks/outcome.svg +0 -16
  142. package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +0 -18
  143. package/public/oracle-splash/assets/wordmarks/paragon.svg +0 -9
  144. package/public/oracle-splash/assets/wordmarks/paraswap.svg +0 -16
  145. package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
  146. package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
  147. package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
  148. package/public/oracle-splash/assets/wordmarks/relay.svg +0 -8
  149. package/public/oracle-splash/assets/wordmarks/satflow-icon.png +0 -0
  150. package/public/oracle-splash/assets/wordmarks/stargate-icon.webp +0 -0
  151. package/public/oracle-splash/assets/wordmarks/stargate.svg +0 -15
  152. package/public/oracle-splash/assets/wordmarks/uniswap.svg +0 -18
  153. package/public/oracle-splash/assets/wordmarks/velodrome.svg +0 -84
  154. package/public/oracle-splash/assets/wordmarks/xyz.svg +0 -12
  155. package/public/oracle-splash/assets/wordmarks/zerox-icon.webp +0 -0
  156. package/public/oracle-splash/brand/aave.webp +0 -0
  157. package/public/oracle-splash/brand/aavev2.webp +0 -0
  158. package/public/oracle-splash/brand/aborean.webp +0 -0
  159. package/public/oracle-splash/brand/across.webp +0 -0
  160. package/public/oracle-splash/brand/aerodrome.webp +0 -0
  161. package/public/oracle-splash/brand/afi.webp +0 -0
  162. package/public/oracle-splash/brand/arcus.webp +0 -0
  163. package/public/oracle-splash/brand/aster.webp +0 -0
  164. package/public/oracle-splash/brand/avant.webp +0 -0
  165. package/public/oracle-splash/brand/balancer.webp +0 -0
  166. package/public/oracle-splash/brand/beefy.webp +0 -0
  167. package/public/oracle-splash/brand/benqi.webp +0 -0
  168. package/public/oracle-splash/brand/bestinslot.ico +0 -0
  169. package/public/oracle-splash/brand/bitfi.webp +0 -0
  170. package/public/oracle-splash/brand/bonkswap.webp +0 -0
  171. package/public/oracle-splash/brand/bouncebit.webp +0 -0
  172. package/public/oracle-splash/brand/camelot.webp +0 -0
  173. package/public/oracle-splash/brand/compound.webp +0 -0
  174. package/public/oracle-splash/brand/concrete.webp +0 -0
  175. package/public/oracle-splash/brand/cow.webp +0 -0
  176. package/public/oracle-splash/brand/curve.webp +0 -0
  177. package/public/oracle-splash/brand/derive.webp +0 -0
  178. package/public/oracle-splash/brand/dolomite.webp +0 -0
  179. package/public/oracle-splash/brand/eigenlayer.webp +0 -0
  180. package/public/oracle-splash/brand/ekubo.webp +0 -0
  181. package/public/oracle-splash/brand/ethena.webp +0 -0
  182. package/public/oracle-splash/brand/etherfi.webp +0 -0
  183. package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
  184. package/public/oracle-splash/brand/felix.webp +0 -0
  185. package/public/oracle-splash/brand/fluid.webp +0 -0
  186. package/public/oracle-splash/brand/fluxbeam.webp +0 -0
  187. package/public/oracle-splash/brand/folks.webp +0 -0
  188. package/public/oracle-splash/brand/fortyacres.webp +0 -0
  189. package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
  190. package/public/oracle-splash/brand/gassss.webp +0 -0
  191. package/public/oracle-splash/brand/gmx.webp +0 -0
  192. package/public/oracle-splash/brand/harmonix.webp +0 -0
  193. package/public/oracle-splash/brand/hlorderbook.webp +0 -0
  194. package/public/oracle-splash/brand/hlp.webp +0 -0
  195. package/public/oracle-splash/brand/hop.webp +0 -0
  196. package/public/oracle-splash/brand/hyperbeat.webp +0 -0
  197. package/public/oracle-splash/brand/hyperlend.webp +0 -0
  198. package/public/oracle-splash/brand/hyperliquid.webp +0 -0
  199. package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
  200. package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
  201. package/public/oracle-splash/brand/hyperswap.webp +0 -0
  202. package/public/oracle-splash/brand/hypha.webp +0 -0
  203. package/public/oracle-splash/brand/joedex.webp +0 -0
  204. package/public/oracle-splash/brand/jupiter.webp +0 -0
  205. package/public/oracle-splash/brand/kelp.webp +0 -0
  206. package/public/oracle-splash/brand/kinetiq.webp +0 -0
  207. package/public/oracle-splash/brand/kmhype.webp +0 -0
  208. package/public/oracle-splash/brand/kona.webp +0 -0
  209. package/public/oracle-splash/brand/konalend.webp +0 -0
  210. package/public/oracle-splash/brand/lfj.webp +0 -0
  211. package/public/oracle-splash/brand/lido.webp +0 -0
  212. package/public/oracle-splash/brand/lifi.webp +0 -0
  213. package/public/oracle-splash/brand/lighter.webp +0 -0
  214. package/public/oracle-splash/brand/lista.webp +0 -0
  215. package/public/oracle-splash/brand/loopedhype.webp +0 -0
  216. package/public/oracle-splash/brand/lorenzo.webp +0 -0
  217. package/public/oracle-splash/brand/magic-eden.webp +0 -0
  218. package/public/oracle-splash/brand/magiceden.webp +0 -0
  219. package/public/oracle-splash/brand/mempool.png +0 -0
  220. package/public/oracle-splash/brand/meteora.webp +0 -0
  221. package/public/oracle-splash/brand/morpho.webp +0 -0
  222. package/public/oracle-splash/brand/myriad.webp +0 -0
  223. package/public/oracle-splash/brand/noxa.webp +0 -0
  224. package/public/oracle-splash/brand/odos.webp +0 -0
  225. package/public/oracle-splash/brand/oneinch.webp +0 -0
  226. package/public/oracle-splash/brand/openbook.webp +0 -0
  227. package/public/oracle-splash/brand/opensea.webp +0 -0
  228. package/public/oracle-splash/brand/orca.webp +0 -0
  229. package/public/oracle-splash/brand/ordinals.png +0 -0
  230. package/public/oracle-splash/brand/ostium.webp +0 -0
  231. package/public/oracle-splash/brand/pancakeswap.webp +0 -0
  232. package/public/oracle-splash/brand/pendle.webp +0 -0
  233. package/public/oracle-splash/brand/perena.webp +0 -0
  234. package/public/oracle-splash/brand/pharaoh.webp +0 -0
  235. package/public/oracle-splash/brand/phoenix.webp +0 -0
  236. package/public/oracle-splash/brand/polymarket.webp +0 -0
  237. package/public/oracle-splash/brand/polynomial.webp +0 -0
  238. package/public/oracle-splash/brand/projectx.webp +0 -0
  239. package/public/oracle-splash/brand/pumpfun.webp +0 -0
  240. package/public/oracle-splash/brand/quickswap.webp +0 -0
  241. package/public/oracle-splash/brand/rain.webp +0 -0
  242. package/public/oracle-splash/brand/raydium.webp +0 -0
  243. package/public/oracle-splash/brand/relay.webp +0 -0
  244. package/public/oracle-splash/brand/rocketpool.webp +0 -0
  245. package/public/oracle-splash/brand/saber.webp +0 -0
  246. package/public/oracle-splash/brand/sakuraswap.webp +0 -0
  247. package/public/oracle-splash/brand/sanctum.webp +0 -0
  248. package/public/oracle-splash/brand/satflow.png +0 -0
  249. package/public/oracle-splash/brand/sierra.webp +0 -0
  250. package/public/oracle-splash/brand/sky.webp +0 -0
  251. package/public/oracle-splash/brand/solv.webp +0 -0
  252. package/public/oracle-splash/brand/spark.webp +0 -0
  253. package/public/oracle-splash/brand/sparksavings.webp +0 -0
  254. package/public/oracle-splash/brand/sphere.webp +0 -0
  255. package/public/oracle-splash/brand/ssv.webp +0 -0
  256. package/public/oracle-splash/brand/stabble.webp +0 -0
  257. package/public/oracle-splash/brand/stableswap.webp +0 -0
  258. package/public/oracle-splash/brand/stakewise.webp +0 -0
  259. package/public/oracle-splash/brand/stargate.webp +0 -0
  260. package/public/oracle-splash/brand/sthype.webp +0 -0
  261. package/public/oracle-splash/brand/sushiswap.webp +0 -0
  262. package/public/oracle-splash/brand/unisat.png +0 -0
  263. package/public/oracle-splash/brand/uniswap.webp +0 -0
  264. package/public/oracle-splash/brand/uniswapv2.webp +0 -0
  265. package/public/oracle-splash/brand/uniswapv4.webp +0 -0
  266. package/public/oracle-splash/brand/unit.webp +0 -0
  267. package/public/oracle-splash/brand/velodrome.webp +0 -0
  268. package/public/oracle-splash/brand/velora.webp +0 -0
  269. package/public/oracle-splash/brand/venus.webp +0 -0
  270. package/public/oracle-splash/brand/wbeth.webp +0 -0
  271. package/public/oracle-splash/brand/xsy.webp +0 -0
  272. package/public/oracle-splash/brand/yieldyak.webp +0 -0
  273. package/public/oracle-splash/brand/zerobase.webp +0 -0
  274. package/public/oracle-splash/brand/zerox.webp +0 -0
  275. package/public/oracle-splash/favicon.ico +0 -0
  276. package/public/oracle-splash/favicon.svg +0 -6
  277. package/public/oracle-splash/index.html +0 -1568
  278. package/public/oracle-splash/mesh-graph.png +0 -0
  279. package/public/oracle-splash/mesh-graph.svg +0 -216
package/SECURITY.md DELETED
@@ -1,114 +0,0 @@
1
- # Security Policy
2
-
3
- ## Reporting a vulnerability
4
-
5
- **Do not open a public issue for a live exploit.**
6
-
7
- Email **security@demi.la** with:
8
-
9
- - what the issue is
10
- - how to reproduce it
11
- - the impact you believe it has
12
- - whether funds are at risk right now
13
-
14
- You'll get an acknowledgement within 72 hours. If funds are actively at risk,
15
- say so in the subject line and we'll treat it as urgent.
16
-
17
- Please give us a reasonable window to ship a fix before public disclosure. We
18
- will credit you unless you'd rather stay anonymous.
19
-
20
- ## Scope
21
-
22
- In scope:
23
-
24
- - custody-boundary escapes (public code reaching a signer or key material)
25
- - destination-allowlist bypasses
26
- - slippage/minimum-output guard bypasses
27
- - grant forgery, replay, or scope escalation
28
- - route/vault/order attestation forgery
29
- - secret leakage through an API response or log
30
- - holder-gate bypass, challenge replay, or cross-user data access in an official
31
- hosted beta
32
- - Buzz capability forgery or audit-chain tampering
33
-
34
- Out of scope:
35
-
36
- - third-party provider outages and their rate limits
37
- - economic risk inherent to a protocol you chose to trade
38
- - issues that require the operator's own machine to already be compromised
39
- - deployment hardening for an operator's separate private execution service
40
-
41
- ## Threat model
42
-
43
- Oracle assumes the language model can be wrong or adversarially steered. The
44
- model is treated as an untrusted proposer.
45
-
46
- Consequences of that assumption, which are the invariants worth attacking:
47
-
48
- 1. **The public package never holds a key.** Signing happens in the user's
49
- wallet. Source-only operator modules are excluded from public entrypoints and
50
- the npm artifact.
51
- 2. **Model output is not authorization.** A grant is authorization, and a grant
52
- is signed by the owner, scoped, and expiring.
53
- 3. **Destinations are allowlisted per chain and fail closed.** An empty allowlist
54
- refuses everything. It never means "allow anything."
55
- 4. **Model-authored metadata is not trusted for routing.** Dynamic execution
56
- targets require an attestation minted inside the trusted boundary.
57
- 5. **Guards are recomputed at sign and broadcast time**, not just at quote time,
58
- because a stale minimum is not a minimum.
59
- 6. **The shipped public HTTP server is not a holder-authentication service.** It
60
- is loopback-only and rate limited, but unauthenticated. A hosted Locals beta
61
- needs a separate server-side ownership gate and per-user isolation.
62
-
63
- If you find a path where model-authored text becomes an authorized on-chain
64
- action without an owner signature and a policy check, that is the bug we most
65
- want to hear about.
66
-
67
- ## Enforcement in CI
68
-
69
- `test/custody-boundary.test.mjs` walks the public import graph, and
70
- `test/public-release-hardening.test.mjs` inspects the packed npm artifact. The
71
- build fails if either public surface reaches wallet key material or a house
72
- signer. The secret scanner also checks current files and Git history. CI runs
73
- the boundary suite on every push and pull request.
74
-
75
- A security claim that isn't enforced by a test is just a comment.
76
-
77
- ## Hosted and operator boundaries
78
-
79
- These are not public-package custody holes. They are operator constraints that
80
- still apply after the public boundary hardening:
81
-
82
- 1. **Owner-local signer modules live in private operator infrastructure.** The
83
- operator package is not published on npm and is not part of public or holder
84
- onboarding. Those modules and credentials must not be restored into this
85
- prepare-only package or its npm artifact. CI fails if a pack of *this* repo
86
- includes signer or vault paths.
87
- 2. **Prepare helpers that validate executable routes require an attestation
88
- secret** (`requireSigned`) so they cannot be used as a softer pre-broadcast
89
- gate than `enforceTxPolicy`.
90
- 3. **Live grants have a hard 24-hour ceiling.** Public grant validation with an
91
- explicit reference time and provider-neutral session grants reject a longer
92
- TTL. Deployments should choose a shorter lifetime whenever possible.
93
- 4. **Execution tool routing fails closed.** Sign, send, submit, and broadcast
94
- operations are owner-only. Unknown operations inside a signer/executor
95
- namespace also require owner send/execute intent; a new tool name does not
96
- silently become guest-accessible.
97
- 5. **Daily spend ledger locks are never reclaimed automatically.** An existing
98
- lock refuses broadcast, even when it appears stale. After verifying that no
99
- holder is active, an operator must remove a stale lock out of band. This
100
- sacrifices unattended recovery to avoid a stale-reclaimer ABA race that can
101
- defeat aggregate spend accounting.
102
- 6. **Action records are not chain proof.** `normalizeActionReceipt()` records
103
- caller-supplied public facts; `recordAudit()` is a process-local, best-effort
104
- file helper. Neither authorizes execution or proves settlement. Report
105
- success only after independently verifying the successful chain receipt,
106
- expected destination/events, and expected balance delta.
107
- 7. **Repository-host controls are not the custody boundary.** Dependabot alerts
108
- may be enabled independently, while branch protection, CodeQL, and hosted
109
- secret scanning depend on repository visibility and account tier. Verify the
110
- live settings; do not infer them from this document. The local CI boundary,
111
- packed-artifact, and secret-scan gates remain mandatory.
112
- 8. **Holder admission is deployment code.** The npm package does not prove
113
- Locals ownership or isolate hosted tenants. See
114
- [docs/holder-beta.md](docs/holder-beta.md) before exposing any shared surface.
package/SETUP.md DELETED
@@ -1,316 +0,0 @@
1
- # Oracle setup
2
-
3
- Oracle's public CLI is a standalone, prepare-only multichain agent. It can read,
4
- research, quote, simulate, and build unsigned artifacts. It does not need Hermes,
5
- it does not accept wallet private keys, and it does not broadcast transactions.
6
-
7
- The owner-operated signer/executor is private infrastructure. It is not published
8
- on npm and is not part of public or holder onboarding.
9
-
10
- ## Requirements
11
-
12
- - Node.js `20.19.0` or newer
13
- - npm
14
- - A supported model login or API key for chat
15
- - A user-controlled wallet only when reviewing and signing a prepared artifact
16
-
17
- Linux, Windows, and macOS apps are in beta.
18
-
19
- ## 1. Install the standalone CLI
20
-
21
- ```bash
22
- npm view @oracle-agent/oracle version
23
- npm i -g @oracle-agent/oracle@latest
24
- oracle --version
25
- ```
26
-
27
- The npm `latest` tag is the install source of truth. The repository can contain
28
- an unreleased next version, so do not infer the published version from a branch.
29
-
30
- For a project-local library install instead:
31
-
32
- ```bash
33
- npm i @oracle-agent/oracle@latest
34
- ```
35
-
36
- The package declares this floor through `engines`; `oracle doctor` treats an
37
- unsupported Node runtime as blocking. npm may only warn unless the user's npm
38
- configuration enables strict engine checks, so verify `node --version` yourself.
39
-
40
- ## 2. Authenticate a model provider
41
-
42
- ### OAuth
43
-
44
- ```bash
45
- oracle auth login claude
46
- # or
47
- oracle auth login codex
48
- oracle auth login grok
49
- ```
50
-
51
- The command opens the provider's authorization flow and selects its default
52
- model. Use `--no-browser` when the browser must be opened manually.
53
-
54
- ### API key
55
-
56
- ```bash
57
- oracle auth api-key openrouter
58
- # also supported: openai, xai, deepseek, gemini, custom
59
- ```
60
-
61
- Interactive API-key entry is hidden. Do not put a key directly in the command
62
- line, shell history, a screenshot, or Oracle chat. For controlled automation,
63
- pipe the secret over stdin instead of passing it as an argument:
64
-
65
- ```bash
66
- printf '%s\n' "$OPENROUTER_API_KEY" | oracle auth api-key openrouter --stdin
67
- ```
68
-
69
- Check configuration without revealing credentials:
70
-
71
- ```bash
72
- oracle auth status
73
- oracle model --show
74
- ```
75
-
76
- OAuth credentials and stored API keys use the OS credential store when
77
- available, with a private `0600` local fallback.
78
-
79
- ## 3. Open Oracle
80
-
81
- ```bash
82
- oracle
83
- ```
84
-
85
- Useful first commands:
86
-
87
- ```bash
88
- oracle chain list
89
- oracle chain use hyperliquid
90
- oracle chain show
91
- oracle doctor
92
- ```
93
-
94
- Inside chat:
95
-
96
- - `/chain` lists or selects the active chain.
97
- - `/model` changes the model without changing the Oracle persona.
98
- - `/setup` opens optional messaging setup.
99
-
100
- A model response is not authorization, a prepared object is not a transaction,
101
- and a submitted transaction is not a confirmed receipt.
102
-
103
- ## Public capability boundary
104
-
105
- | Surface | Available to a public install | Custody |
106
- |---|---:|---|
107
- | Chat, research, market data | yes | none |
108
- | Quotes and simulations | yes | none |
109
- | Unsigned transaction / typed-data preparation | yes | user's wallet reviews and signs |
110
- | Signing, submission, broadcast | no | private owner-operated boundary only |
111
- | Automatic trading | no | not a public capability |
112
-
113
- Never paste a seed phrase, private key, hardware-wallet recovery phrase, vault
114
- passphrase, signer token, bot token, or provider credential into chat.
115
-
116
- ## Optional Hermes integration
117
-
118
- Hermes is optional. Add it only if you want specialist profiles, messaging
119
- channels, durable sessions, or the MCP-based local read plane:
120
-
121
- ```bash
122
- oracle bootstrap
123
- oracle init # dry run
124
- oracle init --apply
125
- oracle data serve
126
- oracle doctor
127
- ```
128
-
129
- `oracle bootstrap` installs an isolated Hermes compatibility runtime under
130
- Oracle's config directory and never modifies system Python. `oracle init
131
- --apply` writes profiles and a local HMAC attestation secret; it does not write a
132
- wallet key.
133
-
134
- The data service binds to `127.0.0.1:8787`. Keep it on loopback.
135
-
136
- ## Optional public HTTP plane
137
-
138
- ```bash
139
- oracle public serve --port 8799
140
- ```
141
-
142
- The public plane binds to `127.0.0.1` and exposes read, connect, grant,
143
- portfolio, approval, prepare, Buzz-auth, and audit contracts. It has no signer,
144
- key, send, execute, or broadcast route.
145
-
146
- The service is rate limited but unauthenticated. It is **not** a Locals-holder
147
- gate and must not be exposed directly to the internet, LAN, or tailnet. A hosted
148
- deployment needs a controlled reverse proxy, TLS, edge limits, and the
149
- server-side holder gate described in
150
- [holder-beta.md](docs/holder-beta.md).
151
-
152
- Verify liveness only after starting it:
153
-
154
- ```bash
155
- curl -fsS http://127.0.0.1:8799/public/health
156
- curl -fsS http://127.0.0.1:8799/public/buzz
157
- ```
158
-
159
- A static Oracle website does not imply that this API is running.
160
-
161
- ## Optional messaging
162
-
163
- ```bash
164
- oracle setup
165
- oracle setup telegram --allowed-users <telegram-user-id>
166
- oracle setup status
167
- oracle setup gateway start
168
- ```
169
-
170
- Interactive bot-token entry is hidden. Do not use `--token` in a normal shell;
171
- arguments can be retained in history or visible to other local processes. For a
172
- holder beta, do not run one shared messaging bot without a separate holder
173
- admission layer and per-user session isolation.
174
-
175
- ## Public wallet addresses and portfolio reads
176
-
177
- Portfolio and approval reads use public addresses only:
178
-
179
- ```bash
180
- export ORACLE_EVM_ADDRESS=0x...
181
- export ORACLE_SOLANA_ADDRESS=...
182
- export ORACLE_BITCOIN_ADDRESS=bc1...
183
- export ORACLE_HYPERLIQUID_ADDRESS=0x... # optional; EVM address is the fallback
184
- oracle data serve
185
- ```
186
-
187
- Missing address families are reported as `not-configured`, provider failures as
188
- `unavailable`, and unsupported families as `unsupported`. They are never
189
- reported as zero. Portfolio history is stored profile-locally with mode `0600`
190
- and contains public-address fingerprints and value observations, not wallet
191
- keys or prepared transactions.
192
-
193
- ## Preparing an action
194
-
195
- Preparation requires the real wallet that will sign. Placeholder and burn
196
- addresses are rejected.
197
-
198
- ```js
199
- import { data } from "@oracle-agent/oracle";
200
-
201
- const prepared = await data.call("hl-perps", "prepareOrder", {
202
- /* exact market, side, size, limits, and owner wallet */
203
- });
204
- ```
205
-
206
- Review the chain, destination, calldata or typed data, amount, minimum output,
207
- expiry, approvals, and fees in the user's wallet. Oracle's public package stops
208
- before signing. Report success only after a real transaction hash, successful
209
- receipt, and expected balance or state change.
210
-
211
- ## Locals-only holder beta
212
-
213
- Current release status is **HOLD for a holder-gated hosted launch**. The package
214
- is safe to distribute for local read/research/prepare use, but this repository
215
- does not contain an integrated Locals ownership gate. UI hiding, a wallet text
216
- field, or possession of a URL is not access control.
217
-
218
- Do not invite holders to a hosted surface until every required gate in
219
- [holder-beta.md](docs/holder-beta.md) passes.
220
-
221
- ## Buzz integration
222
-
223
- Oracle includes a public, unsigned Buzz HTTP contract. It does not embed the
224
- private executor and it does not turn Buzz into a custody surface. Setup,
225
- endpoints, and deployment status rules are documented in
226
- [buzz-integration.md](docs/buzz-integration.md).
227
-
228
- ## Doctor output
229
-
230
- ```bash
231
- oracle doctor --json
232
- ```
233
-
234
- A clean standalone install can legitimately show warnings for:
235
-
236
- - `data_server` when `oracle data serve` is not running;
237
- - `agent_runtime` when optional Hermes is not installed;
238
- - `hermes_lanes` before optional `oracle init --apply`.
239
-
240
- A Node-version failure is blocking. Signing warnings are irrelevant to the
241
- public holder path because signing is not installed there.
242
-
243
- ## Upgrade
244
-
245
- ```bash
246
- npm i -g @oracle-agent/oracle@latest
247
- oracle --version
248
- oracle doctor
249
- ```
250
-
251
- Review release notes before upgrading a machine that also runs private
252
- owner-operated infrastructure.
253
-
254
- ## Uninstall
255
-
256
- ```bash
257
- npm rm -g @oracle-agent/oracle
258
- ```
259
-
260
- The CLI does not silently delete local configuration or credentials. Remove
261
- those separately only after confirming they are no longer needed.
262
-
263
- ## Build and test from source
264
-
265
- ```bash
266
- git clone https://github.com/demi-hl/oracle.git
267
- cd oracle
268
- npm ci --no-audit --no-fund
269
- npm run gate:release
270
- npm run test:boundary
271
- npm test
272
- npm run typecheck
273
- npm run build
274
- npm run scan:secrets
275
- ```
276
-
277
- The repository may be private or ahead of npm while a release is being staged.
278
- The npm artifact remains the public installation source.
279
-
280
- ## Troubleshooting
281
-
282
- ### `oracle` says no provider is configured
283
-
284
- Run `oracle auth login <provider>` or `oracle auth api-key <provider>`, then
285
- confirm with `oracle auth status`.
286
-
287
- ### `oracle setup` says the local runtime is missing
288
-
289
- Messaging uses optional Hermes. Run `oracle bootstrap`, then retry setup.
290
- Standalone chat, chain selection, and public read/prepare commands do not require
291
- Hermes.
292
-
293
- ### `oracle doctor` says the data server is down
294
-
295
- Start it in another terminal with `oracle data serve`. Do not expose port `8787`
296
- off-host.
297
-
298
- ### The public API or Buzz endpoint is unreachable
299
-
300
- Start `oracle public serve --port 8799` and verify `/public/health`. Do not claim
301
- the API is live based on the static site or source code alone.
302
-
303
- ### A prepared action cannot be signed
304
-
305
- That is expected in the public package. Hand the reviewed artifact to a
306
- user-controlled wallet. Do not install or request private owner infrastructure
307
- as a workaround.
308
-
309
- ## References
310
-
311
- - [CLI reference](docs/cli.md)
312
- - [Public API and environment surface](docs/public-surface.md)
313
- - [Locals-holder beta launch gate](docs/holder-beta.md)
314
- - [Buzz integration](docs/buzz-integration.md)
315
- - [Architecture](docs/architecture.md)
316
- - [Security policy](SECURITY.md)
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000" width="1000" height="1000"><defs><radialGradient id="halo" cx="50%" cy="34%" r="54%"><stop offset="0%" stop-color="#7CC4FF" stop-opacity=".20"/><stop offset="52%" stop-color="#7CC4FF" stop-opacity=".05"/><stop offset="100%" stop-color="#7CC4FF" stop-opacity="0"/></radialGradient><radialGradient id="orb" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="#F2FAFF"/><stop offset="38%" stop-color="#A7D8FF"/><stop offset="100%" stop-color="#7CC4FF" stop-opacity=".14"/></radialGradient><linearGradient id="rule" x1="0" y1="0" x2="1" y2="0"><stop offset="0%" stop-color="#7CC4FF" stop-opacity="0"/><stop offset="50%" stop-color="#7CC4FF" stop-opacity=".6"/><stop offset="100%" stop-color="#7CC4FF" stop-opacity="0"/></linearGradient><linearGradient id="sweep" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#7CC4FF" stop-opacity="0"/><stop offset="100%" stop-color="#EAF6FF" stop-opacity=".95"/></linearGradient></defs><rect width="1000" height="1000" fill="#0B1018"/><rect width="1000" height="1000" fill="url(#halo)"/><circle cx="500.0" cy="336.0" r="166.0" fill="none" stroke="#7CC4FF" stroke-opacity=".24" stroke-width="1.1"/><circle cx="500.0" cy="336.0" r="128.0" fill="none" stroke="#7CC4FF" stroke-opacity=".16" stroke-width="1"/><circle cx="500.0" cy="336.0" r="92.0" fill="none" stroke="#7CC4FF" stroke-opacity=".34" stroke-width="1" stroke-dasharray="1.5 7"/><path d="M482.65 170.91 A166.0 166.0 0 0 1 665.60 347.58" fill="none" stroke="url(#sweep)" stroke-width="2.2" stroke-linecap="round"/><line x1="500.00" y1="170.00" x2="500.00" y2="183.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="617.38" y1="218.62" x2="608.19" y2="227.81" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="666.00" y1="336.00" x2="653.00" y2="336.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="617.38" y1="453.38" x2="608.19" y2="444.19" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="500.00" y1="502.00" x2="500.00" y2="489.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="382.62" y1="453.38" x2="391.81" y2="444.19" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="334.00" y1="336.00" x2="347.00" y2="336.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="382.62" y1="218.62" x2="391.81" y2="227.81" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><circle cx="590.51" cy="245.49" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="590.51" cy="426.51" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="409.49" cy="426.51" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="409.49" cy="245.49" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="500.0" cy="336.0" r="52" fill="url(#orb)" opacity=".20"/><circle cx="500.0" cy="336.0" r="16" fill="url(#orb)"/><circle cx="500.0" cy="336.0" r="16" fill="none" stroke="#F2FAFF" stroke-opacity=".55" stroke-width=".9"/><g transform="translate(452.700,122.000)" fill="#7CC4FF"><g transform="translate(0.000,0) scale(0.016000,-0.016000)"><path d="M300 -12Q236 -12 190.0 12.5Q144 37 114.0 83.0Q84 129 70.0 196.0Q56 263 56 349Q56 434 70.0 501.5Q84 569 114.0 615.0Q144 661 190.0 685.5Q236 710 300 710Q364 710 410.0 685.5Q456 661 486.0 615.0Q516 569 530.0 501.5Q544 434 544 349Q544 263 530.0 196.0Q516 129 486.0 83.0Q456 37 410.0 12.5Q364 -12 300 -12ZM300 61Q342 61 371.0 77.5Q400 94 419.0 124.0Q438 154 446.5 196.5Q455 239 455 292V406Q455 458 446.5 501.0Q438 544 419.0 574.0Q400 604 371.0 620.5Q342 637 300 637Q258 637 229.0 620.5Q200 604 181.0 574.0Q162 544 153.5 501.0Q145 458 145 406V292Q145 239 153.5 196.5Q162 154 181.0 124.0Q200 94 229.0 77.5Q258 61 300 61Z"/></g><g transform="translate(17.000,0) scale(0.016000,-0.016000)"><path d="M174 0H90V698H344Q441 698 492.0 645.0Q543 592 543 497Q543 412 499.0 361.0Q455 310 371 302L549 0H455L285 298H174ZM342 369Q395 369 424.5 395.5Q454 422 454 471V523Q454 572 424.5 598.5Q395 625 342 625H174V369Z"/></g><g transform="translate(34.000,0) scale(0.016000,-0.016000)"><path d="M481 0 422 199H177L118 0H31L245 698H356L570 0ZM304 609H295L197 272H402Z"/></g><g transform="translate(51.000,0) scale(0.016000,-0.016000)"><path d="M323 -12Q195 -12 132.5 81.0Q70 174 70 349Q70 524 132.5 617.0Q195 710 323 710Q371 710 406.0 697.0Q441 684 466.0 662.0Q491 640 508.0 612.5Q525 585 538 557L466 524Q457 547 445.0 567.5Q433 588 416.5 603.5Q400 619 377.5 628.0Q355 637 323 637Q240 637 199.5 574.0Q159 511 159 406V292Q159 187 199.5 124.0Q240 61 323 61Q355 61 377.5 70.0Q400 79 416.5 94.5Q433 110 445.0 130.5Q457 151 466 174L538 141Q525 112 508.0 85.0Q491 58 466.0 36.0Q441 14 406.0 1.0Q371 -12 323 -12Z"/></g><g transform="translate(68.000,0) scale(0.016000,-0.016000)"><path d="M120 0V698H204V73H535V0Z"/></g><g transform="translate(85.000,0) scale(0.016000,-0.016000)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g></g><rect x="416.0" y="143" width="168" height="1" fill="url(#rule)"/><g transform="translate(313.367,690.000)" fill="#A7D8FF"><g transform="translate(0.000,0) scale(0.178000,-0.178000)"><path d="M154.00006103515625 -14Q106.199951171875 -14 75.2999267578125 13.800018310546875Q44.39990234375 41.60003662109375 33.199920654296875 88.60003662109375Q21.99993896484375 135.60003662109375 32.7999267578125 193Q43.99993896484375 251.60003662109375 74.79995727539062 298.10003662109375Q105.5999755859375 344.60003662109375 149.60000610351562 371.8000183105469Q193.60003662109375 399 243.40008544921875 399Q295.400146484375 399 326.8001708984375 370.70001220703125Q358.2001953125 342.4000244140625 368.40020751953125 295.5000305175781Q378.6002197265625 248.60003662109375 367.40020751953125 193Q355.2001953125 129.7999267578125 321.7001647949219 82.89993286132812Q288.20013427734375 35.99993896484375 243.80010986328125 10.999969482421875Q199.40008544921875 -14 154.00006103515625 -14ZM188.800048828125 11Q230.39990234375 11 264.6997375488281 47.300018310546875Q298.99957275390625 83.60003662109375 310.799560546875 149Q317.99957275390625 186.0001220703125 315.89959716796875 225.30014038085938Q313.79962158203125 264.60015869140625 301.9996643066406 298.6001281738281Q290.19970703125 332.60009765625 268.1997985839844 353.800048828125Q246.19989013671875 375 213.60003662109375 375Q172.000244140625 375 137.20040893554688 337.800048828125Q102.40057373046875 300.60009765625 89.40057373046875 236Q81.40057373046875 197.39990234375 84.00054931640625 157.9998779296875Q86.60052490234375 118.599853515625 99.1004638671875 85.19989013671875Q111.60040283203125 51.7999267578125 134.40029907226562 31.39996337890625Q157.2001953125 11 188.800048828125 11Z"/></g><g transform="translate(70.844,0) scale(0.178000,-0.178000)"><path d="M110.600341796875 7.2000732421875 100.600341796875 8.2000732421875Q109.0003662109375 53.2001953125 123.600341796875 105.70022583007812Q138.2003173828125 158.20025634765625 157.30026245117188 209.20022583007812Q176.40020751953125 260.2001953125 198.20016479492188 302.3001403808594Q220.0001220703125 344.40008544921875 243.20010375976562 369.7000427246094Q266.40008544921875 395 289.0001220703125 395Q302.60015869140625 395 316.0002136230469 387.6999816894531Q329.4002685546875 380.39996337890625 337.6003112792969 367.99993896484375Q345.80035400390625 355.59991455078125 342.80035400390625 340.9998779296875Q340.20037841796875 327.9998779296875 331.8003234863281 320.7997741699219Q323.4002685546875 313.59967041015625 310.8001708984375 313.59967041015625Q295.8001708984375 313.59967041015625 288.4001159667969 321.899658203125Q281.00006103515625 330.19964599609375 275.5 338.4996337890625Q269.99993896484375 346.79962158203125 259.7999267578125 346.79962158203125Q245.5999755859375 346.79962158203125 228.80001831054688 323.2996520996094Q212.00006103515625 299.7996826171875 193.90011596679688 261.5997314453125Q175.8001708984375 223.3997802734375 159.50021362304688 177.89984130859375Q143.20025634765625 132.39990234375 130.30029296875 87.39996337890625Q117.40032958984375 42.4000244140625 110.600341796875 7.2000732421875ZM79.39996337890625 -8Q65.19989013671875 -8 60.999847412109375 -6.29998779296875Q56.7998046875 -4.5999755859375 56.7998046875 -1.5999755859375Q56.7998046875 1.60003662109375 62.399810791015625 26.399993896484375Q67.99981689453125 51.199951171875 71.99981689453125 74L104.99993896484375 258.6005859375Q112.79986572265625 298.80023193359375 110.9998779296875 319.3000793457031Q109.19989013671875 339.7999267578125 102.2999267578125 347.69989013671875Q95.39996337890625 355.599853515625 86.5999755859375 355.599853515625Q72.800048828125 355.599853515625 56.7000732421875 343.9998779296875Q40.60009765625 332.39990234375 26.4000244140625 318.7998046875Q24 316.3997802734375 20.0 320.09979248046875Q16 323.7998046875 18.4000244140625 326.99981689453125Q48.0001220703125 361.199951171875 74.20016479492188 378.0999755859375Q100.40020751953125 395 126.000244140625 395Q144.00030517578125 395 153.80032348632812 383.4000244140625Q163.600341796875 371.800048828125 164.90036010742188 342.8002014160156Q166.20037841796875 313.80035400390625 156.40045166015625 261.000732421875L110.600341796875 7.2000732421875Q108.40032958984375 -8 79.39996337890625 -8Z"/></g><g transform="translate(131.364,0) scale(0.178000,-0.178000)"><path d="M80.60003662109375 -13Q48.20001220703125 -13 31.0999755859375 11.100006103515625Q13.99993896484375 35.20001220703125 21.199951171875 91Q28.99993896484375 145.199951171875 55.699951171875 199.49993896484375Q82.39996337890625 253.7999267578125 120.5 299.0999450683594Q158.60003662109375 344.39996337890625 201.7000732421875 371.6999816894531Q244.80010986328125 399 284.400146484375 399Q302.8001708984375 399 320.6002197265625 392.29998779296875Q338.4002685546875 385.5999755859375 351.1003112792969 370.2999572753906Q363.80035400390625 354.99993896484375 365.80035400390625 330.39990234375L323.40008544921875 357Q335.60015869140625 359 352.1001892089844 373.3999938964844Q368.6002197265625 387.79998779296875 373.600341796875 407Q375.600341796875 410 381.100341796875 408.79998779296875Q386.600341796875 407.5999755859375 385.600341796875 405.5999755859375L327.600341796875 89Q317.80035400390625 30.8001708984375 342.60028076171875 30.8001708984375Q354.20025634765625 30.8001708984375 371.40020751953125 43.5001220703125Q388.60015869140625 56.2000732421875 409.40008544921875 77Q412.40008544921875 80 416.40008544921875 76.0Q420.40008544921875 72 417.40008544921875 69Q384.80010986328125 32 358.10009765625 11.5Q331.40008544921875 -9 305.40008544921875 -9Q280.5999755859375 -9 273.89990234375 12.9000244140625Q267.1998291015625 34.800048828125 276.7998046875 89L300.99981689453125 229L317.9998779296875 246Q288.39996337890625 170.39990234375 248.39999389648438 111.59991455078125Q208.4000244140625 52.7999267578125 165.00003051757812 19.89996337890625Q121.60003662109375 -13 80.60003662109375 -13ZM116.6004638671875 36.0003662109375Q144.60040283203125 36.0003662109375 174.60031127929688 57.800323486328125Q204.6002197265625 79.60028076171875 232.30010986328125 115.2001953125Q260 150.80010986328125 280.4999084472656 193.49996948242188Q300.99981689453125 236.1998291015625 309.19976806640625 276.9996337890625Q317.19976806640625 313.999755859375 301.9997863769531 339.19976806640625Q286.7998046875 364.3997802734375 249.59991455078125 363.59979248046875Q215.20001220703125 362.7998046875 179.00015258789062 332.59991455078125Q142.80029296875 302.4000244140625 115.00039672851562 251.60018920898438Q87.20050048828125 200.80035400390625 77.4005126953125 136.00054931640625Q69.80047607421875 85.80035400390625 79.4005126953125 60.900360107421875Q89.00054931640625 36.0003662109375 116.6004638671875 36.0003662109375Z"/></g><g transform="translate(208.616,0) scale(0.178000,-0.178000)"><path d="M156.800048828125 -13Q114.20001220703125 -13 86.5 6.399993896484375Q58.79998779296875 25.79998779296875 44.999969482421875 57.5999755859375Q31.199951171875 89.39996337890625 28.99993896484375 127.39996337890625Q26.7999267578125 165.39996337890625 34.59991455078125 202Q47.9998779296875 265.199951171875 82.29989624023438 308.7999572753906Q116.59991455078125 352.39996337890625 161.39996337890625 375.6999816894531Q206.20001220703125 399 249.00006103515625 399Q272.800048828125 399 293.2000732421875 391.70001220703125Q313.60009765625 384.4000244140625 325.3001403808594 371.0Q337.00018310546875 357.5999755859375 335.00018310546875 339.9998779296875Q334.00018310546875 327.19976806640625 326.10009765625 317.4997253417969Q318.20001220703125 307.7996826171875 302.39990234375 307.7996826171875Q288.19970703125 307.7996826171875 279.3996887207031 316.69976806640625Q270.59967041015625 325.599853515625 265.99969482421875 339.9998779296875Q262.7996826171875 351.7999267578125 250.999755859375 364.59991455078125Q239.1998291015625 377.39990234375 213.7999267578125 377.39990234375Q181.0001220703125 377.39990234375 157.1002197265625 357.5999450683594Q133.2003173828125 337.79998779296875 118.40036010742188 305.4000244140625Q103.60040283203125 273.00006103515625 95.8004150390625 233.00006103515625Q86.00042724609375 178.00006103515625 92.50042724609375 129.60009765625Q99.00042724609375 81.20013427734375 125.10040283203125 51.400177001953125Q151.20037841796875 21.6002197265625 198.600341796875 21.6002197265625Q232.400146484375 21.6002197265625 258.3001403808594 35.900146484375Q284.20013427734375 50.2000732421875 305.00006103515625 67Q307.800048828125 69 311.800048828125 65.0Q315.800048828125 61 313.00006103515625 58Q272.0001220703125 21 232.90008544921875 4.0Q193.800048828125 -13 156.800048828125 -13Z"/></g><g transform="translate(270.026,0) scale(0.178000,-0.178000)"><path d="M90.800048828125 -9Q64.7999267578125 -9 58.19989013671875 13.200042724609375Q51.599853515625 35.40008544921875 61.1998291015625 89L160.39971923828125 619.3995361328125Q166.79974365234375 654.5997314453125 153.09976196289062 663.7997436523438Q139.3997802734375 672.999755859375 93.599853515625 650.5997924804688Q89.599853515625 648.7998046875 87.19985961914062 654.7998046875Q84.79986572265625 660.7998046875 88.79986572265625 661.7998046875L218.20025634765625 725Q222.4002685546875 727 226.4002685546875 723.0Q230.4002685546875 719 229.4002685546875 717L113.40032958984375 89Q106.600341796875 58.60003662109375 112.00033569335938 44.700103759765625Q117.40032958984375 30.8001708984375 129.4002685546875 30.8001708984375Q140.4002685546875 30.8001708984375 157.40020751953125 43.600128173828125Q174.400146484375 56.40008544921875 195.2000732421875 77Q199.2000732421875 81 203.2000732421875 77.0Q207.2000732421875 73 203.2000732421875 69Q170.60009765625 32 144.00009155273438 11.5Q117.40008544921875 -9 90.800048828125 -9Z"/></g><g transform="translate(312.212,0) scale(0.178000,-0.178000)"><path d="M155.2000732421875 -12Q102 -12 71.49996948242188 15.800018310546875Q40.99993896484375 43.60003662109375 31.49993896484375 88.60003662109375Q21.99993896484375 133.60003662109375 31.7999267578125 185Q38.199951171875 222.4000244140625 58.799957275390625 260.5000305175781Q79.39996337890625 298.60003662109375 110.19998168945312 329.9000244140625Q141 361.20001220703125 179.20004272460938 380.1000061035156Q217.40008544921875 399 260.400146484375 399Q296.6002197265625 399 314.3002624511719 384.6000061035156Q332.00030517578125 370.20001220703125 327.600341796875 345Q323.0003662109375 321.39996337890625 300.2003479003906 299.3999328613281Q277.40032958984375 277.39990234375 241.10028076171875 259.5998840332031Q204.80023193359375 241.79986572265625 160.3001708984375 229.099853515625Q115.80010986328125 216.39984130859375 68.2000732421875 210.599853515625L70.2000732421875 223.599853515625Q146.79998779296875 234.599853515625 199.19992065429688 259.29986572265625Q251.599853515625 283.9998779296875 260.99981689453125 324Q268.19976806640625 350.7999267578125 252.09988403320312 361.39996337890625Q236 372 215.60003662109375 372Q182.2001953125 372 156.90029907226562 351.1000061035156Q131.60040283203125 330.20001220703125 115.700439453125 295.20001220703125Q99.80047607421875 260.20001220703125 92.80047607421875 218Q82.4005126953125 162.2000732421875 90.60049438476562 118.20010375976562Q98.80047607421875 74.20013427734375 124.80044555664062 48.300140380859375Q150.8004150390625 22.400146484375 193.400390625 22.400146484375Q217.2003173828125 22.400146484375 243.30029296875 29.400146484375Q269.4002685546875 36.400146484375 293.80023193359375 55.0001220703125Q296.6002197265625 57.0001220703125 300.1002197265625 53.0001220703125Q303.6002197265625 49.0001220703125 300.80023193359375 46.20013427734375Q262.80023193359375 14.800048828125 226.70016479492188 1.4000244140625Q190.60009765625 -12 155.2000732421875 -12Z"/></g></g><g transform="translate(347.096,786.000)" fill="#9BB6D1" opacity=".9"><g transform="translate(0.000,0) scale(0.092000,-0.092000)"><path d="M439 1 302 303Q282 348 269.0 361.0Q256 374 237 374Q235 374 235.0 380.0Q235 386 237 386Q252 386 268.5 385.0Q285 384 299 384Q332 384 356.0 385.0Q380 386 400 386Q403 386 403.0 380.0Q403 374 400 374Q369 374 350.0 366.5Q331 359 343 335L473 50L450 22L568 311Q582 346 565.0 360.0Q548 374 492 374Q490 374 490.0 380.0Q490 386 492 386Q516 386 537.5 385.0Q559 384 593 384Q614 384 627.0 385.0Q640 386 658 386Q661 386 661.0 380.0Q661 374 658 374Q635 374 619.0 360.0Q603 346 586 305L461 1Q459 -3 450.0 -3.0Q441 -3 439 1ZM205 1 68 303Q48 348 35.0 361.0Q22 374 4 374Q1 374 1.0 380.0Q1 386 4 386Q18 386 34.5 385.0Q51 384 65 384Q96 384 120.0 385.0Q144 386 166 386Q169 386 169.0 380.0Q169 374 166 374Q133 374 116.5 366.0Q100 358 110 335L240 50L216 22L325 285L339 271L227 1Q226 -3 216.5 -3.0Q207 -3 205 1Z"/></g><g transform="translate(61.364,0) scale(0.092000,-0.092000)"><path d="M313 -6Q309 -8 305 -8Q293 -8 283.0 13.0Q273 34 273 74V267Q273 329 253.5 353.0Q234 377 205 377Q180 377 163.5 365.5Q147 354 138.5 337.0Q130 320 126 305Q124 295 119.0 281.5Q114 268 94 268Q79 268 71.5 277.0Q64 286 64 296Q64 313 82.0 330.5Q100 348 127.5 363.0Q155 378 185.0 387.0Q215 396 240 396Q281 396 300.0 369.5Q319 343 319 297V108Q319 72 327.5 55.5Q336 39 357 39Q376 39 412 54Q417 56 419.0 50.5Q421 45 416 43ZM136 -7Q99 -7 79.5 13.5Q60 34 60 61Q60 78 68.5 94.0Q77 110 98.5 125.0Q120 140 158 154L283 201L285 188L167 143Q146 135 135.0 125.5Q124 116 120.0 105.5Q116 95 116 84Q116 62 130.5 44.0Q145 26 173 26Q184 26 196.0 29.5Q208 33 225 43L292 82L294 70L219 23Q194 7 175.0 0.0Q156 -7 136 -7Z"/></g><g transform="translate(99.912,0) scale(0.092000,-0.092000)"><path d="M96 322Q96 295 109.5 276.5Q123 258 144.5 245.5Q166 233 189 221Q215 209 238.0 194.5Q261 180 276.0 160.0Q291 140 291 108Q291 76 275.0 49.0Q259 22 227.5 5.5Q196 -11 151 -11Q127 -11 104.0 -4.5Q81 2 57 20Q55 22 53.0 25.0Q51 28 51 32L49 104Q49 107 54.5 107.5Q60 108 61 105Q74 71 91.5 49.5Q109 28 131.0 18.0Q153 8 180 8Q215 8 233.5 24.5Q252 41 250 74Q249 103 235.0 121.0Q221 139 200.0 151.0Q179 163 156 174Q131 186 108.5 199.5Q86 213 71.5 234.0Q57 255 57 288Q57 326 77.0 350.5Q97 375 127.5 387.0Q158 399 191 399Q209 399 227.0 395.5Q245 392 262 384Q271 380 271 373Q271 358 270.0 341.0Q269 324 269 304Q269 302 263.0 302.0Q257 302 257 304Q257 327 240.5 344.0Q224 361 200.5 370.0Q177 379 154 379Q127 379 111.5 365.0Q96 351 96 322Z"/></g><g transform="translate(152.536,0) scale(0.092000,-0.092000)"><path d="M27 0Q24 0 24.0 6.0Q24 12 27 12Q68 12 80.0 25.0Q92 38 92 81V600Q92 636 85.0 652.5Q78 669 60 669Q44 669 12 654Q8 652 5.5 657.5Q3 663 7 665L130 725Q131 725 131.0 725.0Q131 725 132 725Q135 725 137.0 723.0Q139 721 139 718V81Q139 38 151.0 25.0Q163 12 205 12Q207 12 207.0 6.0Q207 0 205 0Q187 0 164.5 1.0Q142 2 116 2Q91 2 67.5 1.0Q44 0 27 0ZM296 0Q293 0 293.0 6.0Q293 12 296 12Q337 12 349.0 25.0Q361 38 361 81V244Q361 363 267 363Q228 363 188.5 337.5Q149 312 120 269L116 281Q163 343 206.0 369.5Q249 396 294 396Q348 396 378.0 366.5Q408 337 408 275V81Q408 38 420.0 25.0Q432 12 474 12Q476 12 476.0 6.0Q476 0 474 0Q456 0 433.5 1.0Q411 2 385 2Q360 2 336.5 1.0Q313 0 296 0Z"/></g><g transform="translate(198.168,0) scale(0.092000,-0.092000)"><path d="M215 -12Q156 -12 116.5 15.5Q77 43 57.0 87.0Q37 131 37 180Q37 241 65.0 289.5Q93 338 140.5 366.5Q188 395 244 395Q301 395 329.0 364.0Q357 333 357 281Q357 268 354.5 262.0Q352 256 345 256H298Q303 318 278.5 346.5Q254 375 212 375Q156 375 125.0 332.5Q94 290 94 216Q94 160 112.0 115.5Q130 71 165.0 45.5Q200 20 250 20Q285 20 307.5 30.5Q330 41 351 54Q353 56 356.5 51.5Q360 47 358 44Q323 14 287.5 1.0Q252 -12 215 -12ZM81 255 80 267 308 271V256Z"/></g><g transform="translate(235.428,0) scale(0.092000,-0.092000)"><path d="M139 271 135 281Q172 327 195.5 351.5Q219 376 236.0 385.5Q253 395 269 395Q290 395 310.0 384.0Q330 373 330 357Q330 347 322.5 339.0Q315 331 301 331Q289 331 280.5 338.0Q272 345 262.0 351.5Q252 358 235 358Q226 358 215.5 352.5Q205 347 187.5 328.5Q170 310 139 271ZM46 0Q43 0 43.0 6.0Q43 12 46 12Q87 12 99.0 25.0Q111 38 111 81V281Q111 315 103.0 330.5Q95 346 75 346Q65 346 51.0 342.0Q37 338 19 331Q15 330 12.5 335.0Q10 340 14 342L125 394Q127 395 130 395Q137 395 147.5 374.5Q158 354 158 315V81Q158 52 165.0 37.0Q172 22 193.5 17.0Q215 12 258 12Q261 12 261.0 6.0Q261 0 258 0Q234 0 202.0 1.0Q170 2 135 2Q110 2 86.5 1.0Q63 0 46 0Z"/></g><g transform="translate(268.548,0) scale(0.092000,-0.092000)"><path d="M215 -12Q156 -12 116.5 15.5Q77 43 57.0 87.0Q37 131 37 180Q37 241 65.0 289.5Q93 338 140.5 366.5Q188 395 244 395Q301 395 329.0 364.0Q357 333 357 281Q357 268 354.5 262.0Q352 256 345 256H298Q303 318 278.5 346.5Q254 375 212 375Q156 375 125.0 332.5Q94 290 94 216Q94 160 112.0 115.5Q130 71 165.0 45.5Q200 20 250 20Q285 20 307.5 30.5Q330 41 351 54Q353 56 356.5 51.5Q360 47 358 44Q323 14 287.5 1.0Q252 -12 215 -12ZM81 255 80 267 308 271V256Z"/></g></g><rect x="368.0" y="836" width="264" height="1" fill="url(#rule)"/><g transform="translate(368.650,880.000)" fill="#7CC4FF"><g transform="translate(0.000,0) scale(0.014500,-0.014500)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(12.700,0) scale(0.014500,-0.014500)"><path d="M436 317H164V0H80V698H164V390H436V698H520V0H436Z"/></g><g transform="translate(25.400,0) scale(0.014500,-0.014500)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g><g transform="translate(50.800,0) scale(0.014500,-0.014500)"><path d="M90 0V698H530V625H174V390H500V317H174V0Z"/></g><g transform="translate(63.500,0) scale(0.014500,-0.014500)"><path d="M164 698V279Q164 228 167.0 188.0Q170 148 183.0 119.5Q196 91 223.5 76.0Q251 61 300 61Q349 61 376.5 76.0Q404 91 417.0 119.5Q430 148 433.0 188.0Q436 228 436 279V698H520V299Q520 221 512.5 163.0Q505 105 481.5 66.0Q458 27 414.5 7.5Q371 -12 300 -12Q229 -12 185.5 7.5Q142 27 118.5 66.0Q95 105 87.5 163.0Q80 221 80 299V698Z"/></g><g transform="translate(76.200,0) scale(0.014500,-0.014500)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(88.900,0) scale(0.014500,-0.014500)"><path d="M164 698V279Q164 228 167.0 188.0Q170 148 183.0 119.5Q196 91 223.5 76.0Q251 61 300 61Q349 61 376.5 76.0Q404 91 417.0 119.5Q430 148 433.0 188.0Q436 228 436 279V698H520V299Q520 221 512.5 163.0Q505 105 481.5 66.0Q458 27 414.5 7.5Q371 -12 300 -12Q229 -12 185.5 7.5Q142 27 118.5 66.0Q95 105 87.5 163.0Q80 221 80 299V698Z"/></g><g transform="translate(101.600,0) scale(0.014500,-0.014500)"><path d="M174 0H90V698H344Q441 698 492.0 645.0Q543 592 543 497Q543 412 499.0 361.0Q455 310 371 302L549 0H455L285 298H174ZM342 369Q395 369 424.5 395.5Q454 422 454 471V523Q454 572 424.5 598.5Q395 625 342 625H174V369Z"/></g><g transform="translate(114.300,0) scale(0.014500,-0.014500)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g><g transform="translate(139.700,0) scale(0.014500,-0.014500)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(152.400,0) scale(0.014500,-0.014500)"><path d="M298 -12Q204 -12 144.0 22.5Q84 57 45 111L106 161Q147 110 192.5 85.0Q238 60 301 60Q377 60 417.0 95.0Q457 130 457 193Q457 244 428.0 272.5Q399 301 327 313L249 326Q198 335 163.5 353.0Q129 371 108.0 396.5Q87 422 78.0 452.5Q69 483 69 516Q69 612 132.0 661.0Q195 710 302 710Q386 710 443.5 682.0Q501 654 536 603L477 552Q448 590 407.0 614.0Q366 638 301 638Q230 638 192.0 608.0Q154 578 154 518Q154 471 182.5 441.5Q211 412 285 399L360 386Q411 377 446.0 359.0Q481 341 502.5 316.0Q524 291 533.0 260.0Q542 229 542 195Q542 98 478.5 43.0Q415 -12 298 -12Z"/></g><g transform="translate(177.800,0) scale(0.014500,-0.014500)"><path d="M481 0 422 199H177L118 0H31L245 698H356L570 0ZM304 609H295L197 272H402Z"/></g><g transform="translate(190.500,0) scale(0.014500,-0.014500)"><path d="M444 93H439Q430 73 418.0 54.0Q406 35 387.5 20.5Q369 6 343.0 -3.0Q317 -12 281 -12Q167 -12 111.5 80.0Q56 172 56 344Q56 524 117.0 617.0Q178 710 305 710Q354 710 390.0 697.0Q426 684 451.5 662.0Q477 640 494.0 612.5Q511 585 522 557L450 524Q441 547 429.5 567.5Q418 588 401.5 603.5Q385 619 362.0 628.0Q339 637 308 637Q224 637 184.5 574.0Q145 511 145 406V298Q145 245 153.0 201.5Q161 158 179.5 126.0Q198 94 227.5 76.5Q257 59 300 59Q368 59 406.0 100.0Q444 141 444 206V278H297V345H522V0H444Z"/></g><g transform="translate(203.200,0) scale(0.014500,-0.014500)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g><g transform="translate(215.900,0) scale(0.014500,-0.014500)"><path d="M163 588H156V0H80V698H199L437 110H444V698H520V0H401Z"/></g><g transform="translate(228.600,0) scale(0.014500,-0.014500)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(241.300,0) scale(0.014500,-0.014500)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(254.000,0) scale(0.014500,-0.014500)"><path d="M323 -12Q195 -12 132.5 81.0Q70 174 70 349Q70 524 132.5 617.0Q195 710 323 710Q371 710 406.0 697.0Q441 684 466.0 662.0Q491 640 508.0 612.5Q525 585 538 557L466 524Q457 547 445.0 567.5Q433 588 416.5 603.5Q400 619 377.5 628.0Q355 637 323 637Q240 637 199.5 574.0Q159 511 159 406V292Q159 187 199.5 124.0Q240 61 323 61Q355 61 377.5 70.0Q400 79 416.5 94.5Q433 110 445.0 130.5Q457 151 466 174L538 141Q525 112 508.0 85.0Q491 58 466.0 36.0Q441 14 406.0 1.0Q371 -12 323 -12Z"/></g></g><g transform="translate(448.700,916.000)" fill="#5B738F"><g transform="translate(0.000,0) scale(0.012000,-0.012000)"><path d="M88 698H325Q415 698 466.0 649.0Q517 600 517 518Q517 455 486.5 419.0Q456 383 408 368V365Q467 351 505.0 312.5Q543 274 543 201Q543 159 529.0 122.0Q515 85 489.5 58.0Q464 31 429.5 15.5Q395 0 355 0H88ZM330 73Q388 73 421.0 99.0Q454 125 454 179V220Q454 273 421.0 299.5Q388 326 330 326H172V73ZM316 395Q369 395 399.0 418.5Q429 442 429 490V529Q429 577 399.0 601.0Q369 625 316 625H172V395Z"/></g><g transform="translate(10.600,0) scale(0.012000,-0.012000)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(21.200,0) scale(0.012000,-0.012000)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(31.800,0) scale(0.012000,-0.012000)"><path d="M323 -12Q195 -12 132.5 81.0Q70 174 70 349Q70 524 132.5 617.0Q195 710 323 710Q371 710 406.0 697.0Q441 684 466.0 662.0Q491 640 508.0 612.5Q525 585 538 557L466 524Q457 547 445.0 567.5Q433 588 416.5 603.5Q400 619 377.5 628.0Q355 637 323 637Q240 637 199.5 574.0Q159 511 159 406V292Q159 187 199.5 124.0Q240 61 323 61Q355 61 377.5 70.0Q400 79 416.5 94.5Q433 110 445.0 130.5Q457 151 466 174L538 141Q525 112 508.0 85.0Q491 58 466.0 36.0Q441 14 406.0 1.0Q371 -12 323 -12Z"/></g><g transform="translate(42.400,0) scale(0.012000,-0.012000)"><path d="M300 -12Q236 -12 190.0 12.5Q144 37 114.0 83.0Q84 129 70.0 196.0Q56 263 56 349Q56 434 70.0 501.5Q84 569 114.0 615.0Q144 661 190.0 685.5Q236 710 300 710Q364 710 410.0 685.5Q456 661 486.0 615.0Q516 569 530.0 501.5Q544 434 544 349Q544 263 530.0 196.0Q516 129 486.0 83.0Q456 37 410.0 12.5Q364 -12 300 -12ZM300 61Q342 61 371.0 77.5Q400 94 419.0 124.0Q438 154 446.5 196.5Q455 239 455 292V406Q455 458 446.5 501.0Q438 544 419.0 574.0Q400 604 371.0 620.5Q342 637 300 637Q258 637 229.0 620.5Q200 604 181.0 574.0Q162 544 153.5 501.0Q145 458 145 406V292Q145 239 153.5 196.5Q162 154 181.0 124.0Q200 94 229.0 77.5Q258 61 300 61Z"/></g><g transform="translate(53.000,0) scale(0.012000,-0.012000)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(63.600,0) scale(0.012000,-0.012000)"><path d="M163 588H156V0H80V698H199L437 110H444V698H520V0H401Z"/></g><g transform="translate(84.800,0) scale(0.012000,-0.012000)"><path d="M120 0V698H204V73H535V0Z"/></g><g transform="translate(95.400,0) scale(0.012000,-0.012000)"><path d="M85 0V73H285V636H278L102 472L53 525L238 698H369V73H553V0Z"/></g></g><path d="M52 76 L52 52 L76 52" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/><path d="M948 76 L948 52 L924 52" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/><path d="M52 924 L52 948 L76 948" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/><path d="M948 924 L948 948 L924 948" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/></svg>