From 323edeaf9304a59ce3bc6c340de21ed7a1d59efb Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 00:40:37 +0100 Subject: [PATCH 01/10] docs: add margin around mermaid diagrams --- src/custom/_components.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/custom/_components.css b/src/custom/_components.css index 9f8a9a1c..1b40b29e 100644 --- a/src/custom/_components.css +++ b/src/custom/_components.css @@ -207,6 +207,15 @@ padding-top: 0 !important; } +/* ========================================== + 10.2) MERMAID DIAGRAMS + ========================================== */ + +.theme-doc-markdown .docusaurus-mermaid-container { + margin-top: 3rem; + margin-bottom: 3rem; +} + /* ========================================== 11) TABLES ========================================== */ From b60560516cf0eceaa1ac4005c4972ec09289bf72 Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 00:50:16 +0100 Subject: [PATCH 02/10] docs: style mermaid diagrams with branded colors and glassmorphic cards --- src/custom/_components.css | 158 +++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/src/custom/_components.css b/src/custom/_components.css index 1b40b29e..9c5b5c12 100644 --- a/src/custom/_components.css +++ b/src/custom/_components.css @@ -214,6 +214,164 @@ .theme-doc-markdown .docusaurus-mermaid-container { margin-top: 3rem; margin-bottom: 3rem; + padding: 2rem 1.5rem; + border-radius: var(--radius-lg); + border: 1px solid color-mix(in oklab, var(--ifm-color-primary) 15%, transparent); + background: + linear-gradient( + 135deg, + color-mix(in oklab, var(--ifm-color-primary) 4%, var(--color-bg)) 0%, + var(--color-bg) 50%, + color-mix(in oklab, var(--ifm-color-primary) 3%, var(--color-bg)) 100% + ); + box-shadow: + 0 1px 3px rgba(0, 0, 0, 0.04), + 0 8px 24px rgba(0, 0, 0, 0.03); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + overflow-x: auto; +} + +[data-theme="dark"] .theme-doc-markdown .docusaurus-mermaid-container { + border-color: color-mix(in oklab, var(--ifm-color-primary) 20%, transparent); + background: + linear-gradient( + 135deg, + color-mix(in oklab, var(--ifm-color-primary) 6%, var(--color-bg)) 0%, + var(--color-bg) 50%, + color-mix(in oklab, var(--ifm-color-primary) 4%, var(--color-bg)) 100% + ); + box-shadow: + 0 1px 3px rgba(0, 0, 0, 0.12), + 0 8px 24px rgba(0, 0, 0, 0.08); +} + +/* Center the SVG and let it overflow for proper sizing */ +.theme-doc-markdown .docusaurus-mermaid-container svg { + display: block; + margin: 0 auto; + overflow: visible; +} + +/* ---- Mermaid node styling ---- */ + +/* Default nodes — soft branded fill (no size/shape changes to avoid clipping) */ +.docusaurus-mermaid-container .node rect, +.docusaurus-mermaid-container .node polygon, +.docusaurus-mermaid-container .node circle { + fill: color-mix(in oklab, var(--ifm-color-primary) 8%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 30%, transparent) !important; + stroke-width: 1.5px !important; +} + +/* Subgraph clusters */ +.docusaurus-mermaid-container .cluster { + overflow: visible !important; +} + +.docusaurus-mermaid-container .cluster rect { + fill: color-mix(in oklab, var(--ifm-color-primary) 4%, var(--color-bg)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 18%, transparent) !important; + stroke-width: 1px !important; + stroke-dasharray: none !important; +} + +/* Cluster labels */ +.docusaurus-mermaid-container .cluster-label .nodeLabel { + font-weight: 600 !important; + color: var(--color-text) !important; +} + +/* Edge lines */ +.docusaurus-mermaid-container .flowchart-link, +.docusaurus-mermaid-container .edge-pattern-solid { + stroke: color-mix(in oklab, var(--ifm-color-primary) 40%, var(--color-muted)) !important; + stroke-width: 1.5px !important; +} + +/* Edge labels — colors only, no size changes */ +.docusaurus-mermaid-container .edgeLabel { + background-color: var(--color-bg) !important; + color: var(--color-muted) !important; +} + +.docusaurus-mermaid-container .edgeLabel .edgeLabel { + background-color: transparent !important; +} + +[data-theme="dark"] .docusaurus-mermaid-container .edgeLabel { + background-color: var(--color-surface) !important; +} + +/* Arrowheads */ +.docusaurus-mermaid-container .marker { + fill: color-mix(in oklab, var(--ifm-color-primary) 50%, var(--color-muted)) !important; + stroke: none !important; +} + +/* Node text — colors only */ +.docusaurus-mermaid-container .nodeLabel { + color: var(--color-text) !important; +} + +/* ---- Sequence diagrams ---- */ + +/* Participant boxes */ +.docusaurus-mermaid-container .actor { + fill: color-mix(in oklab, var(--ifm-color-primary) 10%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 30%, transparent) !important; + stroke-width: 1.5px !important; +} + +/* Participant text */ +.docusaurus-mermaid-container text.actor { + fill: var(--color-text) !important; + font-weight: 600 !important; +} + +/* Sequence lines */ +.docusaurus-mermaid-container .messageLine0, +.docusaurus-mermaid-container .messageLine1 { + stroke: color-mix(in oklab, var(--ifm-color-primary) 35%, var(--color-muted)) !important; + stroke-width: 1.5px !important; +} + +/* Sequence message text */ +.docusaurus-mermaid-container .messageText { + fill: var(--color-text) !important; +} + +/* Sequence loop/alt boxes */ +.docusaurus-mermaid-container .loopLine { + stroke: color-mix(in oklab, var(--ifm-color-primary) 20%, transparent) !important; + stroke-dasharray: 4 4 !important; +} + +/* Activation bars */ +.docusaurus-mermaid-container .activation0, +.docusaurus-mermaid-container .activation1, +.docusaurus-mermaid-container .activation2 { + fill: color-mix(in oklab, var(--ifm-color-primary) 12%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 25%, transparent) !important; +} + +/* ---- Dark mode overrides ---- */ + +[data-theme="dark"] .docusaurus-mermaid-container .node rect, +[data-theme="dark"] .docusaurus-mermaid-container .node polygon, +[data-theme="dark"] .docusaurus-mermaid-container .node circle { + fill: color-mix(in oklab, var(--ifm-color-primary) 10%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 35%, transparent) !important; +} + +[data-theme="dark"] .docusaurus-mermaid-container .cluster rect { + fill: color-mix(in oklab, var(--ifm-color-primary) 6%, var(--color-bg)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 22%, transparent) !important; +} + +[data-theme="dark"] .docusaurus-mermaid-container .actor { + fill: color-mix(in oklab, var(--ifm-color-primary) 12%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--ifm-color-primary) 35%, transparent) !important; } /* ========================================== From c22421c9eff36cf15420c50fb4c6d3ce9c8ed0d4 Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 01:06:06 +0100 Subject: [PATCH 03/10] =?UTF-8?q?docs:=20mermaid=20styling=20=E2=80=94=20M?= =?UTF-8?q?anrope=20font,=20glow=20effects,=20config-level=20font=20sizing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docusaurus.config.ts | 7 ++ src/custom/_components.css | 245 +++++++++++++++++++++++++------------ src/custom/styles.css | 1 + 3 files changed, 178 insertions(+), 75 deletions(-) diff --git a/docusaurus.config.ts b/docusaurus.config.ts index ac81dc07..21522638 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -204,6 +204,13 @@ const config: Config = { { name: "twitter:card", content: "summary_large_image" }, { name: "twitter:site", content: "@0xMiden" }, ], + mermaid: { + theme: { light: "neutral", dark: "dark" }, + options: { + fontFamily: '"Manrope", ui-sans-serif, system-ui, sans-serif', + fontSize: 14, + }, + }, colorMode: { defaultMode: "light", disableSwitch: false, diff --git a/src/custom/_components.css b/src/custom/_components.css index 9c5b5c12..df4493ad 100644 --- a/src/custom/_components.css +++ b/src/custom/_components.css @@ -211,167 +211,262 @@ 10.2) MERMAID DIAGRAMS ========================================== */ +/* ---- Container ---- */ .theme-doc-markdown .docusaurus-mermaid-container { + --_mermaid-glow: var(--ifm-color-primary); margin-top: 3rem; margin-bottom: 3rem; - padding: 2rem 1.5rem; - border-radius: var(--radius-lg); - border: 1px solid color-mix(in oklab, var(--ifm-color-primary) 15%, transparent); + padding: 2.5rem 2rem; + border-radius: 20px; + border: 1px solid color-mix(in oklab, var(--_mermaid-glow) 20%, transparent); background: - linear-gradient( - 135deg, - color-mix(in oklab, var(--ifm-color-primary) 4%, var(--color-bg)) 0%, - var(--color-bg) 50%, - color-mix(in oklab, var(--ifm-color-primary) 3%, var(--color-bg)) 100% - ); + radial-gradient( + ellipse 80% 60% at 20% 10%, + color-mix(in oklab, var(--_mermaid-glow) 10%, transparent), + transparent 70% + ), + radial-gradient( + ellipse 60% 50% at 85% 90%, + color-mix(in oklab, var(--_mermaid-glow) 6%, transparent), + transparent 70% + ), + var(--color-bg); box-shadow: - 0 1px 3px rgba(0, 0, 0, 0.04), - 0 8px 24px rgba(0, 0, 0, 0.03); - backdrop-filter: blur(8px); - -webkit-backdrop-filter: blur(8px); + inset 0 1px 0 color-mix(in oklab, #fff 8%, transparent), + 0 0 0 1px color-mix(in oklab, var(--_mermaid-glow) 8%, transparent), + 0 2px 4px rgba(0, 0, 0, 0.03), + 0 8px 20px rgba(0, 0, 0, 0.04), + 0 0 60px -10px color-mix(in oklab, var(--_mermaid-glow) 10%, transparent); + backdrop-filter: blur(16px) saturate(1.3); + -webkit-backdrop-filter: blur(16px) saturate(1.3); overflow-x: auto; -} - + position: relative; +} + +/* Top-edge glow bar */ +.theme-doc-markdown .docusaurus-mermaid-container::before { + content: ""; + position: absolute; + top: -1px; + left: 15%; + right: 15%; + height: 2px; + background: linear-gradient( + 90deg, + transparent, + color-mix(in oklab, var(--_mermaid-glow) 50%, transparent) 30%, + var(--_mermaid-glow) 50%, + color-mix(in oklab, var(--_mermaid-glow) 50%, transparent) 70%, + transparent + ); + border-radius: 2px; + filter: blur(0.5px); +} + +/* Soft bloom behind the top bar */ +.theme-doc-markdown .docusaurus-mermaid-container::after { + content: ""; + position: absolute; + top: -4px; + left: 20%; + right: 20%; + height: 12px; + background: radial-gradient( + ellipse at 50% 0%, + color-mix(in oklab, var(--_mermaid-glow) 18%, transparent), + transparent 80% + ); + pointer-events: none; +} + +/* ---- Dark mode container ---- */ [data-theme="dark"] .theme-doc-markdown .docusaurus-mermaid-container { - border-color: color-mix(in oklab, var(--ifm-color-primary) 20%, transparent); + border-color: color-mix(in oklab, var(--_mermaid-glow) 25%, transparent); background: - linear-gradient( - 135deg, - color-mix(in oklab, var(--ifm-color-primary) 6%, var(--color-bg)) 0%, - var(--color-bg) 50%, - color-mix(in oklab, var(--ifm-color-primary) 4%, var(--color-bg)) 100% - ); + radial-gradient( + ellipse 80% 60% at 20% 10%, + color-mix(in oklab, var(--_mermaid-glow) 12%, transparent), + transparent 70% + ), + radial-gradient( + ellipse 60% 50% at 85% 90%, + color-mix(in oklab, var(--_mermaid-glow) 8%, transparent), + transparent 70% + ), + var(--color-bg); box-shadow: - 0 1px 3px rgba(0, 0, 0, 0.12), - 0 8px 24px rgba(0, 0, 0, 0.08); + inset 0 1px 0 color-mix(in oklab, #fff 4%, transparent), + 0 0 0 1px color-mix(in oklab, var(--_mermaid-glow) 12%, transparent), + 0 2px 4px rgba(0, 0, 0, 0.2), + 0 8px 20px rgba(0, 0, 0, 0.15), + 0 0 80px -10px color-mix(in oklab, var(--_mermaid-glow) 15%, transparent); +} + +[data-theme="dark"] .theme-doc-markdown .docusaurus-mermaid-container::before { + background: linear-gradient( + 90deg, + transparent, + color-mix(in oklab, var(--_mermaid-glow) 60%, transparent) 30%, + var(--_mermaid-glow) 50%, + color-mix(in oklab, var(--_mermaid-glow) 60%, transparent) 70%, + transparent + ); } -/* Center the SVG and let it overflow for proper sizing */ +[data-theme="dark"] .theme-doc-markdown .docusaurus-mermaid-container::after { + background: radial-gradient( + ellipse at 50% 0%, + color-mix(in oklab, var(--_mermaid-glow) 25%, transparent), + transparent 80% + ); +} + +/* Center SVG */ .theme-doc-markdown .docusaurus-mermaid-container svg { display: block; margin: 0 auto; overflow: visible; } -/* ---- Mermaid node styling ---- */ - -/* Default nodes — soft branded fill (no size/shape changes to avoid clipping) */ +/* ---- Flowchart nodes ---- */ .docusaurus-mermaid-container .node rect, .docusaurus-mermaid-container .node polygon, .docusaurus-mermaid-container .node circle { - fill: color-mix(in oklab, var(--ifm-color-primary) 8%, var(--color-surface)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 30%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 12%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 35%, transparent) !important; stroke-width: 1.5px !important; + filter: + drop-shadow(0 1px 2px color-mix(in oklab, var(--_mermaid-glow) 10%, transparent)) + drop-shadow(0 4px 8px color-mix(in oklab, var(--_mermaid-glow) 6%, transparent)); } -/* Subgraph clusters */ +.docusaurus-mermaid-container .nodeLabel { + color: var(--color-text) !important; + font-family: "Manrope", var(--font-sans) !important; + font-weight: 300 !important; + letter-spacing: -0.01em !important; +} + +/* ---- Subgraph clusters ---- */ .docusaurus-mermaid-container .cluster { overflow: visible !important; } .docusaurus-mermaid-container .cluster rect { - fill: color-mix(in oklab, var(--ifm-color-primary) 4%, var(--color-bg)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 18%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 5%, var(--color-bg)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 18%, transparent) !important; stroke-width: 1px !important; stroke-dasharray: none !important; + filter: drop-shadow(0 2px 8px color-mix(in oklab, var(--_mermaid-glow) 6%, transparent)); } -/* Cluster labels */ .docusaurus-mermaid-container .cluster-label .nodeLabel { - font-weight: 600 !important; - color: var(--color-text) !important; + font-family: "Manrope", var(--font-sans) !important; + font-weight: 400 !important; + color: color-mix(in oklab, var(--_mermaid-glow) 75%, var(--color-text)) !important; + letter-spacing: 0.06em !important; + text-transform: none !important; } -/* Edge lines */ +/* ---- Edges ---- */ .docusaurus-mermaid-container .flowchart-link, .docusaurus-mermaid-container .edge-pattern-solid { - stroke: color-mix(in oklab, var(--ifm-color-primary) 40%, var(--color-muted)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 40%, var(--color-muted)) !important; stroke-width: 1.5px !important; } -/* Edge labels — colors only, no size changes */ -.docusaurus-mermaid-container .edgeLabel { - background-color: var(--color-bg) !important; - color: var(--color-muted) !important; +.docusaurus-mermaid-container .edge-pattern-dotted { + stroke: color-mix(in oklab, var(--_mermaid-glow) 30%, var(--color-muted)) !important; } -.docusaurus-mermaid-container .edgeLabel .edgeLabel { +/* Edge labels */ +.docusaurus-mermaid-container .edgeLabel { background-color: transparent !important; + color: color-mix(in oklab, var(--_mermaid-glow) 60%, var(--color-muted)) !important; + font-family: "Manrope", var(--font-sans) !important; + font-weight: 300 !important; + font-style: italic !important; + letter-spacing: -0.01em !important; } -[data-theme="dark"] .docusaurus-mermaid-container .edgeLabel { - background-color: var(--color-surface) !important; +.docusaurus-mermaid-container .edgeLabel .edgeLabel { + background-color: transparent !important; } /* Arrowheads */ .docusaurus-mermaid-container .marker { - fill: color-mix(in oklab, var(--ifm-color-primary) 50%, var(--color-muted)) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 60%, var(--color-muted)) !important; stroke: none !important; } -/* Node text — colors only */ -.docusaurus-mermaid-container .nodeLabel { - color: var(--color-text) !important; -} - /* ---- Sequence diagrams ---- */ - -/* Participant boxes */ .docusaurus-mermaid-container .actor { - fill: color-mix(in oklab, var(--ifm-color-primary) 10%, var(--color-surface)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 30%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 12%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 35%, transparent) !important; stroke-width: 1.5px !important; + filter: + drop-shadow(0 1px 2px color-mix(in oklab, var(--_mermaid-glow) 10%, transparent)) + drop-shadow(0 4px 8px color-mix(in oklab, var(--_mermaid-glow) 6%, transparent)); } -/* Participant text */ .docusaurus-mermaid-container text.actor { + font-family: "Manrope", var(--font-sans) !important; fill: var(--color-text) !important; - font-weight: 600 !important; + font-weight: 300 !important; + letter-spacing: -0.02em !important; } -/* Sequence lines */ .docusaurus-mermaid-container .messageLine0, .docusaurus-mermaid-container .messageLine1 { - stroke: color-mix(in oklab, var(--ifm-color-primary) 35%, var(--color-muted)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 35%, var(--color-muted)) !important; stroke-width: 1.5px !important; } -/* Sequence message text */ .docusaurus-mermaid-container .messageText { + font-family: "Manrope", var(--font-sans) !important; fill: var(--color-text) !important; + font-weight: 300 !important; + letter-spacing: -0.01em !important; } -/* Sequence loop/alt boxes */ .docusaurus-mermaid-container .loopLine { - stroke: color-mix(in oklab, var(--ifm-color-primary) 20%, transparent) !important; - stroke-dasharray: 4 4 !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 20%, transparent) !important; } -/* Activation bars */ .docusaurus-mermaid-container .activation0, .docusaurus-mermaid-container .activation1, .docusaurus-mermaid-container .activation2 { - fill: color-mix(in oklab, var(--ifm-color-primary) 12%, var(--color-surface)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 25%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 15%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 30%, transparent) !important; } -/* ---- Dark mode overrides ---- */ - +/* ---- Dark mode element overrides ---- */ [data-theme="dark"] .docusaurus-mermaid-container .node rect, [data-theme="dark"] .docusaurus-mermaid-container .node polygon, [data-theme="dark"] .docusaurus-mermaid-container .node circle { - fill: color-mix(in oklab, var(--ifm-color-primary) 10%, var(--color-surface)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 35%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 15%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 40%, transparent) !important; + filter: + drop-shadow(0 1px 3px color-mix(in oklab, var(--_mermaid-glow) 15%, transparent)) + drop-shadow(0 4px 12px color-mix(in oklab, var(--_mermaid-glow) 10%, transparent)); } [data-theme="dark"] .docusaurus-mermaid-container .cluster rect { - fill: color-mix(in oklab, var(--ifm-color-primary) 6%, var(--color-bg)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 22%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 8%, var(--color-bg)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 22%, transparent) !important; + filter: drop-shadow(0 2px 10px color-mix(in oklab, var(--_mermaid-glow) 10%, transparent)); } [data-theme="dark"] .docusaurus-mermaid-container .actor { - fill: color-mix(in oklab, var(--ifm-color-primary) 12%, var(--color-surface)) !important; - stroke: color-mix(in oklab, var(--ifm-color-primary) 35%, transparent) !important; + fill: color-mix(in oklab, var(--_mermaid-glow) 15%, var(--color-surface)) !important; + stroke: color-mix(in oklab, var(--_mermaid-glow) 40%, transparent) !important; + filter: + drop-shadow(0 1px 3px color-mix(in oklab, var(--_mermaid-glow) 15%, transparent)) + drop-shadow(0 4px 12px color-mix(in oklab, var(--_mermaid-glow) 10%, transparent)); +} + +[data-theme="dark"] .docusaurus-mermaid-container .edgeLabel { + color: color-mix(in oklab, var(--_mermaid-glow) 65%, var(--color-muted)) !important; } /* ========================================== @@ -408,7 +503,7 @@ tbody tr { /* line-height: 0 !important; */ padding-top: 0.37rem !important; display: inline-block !important; - text-transform: uppercase !important; + text-transform: none !important; letter-spacing: 0.05em !important; margin-top: 0.571rem !important; margin-bottom: 0.571rem !important; diff --git a/src/custom/styles.css b/src/custom/styles.css index 3d6cf982..0eca7263 100644 --- a/src/custom/styles.css +++ b/src/custom/styles.css @@ -1,6 +1,7 @@ /* Import Google Fonts */ @import url("https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap"); /* Design System */ @import "./_tokens.css"; From 415b910f256875faff93256a9736faf3b97381e1 Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 01:14:41 +0100 Subject: [PATCH 04/10] docs: remove italic from mermaid edge labels and cluster headers --- src/custom/_components.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/custom/_components.css b/src/custom/_components.css index df4493ad..318c22c8 100644 --- a/src/custom/_components.css +++ b/src/custom/_components.css @@ -363,11 +363,19 @@ .docusaurus-mermaid-container .cluster-label .nodeLabel { font-family: "Manrope", var(--font-sans) !important; font-weight: 400 !important; + font-style: normal !important; color: color-mix(in oklab, var(--_mermaid-glow) 75%, var(--color-text)) !important; letter-spacing: 0.06em !important; text-transform: none !important; } +/* Ensure no italic on cluster title elements */ +.docusaurus-mermaid-container .cluster-label, +.docusaurus-mermaid-container .cluster-label span, +.docusaurus-mermaid-container .cluster-label p { + font-style: normal !important; +} + /* ---- Edges ---- */ .docusaurus-mermaid-container .flowchart-link, .docusaurus-mermaid-container .edge-pattern-solid { @@ -385,7 +393,7 @@ color: color-mix(in oklab, var(--_mermaid-glow) 60%, var(--color-muted)) !important; font-family: "Manrope", var(--font-sans) !important; font-weight: 300 !important; - font-style: italic !important; + font-style: normal !important; letter-spacing: -0.01em !important; } From cba3a9d987558cf173ca54b84f6a2f79f334145f Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 02:04:43 +0100 Subject: [PATCH 05/10] docs: promote Client to top-level sidebar, move CLI under Tools - Add Client as top-level sidebar category (same level as Tools) - Update deploy-docs.yml to sync client to builder/client/ and move CLI to builder/tools/cli/ - Update cut-versions.yml to match new sync paths - Update tools/index.md to reference CLI instead of client subsection - Sync restructured content from miden-client source repo --- .github/workflows/cut-versions.yml | 17 +- .github/workflows/deploy-docs.yml | 14 +- docs/builder/client/_category_.yml | 4 + docs/builder/client/common-errors.md | 99 +++++ .../client/img/get-started/account-a.png | Bin 0 -> 51865 bytes .../client/img/get-started/account-b.png | Bin 0 -> 51574 bytes .../client/img/get-started/commit-height.png | Bin 0 -> 42255 bytes .../client/img/get-started/consumed-note.png | Bin 0 -> 45808 bytes .../img/get-started/miden-account-list.png | Bin 0 -> 37114 bytes .../client/img/get-started/note-view.png | Bin 0 -> 41685 bytes .../img/get-started/processing-note.png | Bin 0 -> 50643 bytes .../get-started/transaction-confirmation.png | Bin 0 -> 143664 bytes .../client/img/get-started/two-accounts.png | Bin 0 -> 54890 bytes .../img/get-started/view-account-vault.png | Bin 0 -> 192391 bytes docs/builder/client/index.md | 40 ++ .../client/react-client/_category_.yml | 3 + docs/builder/client/react-client/design.md | 177 ++++++++ docs/builder/client/react-client/examples.md | 49 +++ docs/builder/client/react-client/features.md | 36 ++ .../react-client/get-started/_category_.yml | 3 + .../react-client/get-started/create-wallet.md | 110 +++++ .../get-started/external-signer.md | 100 +++++ .../client/react-client/get-started/index.md | 28 ++ .../react-client/get-started/send-receive.md | 117 +++++ .../get-started/setup-provider.md | 63 +++ docs/builder/client/react-client/index.md | 14 + docs/builder/client/react-client/install.md | 49 +++ .../react-client/library/_category_.yml | 3 + .../client/react-client/library/accounts.md | 145 ++++++ .../client/react-client/library/index.md | 59 +++ .../client/react-client/library/notes.md | 102 +++++ .../client/react-client/library/provider.md | 90 ++++ .../client/react-client/library/signers.md | 169 +++++++ .../client/react-client/library/sync.md | 95 ++++ .../react-client/library/transactions.md | 185 ++++++++ .../client/react-client/library/utilities.md | 114 +++++ .../builder/client/rust-client/_category_.yml | 4 + docs/builder/client/rust-client/api-docs.md | 8 + docs/builder/client/rust-client/design.md | 80 ++++ docs/builder/client/rust-client/examples.md | 52 +++ docs/builder/client/rust-client/features.md | 56 +++ .../rust-client/get-started/_category_.yml | 3 + .../get-started/create-account-use-faucet.md | 166 +++++++ .../client/rust-client/get-started/index.md | 17 + .../rust-client/get-started/p2p-private.md | 144 ++++++ .../rust-client/get-started/p2p-public.md | 111 +++++ docs/builder/client/rust-client/index.md | 25 ++ .../client/rust-client/install-and-run.md | 53 +++ docs/builder/client/rust-client/library.md | 139 ++++++ .../client/theme/Admonition/Icon/Danger.tsx | 19 + .../client/theme/Admonition/Icon/Info.tsx | 20 + .../client/theme/Admonition/Icon/Note.tsx | 20 + .../client/theme/Admonition/Icon/Tip.tsx | 20 + .../client/theme/Admonition/Icon/Warning.tsx | 20 + .../client/theme/Admonition/Layout/index.tsx | 51 +++ .../theme/Admonition/Layout/styles.module.css | 35 ++ .../client/theme/Admonition/Type/Caution.tsx | 32 ++ .../client/theme/Admonition/Type/Danger.tsx | 30 ++ .../client/theme/Admonition/Type/Info.tsx | 30 ++ .../client/theme/Admonition/Type/Note.tsx | 30 ++ .../client/theme/Admonition/Type/Tip.tsx | 30 ++ .../client/theme/Admonition/Type/Warning.tsx | 30 ++ .../builder/client/theme/Admonition/Types.tsx | 31 ++ .../builder/client/theme/Admonition/index.tsx | 21 + docs/builder/client/web-client/_category_.yml | 4 + docs/builder/client/web-client/api-docs.md | 8 + docs/builder/client/web-client/design.md | 149 +++++++ docs/builder/client/web-client/examples.md | 45 ++ docs/builder/client/web-client/features.md | 36 ++ .../web-client/get-started/_category_.yml | 3 + .../get-started/create-account-use-faucet.md | 140 ++++++ .../client/web-client/get-started/index.md | 28 ++ .../web-client/get-started/mock-client.md | 172 ++++++++ .../web-client/get-started/p2p-private.md | 162 +++++++ .../web-client/get-started/p2p-public.md | 128 ++++++ docs/builder/client/web-client/index.md | 15 + docs/builder/client/web-client/install.md | 37 ++ .../client/web-client/library/_category_.yml | 3 + .../client/web-client/library/accounts.md | 105 +++++ .../client/web-client/library/compile.md | 212 +++++++++ .../client/web-client/library/export.md | 74 ++++ .../client/web-client/library/import.md | 116 +++++ .../client/web-client/library/index.md | 80 ++++ .../builder/client/web-client/library/mock.md | 110 +++++ .../client/web-client/library/new-accounts.md | 143 ++++++ .../web-client/library/new-transactions.md | 333 ++++++++++++++ .../web-client/library/note-transport.md | 51 +++ .../client/web-client/library/notes.md | 140 ++++++ .../builder/client/web-client/library/sync.md | 72 +++ .../builder/client/web-client/library/tags.md | 73 ++++ .../client/web-client/library/transactions.md | 86 ++++ docs/builder/tools/cli/_category_.yml | 3 + docs/builder/tools/cli/cli-config.md | 194 +++++++++ docs/builder/tools/cli/cli-troubleshooting.md | 147 +++++++ docs/builder/tools/cli/index.md | 412 ++++++++++++++++++ docs/builder/tools/index.md | 19 +- sidebars.ts | 8 +- 97 files changed, 6443 insertions(+), 27 deletions(-) create mode 100644 docs/builder/client/_category_.yml create mode 100644 docs/builder/client/common-errors.md create mode 100644 docs/builder/client/img/get-started/account-a.png create mode 100644 docs/builder/client/img/get-started/account-b.png create mode 100644 docs/builder/client/img/get-started/commit-height.png create mode 100644 docs/builder/client/img/get-started/consumed-note.png create mode 100644 docs/builder/client/img/get-started/miden-account-list.png create mode 100644 docs/builder/client/img/get-started/note-view.png create mode 100644 docs/builder/client/img/get-started/processing-note.png create mode 100644 docs/builder/client/img/get-started/transaction-confirmation.png create mode 100644 docs/builder/client/img/get-started/two-accounts.png create mode 100644 docs/builder/client/img/get-started/view-account-vault.png create mode 100644 docs/builder/client/index.md create mode 100644 docs/builder/client/react-client/_category_.yml create mode 100644 docs/builder/client/react-client/design.md create mode 100644 docs/builder/client/react-client/examples.md create mode 100644 docs/builder/client/react-client/features.md create mode 100644 docs/builder/client/react-client/get-started/_category_.yml create mode 100644 docs/builder/client/react-client/get-started/create-wallet.md create mode 100644 docs/builder/client/react-client/get-started/external-signer.md create mode 100644 docs/builder/client/react-client/get-started/index.md create mode 100644 docs/builder/client/react-client/get-started/send-receive.md create mode 100644 docs/builder/client/react-client/get-started/setup-provider.md create mode 100644 docs/builder/client/react-client/index.md create mode 100644 docs/builder/client/react-client/install.md create mode 100644 docs/builder/client/react-client/library/_category_.yml create mode 100644 docs/builder/client/react-client/library/accounts.md create mode 100644 docs/builder/client/react-client/library/index.md create mode 100644 docs/builder/client/react-client/library/notes.md create mode 100644 docs/builder/client/react-client/library/provider.md create mode 100644 docs/builder/client/react-client/library/signers.md create mode 100644 docs/builder/client/react-client/library/sync.md create mode 100644 docs/builder/client/react-client/library/transactions.md create mode 100644 docs/builder/client/react-client/library/utilities.md create mode 100644 docs/builder/client/rust-client/_category_.yml create mode 100644 docs/builder/client/rust-client/api-docs.md create mode 100644 docs/builder/client/rust-client/design.md create mode 100644 docs/builder/client/rust-client/examples.md create mode 100644 docs/builder/client/rust-client/features.md create mode 100644 docs/builder/client/rust-client/get-started/_category_.yml create mode 100644 docs/builder/client/rust-client/get-started/create-account-use-faucet.md create mode 100644 docs/builder/client/rust-client/get-started/index.md create mode 100644 docs/builder/client/rust-client/get-started/p2p-private.md create mode 100644 docs/builder/client/rust-client/get-started/p2p-public.md create mode 100644 docs/builder/client/rust-client/index.md create mode 100644 docs/builder/client/rust-client/install-and-run.md create mode 100644 docs/builder/client/rust-client/library.md create mode 100644 docs/builder/client/theme/Admonition/Icon/Danger.tsx create mode 100644 docs/builder/client/theme/Admonition/Icon/Info.tsx create mode 100644 docs/builder/client/theme/Admonition/Icon/Note.tsx create mode 100644 docs/builder/client/theme/Admonition/Icon/Tip.tsx create mode 100644 docs/builder/client/theme/Admonition/Icon/Warning.tsx create mode 100644 docs/builder/client/theme/Admonition/Layout/index.tsx create mode 100644 docs/builder/client/theme/Admonition/Layout/styles.module.css create mode 100644 docs/builder/client/theme/Admonition/Type/Caution.tsx create mode 100644 docs/builder/client/theme/Admonition/Type/Danger.tsx create mode 100644 docs/builder/client/theme/Admonition/Type/Info.tsx create mode 100644 docs/builder/client/theme/Admonition/Type/Note.tsx create mode 100644 docs/builder/client/theme/Admonition/Type/Tip.tsx create mode 100644 docs/builder/client/theme/Admonition/Type/Warning.tsx create mode 100644 docs/builder/client/theme/Admonition/Types.tsx create mode 100644 docs/builder/client/theme/Admonition/index.tsx create mode 100644 docs/builder/client/web-client/_category_.yml create mode 100644 docs/builder/client/web-client/api-docs.md create mode 100644 docs/builder/client/web-client/design.md create mode 100644 docs/builder/client/web-client/examples.md create mode 100644 docs/builder/client/web-client/features.md create mode 100644 docs/builder/client/web-client/get-started/_category_.yml create mode 100644 docs/builder/client/web-client/get-started/create-account-use-faucet.md create mode 100644 docs/builder/client/web-client/get-started/index.md create mode 100644 docs/builder/client/web-client/get-started/mock-client.md create mode 100644 docs/builder/client/web-client/get-started/p2p-private.md create mode 100644 docs/builder/client/web-client/get-started/p2p-public.md create mode 100644 docs/builder/client/web-client/index.md create mode 100644 docs/builder/client/web-client/install.md create mode 100644 docs/builder/client/web-client/library/_category_.yml create mode 100644 docs/builder/client/web-client/library/accounts.md create mode 100644 docs/builder/client/web-client/library/compile.md create mode 100644 docs/builder/client/web-client/library/export.md create mode 100644 docs/builder/client/web-client/library/import.md create mode 100644 docs/builder/client/web-client/library/index.md create mode 100644 docs/builder/client/web-client/library/mock.md create mode 100644 docs/builder/client/web-client/library/new-accounts.md create mode 100644 docs/builder/client/web-client/library/new-transactions.md create mode 100644 docs/builder/client/web-client/library/note-transport.md create mode 100644 docs/builder/client/web-client/library/notes.md create mode 100644 docs/builder/client/web-client/library/sync.md create mode 100644 docs/builder/client/web-client/library/tags.md create mode 100644 docs/builder/client/web-client/library/transactions.md create mode 100644 docs/builder/tools/cli/_category_.yml create mode 100644 docs/builder/tools/cli/cli-config.md create mode 100644 docs/builder/tools/cli/cli-troubleshooting.md create mode 100644 docs/builder/tools/cli/index.md diff --git a/.github/workflows/cut-versions.yml b/.github/workflows/cut-versions.yml index edc66850..de936901 100644 --- a/.github/workflows/cut-versions.yml +++ b/.github/workflows/cut-versions.yml @@ -151,7 +151,7 @@ jobs: # Clean directories that will be re-synced (v0.4 nested paths) rm -rf docs/core-concepts/miden-base docs/core-concepts/miden-vm docs/core-concepts/miden-node docs/core-concepts/compiler - rm -rf docs/builder/tools/client + rm -rf docs/builder/tools/client docs/builder/client docs/builder/tools/cli # Note: docs/builder/tutorials is NOT fully cleaned to preserve local tutorials (e.g. miden-bank) # Core Concepts docs → docs/core-concepts/* @@ -188,9 +188,15 @@ jobs: fi if [ -d "vendor/miden-client/docs/external/src" ]; then - mkdir -p docs/builder/tools/client - cp -r vendor/miden-client/docs/external/src/* docs/builder/tools/client/ - echo "Synced miden-client → docs/builder/tools/client" + mkdir -p docs/builder/client + cp -r vendor/miden-client/docs/external/src/* docs/builder/client/ + echo "Synced miden-client → docs/builder/client" + + # Move CLI directory to Tools section + if [ -d "docs/builder/client/cli" ]; then + mv docs/builder/client/cli docs/builder/tools/cli + echo "Moved CLI docs → docs/builder/tools/cli" + fi fi echo "Content aggregation complete. Final docs structure:" @@ -219,7 +225,8 @@ jobs: rm -rf docs/core-concepts/miden-vm rm -rf docs/core-concepts/miden-node rm -rf docs/core-concepts/compiler - rm -rf docs/builder/tools/client + rm -rf docs/builder/client + rm -rf docs/builder/tools/cli # Note: tutorials live in docs/builder/tutorials/ (authored content, not cleaned) - name: Commit snapshots diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index afd3ac04..2758bed6 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -147,7 +147,7 @@ jobs: # Clean directories that will be re-synced (v0.4 nested paths) rm -rf docs/core-concepts/miden-base docs/core-concepts/miden-vm docs/core-concepts/miden-node docs/core-concepts/compiler - rm -rf docs/builder/tools/client + rm -rf docs/builder/tools/client docs/builder/client docs/builder/tools/cli # Note: docs/builder/tutorials is NOT fully cleaned to preserve local tutorials (e.g. miden-bank) # Core Concepts docs → docs/core-concepts/* @@ -184,9 +184,15 @@ jobs: fi if [ -d "vendor/miden-client/docs/external/src" ]; then - mkdir -p docs/builder/tools/client - cp -r vendor/miden-client/docs/external/src/* docs/builder/tools/client/ - echo "Synced miden-client → docs/builder/tools/client" + mkdir -p docs/builder/client + cp -r vendor/miden-client/docs/external/src/* docs/builder/client/ + echo "Synced miden-client → docs/builder/client" + + # Move CLI directory to Tools section + if [ -d "docs/builder/client/cli" ]; then + mv docs/builder/client/cli docs/builder/tools/cli + echo "Moved CLI docs → docs/builder/tools/cli" + fi fi echo "Content aggregation complete. Final docs structure:" diff --git a/docs/builder/client/_category_.yml b/docs/builder/client/_category_.yml new file mode 100644 index 00000000..9c37f780 --- /dev/null +++ b/docs/builder/client/_category_.yml @@ -0,0 +1,4 @@ +label: Client +# Determines where this documentation section appears relative to other sections on the main documentation page (which is the parent of this folder in the miden-docs repository) +position: 5 +collapsed: true diff --git a/docs/builder/client/common-errors.md b/docs/builder/client/common-errors.md new file mode 100644 index 00000000..38f80195 --- /dev/null +++ b/docs/builder/client/common-errors.md @@ -0,0 +1,99 @@ +--- +title: Common Errors +--- + +# Troubleshooting and common errors + +This guide helps you troubleshoot common issues when using the Miden client. + +## Connection and sync errors + +#### `RpcError::ConnectionError` +- **Cause:** Could not reach the Miden node. +- **Fix:** Check that the node endpoint in your configuration is correct and that the node is running. + +#### `RpcError::AcceptHeaderError` +- **Cause:** The node rejected the request due to a version mismatch between the client and node. +- **Fix:** Ensure your client version is compatible with the node version. Update one or the other to a compatible release. + +## Account errors + +#### `ClientError::AccountLocked` +- **Cause:** The account is locked because the client may be missing its latest state. This can happen when the account is shared across clients and another client executed a transaction. +- **Fix:** Run `sync` to fetch the latest state from the network. + +#### `ClientError::AccountNonceTooLow` +- **Cause:** The account you are trying to import has an older nonce than the version already tracked locally. +- **Fix:** Run `sync` to ensure your local state is current, or re-export the account from a more up-to-date source. + +#### `ClientError::AccountNotFoundOnChain` +- **Cause:** The account was not found on the network. It may not have been committed yet, or the ID is incorrect. +- **Fix:** Verify the account ID and ensure the account has been committed on chain. For new accounts, wait for the transaction that created it to be confirmed and run `sync`. + +#### `ClientError::AccountIsPrivate` +- **Cause:** Cannot retrieve private account details from the network. Private account state is not stored on chain. +- **Fix:** Private accounts can only be accessed locally. Use the account file export/import workflow to transfer private accounts between clients. + +#### `ClientError::AddNewAccountWithoutSeed` +- **Cause:** New accounts require a seed to derive their initial state. +- **Fix:** Use `Client::new_account()` (Rust) or `client.accounts.create()` (TypeScript) which generates the seed automatically. If importing manually, provide the seed. + +## Note errors + +#### `ClientError::NoteNotFoundOnChain` / `RpcError::NoteNotFound` +- **Cause:** The note has not been found on chain, or the note ID is incorrect. +- **Fix:** Verify the note ID, ensure it has been committed, and sync the client before retrying. + +#### `ClientError::NoConsumableNoteForAccount` +- **Cause:** No notes were found that the specified account can consume. +- **Fix:** Run `sync` to fetch the latest notes from the network. Verify that notes targeting this account have been committed on chain. + +#### `TransactionRequestError::InputNoteNotAuthenticated` +- **Cause:** The note needs an inclusion proof before it can be consumed as an authenticated input. +- **Fix:** Run `sync` to fetch the latest proofs from the network, then retry the transaction. + +## Transaction request errors + +#### `TransactionRequestError::NoInputNotesNorAccountChange` +- **Cause:** The transaction neither consumes input notes nor mutates tracked account state. +- **Fix:** Add at least one authenticated/unauthenticated input note or include an explicit account state update in the request. + +#### `TransactionRequestError::InvalidSenderAccount` +- **Cause:** The sender account is not tracked by this client. +- **Fix:** Import or create the account first, then retry the transaction. + +#### `TransactionRequestError::P2IDNoteWithoutAsset` +- **Cause:** A pay-to-ID (P2ID) note must transfer at least one asset to the target account. +- **Fix:** Add at least one fungible or non-fungible asset to the note. + +#### `TransactionRequestError::MissingAuthenticatedInputNote` +- **Cause:** A note ID included in `authenticated_input_notes` did not have a corresponding record in the store, or it was missing authentication data. +- **Fix:** Import or sync the note so its record and inclusion proof are present before building and executing the request. + +#### `TransactionRequestError::StorageSlotNotFound` +- **Cause:** The request referenced an account storage slot that does not exist. This often happens because the ABI layout is incorrectly addressed (the auth component is always the first component in the account component list). +- **Fix:** Verify the account ABI and component ordering, then adjust the slot index used in the transaction. + +## Transaction execution errors + +#### `ClientError::MissingOutputRecipients` +- **Cause:** The MASM program emitted an output note whose recipient was not listed in the expected output recipients. +- **Fix:** Reconcile the MASM recipient data with the note structs and update the expected recipients so they match the transaction outputs. + +#### `TransactionExecutorError::ForeignAccountNotAnchoredInReference` +- **Cause:** The foreign account proof was generated against a different block than the request's reference block. +- **Fix:** Re-fetch the foreign account proof anchored at the correct reference block and retry. + +#### `TransactionExecutorError::TransactionProgramExecutionFailed` +- **Cause:** The MASM kernel failed during execution (e.g., failed assertion or constraint violation). +- **Fix:** Re-run with debug mode enabled, capture VM diagnostics, and inspect the source manager output to understand why execution failed. + +## Store errors + +#### `ClientError::StoreError(AccountCommitmentAlreadyExists)` +- **Cause:** The final account commitment already exists locally, usually because the transaction was already applied. +- **Fix:** Sync to confirm the transaction status and avoid resubmitting it. If you need a clean slate for development, reset the store. + +#### `ClientError::RecencyConditionError` +- **Cause:** The transaction failed a recency check — the reference block is too old relative to the current chain tip. +- **Fix:** Sync to get the latest block data, then rebuild and resubmit the transaction. diff --git a/docs/builder/client/img/get-started/account-a.png b/docs/builder/client/img/get-started/account-a.png new file mode 100644 index 0000000000000000000000000000000000000000..4d01f73a56fc993208ae7c121cf8bc80a9303039 GIT binary patch literal 51865 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�hP|`znR+q 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 bH{hYR1{gc`K30(R>VV2E^_#gj9zFj*8Pi$L literal 0 HcmV?d00001 diff --git a/docs/builder/client/img/get-started/commit-height.png b/docs/builder/client/img/get-started/commit-height.png new file mode 100644 index 0000000000000000000000000000000000000000..02693818714b3007a96e080ec79701f4819c138a GIT binary patch literal 42255 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 literal 0 HcmV?d00001 diff --git a/docs/builder/client/img/get-started/consumed-note.png b/docs/builder/client/img/get-started/consumed-note.png new file mode 100644 index 0000000000000000000000000000000000000000..391ff1140d7557cbadf1591d59168cea79e12edc GIT binary patch literal 45808 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®>c-K++v_MDbbJo>`~A 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 (yAOss(ZCL=6+3 z5ANP&r}&jHTY#Nti)N!?hSSRuSBnvST081GKtSYKx24+>>(7~Y;3}a2CXv}6Z9d2x z_z|!Doi2~o!agVC8=HJo(a+eoO74FyZ%$7sJJYLw%_F6>eaOw8w*7+$)56Xe7+vK74K(gB4|jiq6vQ#=T$D5#zMw-q`(+vFm#eo zq{MWH%Q^&FN@YB^h-zRZFTyY0c+Go1U5HN%qIEqx;=Hv~O~`dy8A9*G2MwDh*JR2q zJ9xZd2V+xl&i=P=sERKPj!4uKapO8^8bPW)h#HAedVWRBHyn?mt>K8?>EBCY8n`?O zjIuf9A0$wCz*%cgKVXS)6HDFtyT~bk|6|(9@LkS_a_!^HER0BUqfz%rJ2D^DgQ9r~ zEFe3TnWSs{9n}i!?ex{x-<1)JfzrFWaMuB}sGU}QS?!;0wpnLS;-zXD=kmBEjC~j_ zHOeJig@^7|TLNoXKE#(slIFq4Gt0|1n>}+RfqtYKOrX7#sG{hb-$zMj%}ySKe68AL zRN2<%pMJKco#r$$0GZg8^q(}}{lD0I^LVKDzkhhNZ)iD6+1ez8?Aeo$eJT5vWH%)1 zSVkR1St}ugB9y_%9y6v=gc$q2WZ!p2hT(pFI_KQieSNRr^*!gl|GmHGj~+cbYGyw3 zUS6-~>$%`8Oh(eOsbAgv?3BhaG`Oqv}1fKbx9V?_D{PNdd;oJP>dqggehZl8rq9>&y( z+dqvcNzoRN37y47E<(*#=H~lkW3t{Q?CY{|65F@YH|^e^cA#l3lg75?IoIBot|f4d zA%dew8H!4oB+yYkUSOtH@5nYPFHV0c)m*5u*nt z&0?2>+=Zy!?A|9|dbAnE9a3G6ZA?G6e@gOKf#{#^?1x#=>s~BS&DGzmbrWJHfyh;| zcu`VIUk<;ql7-L0CO)_!U0oZQr;Ik$t5suJ%wmT-Oh3lUUpt0E@WrfI20Y-K3|xUN zrkAwTbXu;~vtvDgeWdd)b2jDMGFj8BO-_1$KxXPXPAhteK*ej&2$KjsfH6gSb!oHm?!Y_PR-O6S#}jRh zR(|#)olB)Fq1IdyFq+djM&1Y)s*UiNBne5-den|np6RS8^tPZbx)7Rp`ElLACu2q? z6`z%x(D!iPPuVH9z|+Xkw!yRLlgurf*A-`AlGt;o;A^%ALL5!cpr(0x2(zS*_n4UL zNYhTJ8wFWgf7v{l3x$gZnx4%gFHct?m-!q!x+8r_LC2;ywe_{rW|?}9*QRk|=4kNf z=N9}oH+}P{&3F*9FC>SdQky;d@q|TH&$#kcvCX{Yt40eQE|>`N)OfGHShTH?p$zWj zSgV1)xd|Y-fZ?S8e5xTFkakwX6&c3T;qOt@ zWpSYR^FH1O3Jelw&12ZnK?P|R&GO-`?=J*KYqRK2fWrY=>5ZJrde5Qzha-8qo4b^C zE50Kn2}|Il7Rc`-TR{8#YDS~rvsGNw{kOf_3XieyIx;W&f?~F;ytII-Ct(4ks|wJ* zi=BRpRD^vaWE0YFcFn86)G#J0TdXJ=EDzn!8Uv#6I`ah+6}_OqwiRQ^?x5BWy-A;~ zes6En^O&5zf%ooJGiRA7bS-Mdep&7uf|2L(f)R|n!`v5SLmM2w>C-S@)UY2S{u-ulFd zZCDX?AMU`@y)wW=_;d_iT*ha~V#bP`yq}MWF!0LZ{g?Oy>^CS>P|%K3&%f%QX-xTk zZjHsd!%B`?_*DRXEGtQI%%e*A9cv^-I=U0L@pWFzG>Y0%wz<@%wdiCF*OH|RdACl| zIwrts6VS1x5*3Uy4)#q%Rr*lv`HX49LhSqLv-mKJcoz)Kw)$E{H9pqSI9at^L(P1> zTP+wn*X_+|1^VOas~X^Z(y5&FOZ*8s)6d|3@RAKzX+@9XROsH*?xA1I6E!5}*T}#k zrryaIL3BssXxaolPxVJ~7gw6{=`k2risMD=rPOH}-@5!|>IO(g>8VdomkJr}vkI@2 z9u2-l@Q4tbnefI(u#y*VdGJ_u@XDoZ>Wy#{=o1!mcin?S*Q_D?KqLR$VWcjHTij6 zF9P1Lomh#i%3Bz@45IqFq+TqK9tC8`(?a8tLt(<7fkm9M`B1s6%HzQEnuyJbMw@FU zR8gd9@=dD^0%s<<_~T8TB91Eh8tz8LFmSc4Jkxcq#kp}k)M6tgzc-7rz1<;PFR>SI zLSAl?(wapkss(1slOk*HW_S@XIsf)jNmm%D*?+}xI)jHum&k{Q?QY)%l^crM73&j{ zg9$*l3C3bBBoIh_6NOP(io938g2QQ}qPzuKIkubwnIAkkb=iG_HqH?le|7^glQ8p9 zpPz*h?ZE3`_L|`d<-=(EmM<&M+Le6J{@wcPI$y3<_EHy&G`lZ#F_ z0^^TLEa>Nn8C%O0S%VRp946o13B1N8c*F#IVTu+GC~VbCMtL~{G#G%%Tij4em8oe~ z;N8Z78Gf2*GN~}WyZl`JnEWLEX=mM}?za}tM_WXXTcqdJS|TsdB;lThramHb@wdJpjVcl|N=*2?dVgg4(rVzO%a^+?CM;C;Y+Jw2=y!4&&>BI*f%jXdTo#)9v29%D7D!t<)sAO~fp&80hs!i)P}jsK7xUMQ{#^A( zwkM?L;jjLtUmw&irehpkQ7S*|LR!&d*>LJ=cB{=)#i%4};n$;Wlc)4X(H#YH!)6@b zW6FKOeB2f0?cB-o&uu4ee_*uQ5@>BqmCnEjo|w_etUx-KJ20N}A|TX=V6y+LTjCT} zi?CSy7(wC;y;s{O=h0nB8Lof^2@>jR3(6l^4mJj9AX6y;f%X#E=5i$z%LF`vHc z=3$Nn;1jf=O%nu%fU7G?tZ0e(7aS)J$?uE=;~2r(>pP%>C!Ts?p5;|>t*Oj zx%lz+O26yFqaIEP7A?(f2^wSgl<(MxKvkC{XT8e(7;@o=?b4eGzr<+K_%)Ntnn^>^ zKh}C27TrIkw^@0`f27V1NO-?SL{b5qBr$XJ-d|UQ(dh_+9=+?>&H6si+i$#$Q>U?SxLZx_W?OE`U-1kIp5(p~&3p{FJ z+tMs<+V5R|e1yw0X>0HpiMb7!a`hg4DhbrDKjRr3oL);zyove@f5@a5d8rGb=({{= zE%2a}7m>}tn_+q;$L;u4yJzY-5p+Mm#H_o}_?7-b^W^V+vv62@Ht;;W+huMTt->U( zPHnA@f%y54wdz(u6Rkj_y@WV(N?`DlZYs+}y@zi4a*hi7Olmvec41n@f< zM(#B~ZYKw}I7T91i6$k9GfP|0C+3_cr+@mj?n9aafTbM7u{j@{*iG!J)%;kjc_9?L z>je>-^>TtEE-+X+`+zUdQEhefI?vTsCKqq}VK<8R@{g|~MI>A66~g&H2XJ(KzTB`5 zhhcAg%$V4@OS^QEg5L$SDy{KG+0TV5`Q9EPfq~-hT^r*F`{30~N&<2cHjv9*0{_&4I$Mgw<{`U+u^2P_##@slV!wp|%_&|64lvrY zn7wA=$1O&yc^7fI$m|tu?mgn7L)G2NT(O{nfrE@1Gej;Ubs`W#7a8lE!S z%I%A{z4km7ck*e@zH0R%Q<)cMfO*H0Z%|Uj?(6hL`H)9dlNf^lCKZi(E7G}f2@K=% z5^p&f&wKzZO76C`flPbVj3;}EitN#^M&bc{u|odKzF(2&ccBZWK=m%xiKdJQ6lioXwY5bj+iM zPBxjmv4~!{(wL9_*&u8@|O8j%xse*~^DG0+`!y z=W4mimTc<`SUoWaNrq}#9qL?tn|#!)^XJ*11?jE=pB1j`@99g2RB;*7ytweS*t`vB zqhWc!D86FRcy#~KdQe3jD!6(pE`MOCDSF$h=&6+EWA~BvioojXbe+U(1Sh#hhW=aw z4?AWS9G4tBz=Kh$c=5noR#x8U)2GCo*tTCT(|A{Or%k`UkDo@(sks}k6KvT;7U~01 zR0WhztgTKf9S>Or}^6U5IqFuv~V$eeLxmQ9|@; zwH8*$?)ZT8DwzHSgK)0Ytrp7vN+L8UJ2WneyXp;hUSvm@t5Ca`Y?_1p4=m!oj6W7} zCiL!M$}m+CKyTH)cyq+2i{G$z)I{8Pty{}~@+k)tvLEVjnIoLhmcI`1rD;Y?%WnPR z^tIPa5i<^TF^Mw89ChC;y3@Z+C_F9jXTFMIPv6wrmGUFGjyH1grIOXiu|gNIFy*yS zNolaru>=t0QLH7jIdfgRO59Q-k3?>)G?5cP+tKE^CxPC?*6+pxg1v7Npi@lIBoVfx z75iqYKzda=T=0Rw{p+J#f@NksW|Y+J4a&59duLT4~3P{Aog0Bu^s=>Qnh8?#31B0A~=dq|Y}NvF#t}#X3&fB{WON zI*$ws$~`}(B|s`jtYc|jeWo*lP24E7E_I5fXUWN=yBS5PEAO9RwDwGUzPx$@XRDL= zq$(GNkk)3<2FlN+_k;=8GvEHL_lqd>&E744^vvf7Sy zH=&m}ErC^IauFuloBpv&nnXm2?2aq)e@-VgmW1ap>wV%A{j1MF6y|G7;^_BiH#2H5 zH`y~*?Ko-MJlUGO{4!FTDm?0G|8u1V{ay4=KdoOO^+xy?*LiWJ*8f)IQsuK2t3l4Wap@f zetp=imCm%3C$;<}76=<0UrX2u*{Xpe+4D3uwyj>nO~{Fw2yy~>H8y2~p#*ld&WlCLPxK8?tLEvx*Ij7IxA2!>r* zn`1@YX=KhKWV~ilD7yj^lJg(NGYDr-m+~WJk7F0dVh-c3IF3WyEWoS%y-D=EY`V z=+9f`u+}Ur)|b9w&w|kB(CqqH|ICaeA+#n`u!TPz* zh~0GkIF@f%tXs&jAO_4|8L<2Jq?X|E_BZGjk(J4u^ z=rWM##m(C!flPQq?_;_F@024p?Xe>d-Xf5j#ij3sSo*}2#g@S;y*^hIjz9sz2*3?<5Z zZowqeEnz}qC~v|=cT*|9T(!An*(a-Yw?=I!a$ktnkqKky4=zn4aum91i+XR=C1Blz z%g}^F&ExbpiTCy^lUfMT)LIJ@L%Qwzon#n9ix4moM%_3KMxEd0aTYYyjJUrfQCn@T z0gQ;*@K5+^dlz_FI?|4($VUNPVip)``vAw&Abi)q`n1sT=~A0Ocm}dJZdS|wxVQZ? zB4x<2YZAD)5_ay1uB~-8NRQ>&-nFD9p6$gupbWphJsmDUY->9Mw%=w5-K^Q9v+&#- z5kaP2n2c~BK8D^#KCEIibC?tI_u`zavsB6ueJNsD_yK`vx$)tPWA7~38$f*O9d~q0D?%V*5@_ZzpXVtg^U*y_eG-X}c4K(Vx-wzP7 zYnwGz;hN1bkn}0ypnkH8(h%Fr@$=*Evy$!hqDubJ^N3sQY^*lfpEk3c7A}NxsiVC+lnQPM+}|#k!` zh6tEz+!Ace#NTOkzXjIJbt++sWa&)ilZsrNrUAN?u~8`G(fdZ)w_Tu#%R{3wwhyQ? zOVe`Qg!%IUFcq`MiV%zJ+2Q;zz_wkIVGHG@A(-H$*^(j2^NXI0<2@VX#~S$?0rP5U^-85bRvFB1;k{#{@ajBTvK{*~I07Uu@(f0iQQ+HHu4z_JQng@(FwJC)CAW zJsTiCS%MMfoUW+Z-W%efqrs)@P7{N0zcX^ZymRFoF*(wLuw=k-b}|_A0T?(LsV1Wf zZ6uIsa@zIDltP8IuipikEVA)}x9yg~jC`jr8|ElmLJhz_yBhn?-_rTo-?qd)gE?W_ zym4(rl&HC~z^vsPA=lM_KbBv*q(K~RCC*g~gqKZhDDjYox`c`7uw&9qhKfPizM1vy zX?KZB?M1Hza~efZ&l!@2ieIFAJH_`ko)1VhvrzOjuX=xj17;YvM&tU#hA|_K&#k5; z)>gVn@Q4LP?}e=b3B~G#ScF)15>18Iz-Lv8<52T7rvRIP_ji(an1G2WN?q#R@0r;S zqTHz*lhz+?6T?{a;UQ18N(6u@LTOBUYdh9BN7lo*O;F3ZpJjql|S=#j9q@88hB9`visj8k&;37_MSo&kQ59 zw5lJ8R-kCWO(Cw|<>1@wb^C_QW8T>6D@M584*SPIQY~!KIh+#8f8tcSQyxFPbQpDn zPYoAq932>T(mE}hBM$K?y%2CKKBQ@;jtta-5%P7?w>I`)0F(yT?X-*{wXKF=+2=$q z9$w=U-8nllFIsy{LM3vX-TMdK&e|Sm1=(dm-)*B*V!ZbTE;~KP?)Ua`3pKvN8^3J) z5yBcGWXZyQ01kIqx#Sbm<0otEE|LL%VojQemL^jw(hXMnz$W{7D_!Q;7Wjh)m(7(+ z_4qB-g%s5?weA#rQhwl(nv60@ywCegl1&wN#>>1Z0GC+v}ujBg8-#XV1brb1?63Wek4`V2SZ7Q<(J-$+swxd zxH@~VifzA~rscN1i|?%Dan1?l3WO`qlInN?1GC33-EpUqE0wMJ$$QjIZaJ9Bfj8ey zbR5r63^HKq<}aC6ZW8NeTyX=b$l7$E&2cyBjrocJAdXB@FA0&q)us22;)4l@)L;Xi zWwFlfu{P9oe?GKTVkziI1Xd<9w`xXrW@e$z4@}exEjF_@9uWTiWW>79?`q@5lO%L^ zn%rHcx`)Rm1`A_dvX1lVcV|Jl_WxK3_d*6*DFaK80fYe6{OaXHgX@UCmwWnP97IJf& zIm`3E6rTe69%BhU)llt5S)3^5^QC=vd9x^;BLl>$F;VmRYgRlJj^+H(j?HsVNk#PG zuF)%Ks~5}Tapq*W7j2uDjW8ugVu<`6H4`cC2PvFYS)ud{tq837#0 z8j)}x7}}`aq7^!3Qojd!qF0dl|CcYn7;9BO^I$j8wPaey-x(hfv42zj_Oz`9!|_LH za>LzY?pjexjn%K@qs%b%Y9#4SjdR|d{aA-S#eo?xy6y z+0`k+&p_2U=LPf5!|{UZ(hT|7iKbUNV|iBJ6GXzq<$!YV9Hd0LF{RFnn?+B}HA>jA zKL;?Gqttgxuk?gMO-r4;bxMkfGw8&}H7R?|O$?Z--)|c4yo@6q1y7EUDq*6I3nGR0 zVG8J^2PkfHu7&c9 z2VVcsa<3_!6YqzK9aG=Cq*d0B*jZHC4%?UVwtPFdH8ymLoL}xxMp_8q#s`e{CXLzu zc*=pfyS}hAJEz1(0M~_yV=LdKD8e8v&3K%AOb!>=z7ZWg;V~O+ZsKLonqA}lIx{PC zfZ8bRQeI!#uC&=DCQ{job786IOoajt^bN|1;uf!N=MN%)Hz_KSBZtccMQD|hNeX{*|=q`0r6 zaMNHOb3zR4Ql?rx_ydKqwU3!a2g#ezIja2_zj2BQ9o%|@#H{R7uze7&c}~O;#QsT> zW5S27dhNh|f`Ag|)ixp=K2GnX{lj^W8|(3t-!(O&jE|hBx+>(XwoMZ47DPn!$;7-*zgaNH zJ4;w+`Y9=-IGb7%mHf*F!Wt0@a-myxC#{`g3pFJjVFjhxr091VuZc}cIWYpW(w|$b zjNUx?<0%O}F}AkpLun^;FNxJ8`->AMuM4Vab030*+aONrj)BQYbHnmvNVdmu`m>2-?}uJv^U34N2z#aU&+ zwzv52KQ06nn@lOmv57;8?!2}xsEA{z3w%Z&xq3Im^%pf)0fXNI~;A$}8>RaP| zKT)qJrimu4fV@NsAun`Z*;{H5!yy)su-p!`Nvmpknr#9U785R!DTHf`ksIfqnN^X(H=V=!tu`9du{z}Cjyb>UJQ)*(yJ0I-Z3IP+ z`OiM>6RX;vG*JjVh7Xt}4@#%l;;*XA@*?Uvzd2N8{A>y7ULrO9xh)1Usa0!+ZxK~p zZS@%<8b){tFS|?eDqH31yIF!OiCw4e6qx?8@)s7Kk4bDb{hEh=H2jG0O1~Rk31rP4 zl`R-wZZQ#eEzy( zeLq@C>VRh8Wj$(>R<~X~&=!o0jKHHjSf1$A^opK#8}&BZU`2Pzv^#)DtH9$66j;U* zGkqI`5lpO{3ymi*hq*zD7^086-v{o;M*b%iY|)OXdlg%ELN-HyV%?^|3-=qu6zf>) zHyP-d0wxc$4C`;v99{Ywzfvn0T4DrUJLe?jc+NY+GM6!*0AArTuw<c^9KV@wyIEwm)w!%SIc97okI9PMD>~ZF z&ux6jY>XxuzUBgDW|kb^hZAKEgtQMk>V{ff%~z7$oBR^Pj#!_h%mr*oB?OoQ%{w1` zU(`#t3R8-%GA;-X#+0zrY zAj_IBkg|h-g?xqpg=Xi=oYA~vhBxnL@-PK~Fk;`CA4=BS%vYjMv$kz2wbVKK-8epb zmbt-kLvU}(yXSAJ!;_VLx>*Ho)QD`O54+d?v+lZOO)^Iv;&E~fpEk!wuAxY-PWMk0 z4+B9fGu2q2VnXv{jF$9Ru&$nH3~(KvIB8*$mIR=w-VF>*8;16OZ@qUwfDT5J)+Rkg z*Pm@R=-D!TEb>tJ7X#S)@&_Aol0X|fe)Vg~+rV3SGM`X)^6GpJ|J$67^XFda9Vke< z<6g0t+Jp#iBV?)L>e+~<>H@f3>nKM2%R4)V*+x;whP19`B#J9>xLJK$E%*l-)(4mU z%TN9{6T|x|5%-F^H-S&a;t8=FPPk!_`;0Qn+8vOcBh?24X8#U2z@+}CY4OLKd+oYs zDj1|L^Z-nk_(FFrzZf24dd8t=XbvAws1 zvS%M;jM+e*m(*u)TWR``5oKva!>e)g|F`!{w?}<&$1FHw=Ynv4B>h?I*4_8&F-goQ z&6rNjlz-#hdGqeMCnr!x-@kCJJYKO{zDh*ww13%k&#UR*Si% zIBj?aoF@%y1(*M=$DqjBdGG=W2IDMFL~cBQM0V`459KQ|>;NZmB-=^3r{aI4&+Jn8 z0b~Dt&@cHO?L=JmbBCX)1!;(No<*!`0(I^gR_*|o!m6ucuh0Ik&+~tETzr)P=7_!0 zCI25BV8ix;i)6%OrzX#8$_cF|#o&WQH{oUVXK7u$<9_f7W?BA{2 z|MS0l-x=Pr=hBaTzrNC-M;`&SWz_`sje2SzgXHKt|GyuJTA=@?k@&h zPU)m}n%7+&8{N7{fNMmZ-~>%{+JIcAHi@zS7pZvav+zXxa66;{1OAml0x1-Zhz|KP zSSPW^nBJ|<1&85>JC7RPyir>X`3bE2#O0 zCwF@8-26K&e;#STG2+G$+X69gE1X58`avNHqthUW5F1V(G@J7=xCB{gcju~?fGWNR zG3=ux^@3AV;vFQ{!7=N-l3@UCr2-tqnin``qL5s`Z@K&@E@f)|+?wts^SWEGeq10c z(LZ~}vESO>((+7L_~Fj?n5*1!VtG&Ys9>2mS$=!CQ|Is*#S1S|47rVr*9za?vb-Pg zW1ZGBx0;mGEgTjn)xI<@8ye>}E3^8NOqlH{qq;|&lc+Q%uxkxH8pD2}N~L_5rBaPQ z59Gc~POh!34fRktc`&!nWMpI{rTTqijQ084n+A1tbuNdurLqNL_nf?k+V;1T*zUFee}1OfUB3vhvBk9c5RQk8Al!NlE3EmYxv&a&7ND>V}qv#^ZBc*c%}sAz5R5 zoSY-6IeVq>yq6}Wq;U-ol zCZ?w5<|7l!2}84bs1>h(uj@ZGv_%eHM$zr~+h6X>UH(|S<0FwMV`Oe#guQEHGg_u{ z6K2h>)|KEewJ&XEW=4nJz|{0YYHF&^N~>o5mbRK&XiICWqCX$op?~&K=6L2)kD%~5 zIdAZIa*s)`zCo1w;^N})+FGZop|p&Q=vYF0{G0OfzJeo07$2W!ZEbDh*VVPO)Ueoc ziJ}i5xLH_O(z9_qMTLcNV$t|RkGMY7M?SI&*D7|0wTjc1_=B9Z|KY#MtR%iQs_&->d@FRZW z_c;<#Z>!J7-?$aqkLHDE&uwdK>v_yET1KuY$<);Jd0^mnVZ5`l1D9G{;Ff+5FSE0Y zi`vP9cRXLu=3ma*>xq4M+|jS9s!B*o%JE@bd_2!42L?VFv+=`n9rOqf z4_~BG9qJuZ41Ih`?YZ&>HO-r|Ydl2D>gzRyXKW9ni0tGY3jv%->jUhyp+)7s@OZy# z2L=Y}>g(Hd&4xHnt#^7wH@n}u^;z|_d!!o6KUkgcBR^HP$%)ZvM}>)We&g@$?bS6h zvKOx_W+#=E3D4x@@W0E<6q>oJ_wq6Sr<>YAK|!ZAN2YPrs;#Z9ht}_&UfA~jTnDFY z-j>ZH(Q+EizwxRp-{Y>zZenI)@|NwoL{s$c*7M@x?bK|FEBebb)Of46{>2DJx!GW= zQbwF6S8tL*@x)5$cQRS+5^GUVYwJ#BB_%@A?+bssv3`BJ`y|yL9FT6jwRLptB>{z! zDM#dtGrgD&v*y=w^AAT)@EGhp74pL8;mIA1BIz%3-l>MfzZ*EGcPs1EgOe>UUW^@7 zu)lKad`{&-hqm}zC8KeUNrOIbW0F0vz3brT>mM{M!_{{rc_lc%9fZ9^itU{E=9;Wy z-C|ua=LRl}RYJ%Q6h#9_4B90mq6++#*w3lII9M6Uk?hV*Lt z(FGcDLY#hJ&!r-YT#*y5l$-NEK3PIqWwlu0@K3;p8Ni~@S(1{xxty_lNdn2-{0s&E z`Ws{FOmCSNh?tJlbU}%ldZ*3E_8|$vd@Lc?YA@pCfP}#6v~iiNfqB+v`;5e+n~>mx zZy|tv+Cy1?>g}=zh!Wo3f4t%Ksdxk4-K=*mdxMZhEd$&p*Fq$0@xOXrp#3vJ8dOo! zdR<-_!VUie-U-aX+rFWt!XJ02veQ9GG)+aj&GV?82mMd zLd#Bq{NVfy@_}HW~C2)Cc!63Y+48ZrB$^t z_-7;Mfg*Z(CRWbw>$+XrM*5h`C2ZA#@9ec|?7C|fj6u>~4@gq6c#s-gy!r7SqN9A? zDAFzK;udZS|R*0?cP%{=J`r9>09kl_|ssDf2QHh-F%;Mo&_a)>iz zUHQuIkE_4du?rkug}hJhog7gN% zN~wd@ShpiF(gqtKh@wH%)Cc$VpDubE;y69dsf#w>Uo;SXSM_^qO8(|K!Xv(~DWENi zdXcyWWxBpG(>zRx>%@X#h4Qfi-_;te!pYKft?R^EIPVZ2)a2prGup`|JSKUkEgRjw zV9xS>{i@wQTpiWC&a`tH5)N@qH5io)$VTJcfX+%Sb7Bs$mPV{53)m}sA+OWhSc@SK z3$@wZ@m8F{-ONGpAW;`^Q7RzXVHa*w;-c!2w4#aLa_~Q~oNRfg;x-|kL(q2=EoN@x z-M5#&sN>eaZn>ZG-V~rOSgB~wD`43vAPX+f5bD~{6^2XVd*Jg_QHRBZ` z*=3OI#wTt0yBB;P^(z*AX&oF?eSvrs6iLYB6mGkj->;lM7E9aJygSn^7aX60pt>4%mkg$T?zk91laH_$X?xXQsYFxjC=^+ZxHh2%&kk(+o zav}E7X#tLK@@zH~yYzn!n9J-uR%qL=Ol;K&&1qNq-&gft3;spi4u@T+A}M?vm&KF#Igj-}cL6r$@IDJ2ZGF zwm#h@4;>EQ3NaZ#T1IQj@}I28XroI`;#+X+AhY1TsOO-kl|dM2Duo5sPK6M3x)jPg zy)xG?N8}GUSiH+0D51@x4s;*E*`%m|&-TFh?XhU{pEIA{>ZI0ujxaFCSdVuVIu@z< zuvR3y;`-i9gFFIE5Zcr-)A}KCwAiV3*qAQUCh{29!D38Aw+t6&{Tyj?iqzyHX&-qi zZJc$xKRhUG)631#ipL8Hk^P_G@kLQS42JL`g!U#M>2E==Yc%~#>_^w_zHTfoB_0Z> z2+y&J`<`tyCw?41F1}uDIJM4KTJ$#CXvkyPUu0>$R`z<&X&G#!Ai*eG zoo-03+6&+=RX~1aQs1eZTgMFYd3o0KI&QtV5VXgtIs)+y7h#3Dh@!%cW!i{9z;PtU zFo;^IiO4Itzr~P#fD>BQYoBYg>3K(J-<`oHst$o?wH9f8t4LqZYwwoS7nl;_klEU#<@`0*24eR34>|!51Q##%pzu4!@-crz^ zRqz$}JQH~ceOZkDkQ&R~-G5z^&21?SrqXMW{r6CTQAT9u7$ZV$YRI=G=M~w%dkKbb z18_TBFw29)#F(A5XRZj4G!LFp**6dx*wilU;eK!V#+XVtJNmeS#1Tf4w;@mKfvBZI zEVP+Z^Uy&*FU@*ic>;-E#JAqpRNj?8Eu~=4NQw4K0Zmr+m!cj zqZDvU;p4bbFJx~f1}c@4vUEI4m`ji{;aBqAFNb|_Hl3bm>K{i^(AxCzcOmXC7>J;x z7Btix+}Vppb0^03{@dH{*Eu1KyWEPp={ZumQDIx`5dJBW`4!HZdzKw7|-pAey z7js9HOz-m0>U_Rv-#GB~ z>mu04KgR-9W~#|$LrXe>?%VBz!IbFUco}no%YocYhzJY|er^2Zy?fsMt=nT>aIOTy z_n$wh*IC|t1T{UrZr8eDye7_S&`JQiFWqLihGZ_lnPyKMe-$@ZY`5`-Z(WweNcS-U z8}PUr$pjdMDL&L-{y=W}3>aEe(bw#6Q8R7Lm6E$VU992yP}|<^!S5FT_tnJ3>-%od zqiiZ%*0{(y9}AFNg4YVcqh&W*Opdc>mKbfP@6^`H>#{tsN`UJj4W|W31Gz1_YS9sL zus(CaMKmon0!q*2iDs_sV{8Pt1uel>Ip-2ng#cJpS}OYLC}5>JJ8a>=W;84FlaWjQyQ0|ga1;oRtlXKJeBUYarkL5?cSq7F9{ecSMZw-bZtw(q);W!wR~|F=A= zN+zb=46KH>HmzE=RUy3OR^!48-NojpTqd}QmTE%^CS864xNZey#O9Me2dJ`M2W)NH z6T9TwKBUeScgfuHrN|1Kz|Z$vh=k%^RYq@xs2(`46)(aqqc^oBYM=34eq&X9?-2pG zX4CGtjut5VT`6|?-p5tdR~2+0nXiS)7y6{>4ZQYQ&GwXKnS4A@4r%rxFWs9|(q`9M zDabG(7i#Hrg>ZHm$uDS^sc7($6aCV<`7E!72lwF68KtwWrKIZ_n)GGUd1{Y%_qFi| z9(4P1NcoLf=1zx@qWziznRm4dh;vXq97Zr(9)lJab1*ym{Jx4k!PAN2UH!4s%ar%Y z^JP3`{nKua2T(eT%9z!OPdw?3DAq^i8qKBZEvY4Ot)aj6-|0CjmBSGC{FFk_13ZVcewO=aRh1z{&>!}_C9|slTGWz#Zyp+7Y#0h zr?*Adxl1{eSo&e6-l1NvetOrm3MV5VyIeWY;6ByH=RVQIDYF6?E2o(yZ_e+`1`6L} zHrgs&_m6<(vv7CXs4J8`S9*?0a3d9|IE$)-NI@J-oBW|PP&kmznf6Uw;#h!Jmwm=O z#L>paXTqmllQkA3O)s6Ts$)R)L4Py=21DvWj6hvO!zs?zn1;T%ByI?&&}UdPu`bSU*^8&baECUBIJWl4_)^pre3A4>gaXzi7&5ww zIBxcU6v;jr@mjqAc)Y!gFF=&X-tc-e?L-ZQJP6!HuPPt`V4mud3QPLJtIi?LV)Cws z$c=y$X~Qid;0IokX`!0~HS9$&?>pNX(m(Bw`|G)c1XGJ%$I<=D9%l7u(V0Mt0f8Jr z;nP->81m}bFr<~)XySi88zn_t&}eu*Etrvm9lEjDIo-k}A_cCIy$EdBTCVx`C;Sc@ z&--&|)J5l2U$9z^CHBKn@BnVQf-F9LrSKC>=d_Yu79HC;-4xZ&K5S6X4H{SkXK&_5 zD1x8C=pedH%I6LkECiQ0SX@A&WgiVB`Bewm40?V-oQ2EPj3e*AgfVs24S{{A$|KD} z=8|{918pK>ldVjn1d;uvHR0;?Bvn-YSU9uBk2j%ZT<&#^&=H_5(c_31jYWG+$N8JbHxGkso)>o~J z^-&wJ&@1rR6`cDt%shnLXSzhQrT$&p_h*6Z*T2KY5H$~jFBPCh7- zSw?@yC*^)1lnlnjwdLz^f~bzLIf1P?lWf5yx(0|g75Rb=WZ`zjQIPP28RIEgd#>I8 z;KYeDycq=ReV>PGTIn0V_D|t{cbwtU5!io@a|r=PDjHrZL^;@ZH^Buenmxv-DMwqr z19P6Vx=!r@`Q2>4B>|yz*;M!d5E4G$fo#|oHer@qCxmU($NPxBJ{puCh{)m+^g~VQ z&=tT~^C64_PS1$D4t{Z08!T`=!GPTO9;O3=IYF_{f%PrAQ5CSEtecqLKOOT9T4CRk z(Rjyw_(+D%R`Q9xD6t`b5nrq#V|yd&#}uAqUQ{>tdA|T_JvdXQn25HteP1=13hE>! z{_%w7Dj4Ms2ztjq|LNk7Hzz)G=$r#kh;6WFQY9`XVE2&zm}~8lVJ0mhF>EUK@9+J2 z|AQ|q={^Exzy%Gt?qE?Vl4J60(rb~$fV~WEswQ8=Zw(PoXiY8LgkjdNF-LQev1PR1 zN$#M$!5D%{oTP^X5)vHcz%}YQbZt~egl55UqUn^<2vVTM?dJ;yUd#tJ=G{`fA zrFz7COLM9-(CLvqKqLDEzdaXN%MKk{gXalILdvvxYY}^W-_Yjz93!LL#+?p04)g2M zhG1LvoLujDKLgYHeMlR3w{%)ONO))!(Qw5UR@Ff8%#p#iIu&kX`-MP8**yTpI5wp% zcV9#09-m9?T;lb86rd-081;RNMuyTW4P_t8Zx-U*ddDQc&n271W=>Fe7b;-^?!1zH zQ-vI_>nsop|yynbzh(B|2SQ^aA}<%Y36gk99A1Hdwb;XcWb%9HsK2>X1)A@ zaKkMa{~SeTHhIxQZRWl+4cR8e-lZd)9I7GWJTafH2r}ie->^p;C-E|Z>;+Nx@36Hxw5HumpHc=XL7jfuqUaFRdLr&VF zApEZB&I>tDm=!`f0ybP9ovI9G_c{M%AxamWgft5Rq+UCxP?H0Az&T#ql9L9&iIn@{ zIua43+s`iJ^BmpEy3S>dXx|WUNS7Y2pM6Lr$o=NHfo2#^Zd46khqq5zcq}#`!f@^y z>JDI;JpRRsLv0SB{dS(#AN=~^aJWR7AE;2+V5y72lQtzy=pi@A(TMiat$r^Oa8}#( zOf|nstuma%hT+KmxtRoNfRM{>rZOG?VC?|}(Hb#awK3 z%=Lov#bC-<@>qqx%450|r1X22PEtW#M89=CSUi*n)3Hp-H+-%^;ZQNxVE);Gcw@Sc zmnxCLA_C$WSLnS|tIWC7`1``3%wQ(gwXjM_H5+vko6zhqR0kZEiOi?1+wNt1bJV@G zXw3IGd*`S@dKg(cJFRc^Se0YjdbpMKR)iJtsgTd|IFed*%o9!V?o4nW_AeM*4|OX8 z@~DDo9RBHDsAi(C{0LtT_aDqm*jkd?x;|OHwYeU9r7_$b$MFwp7aJzzp*;GDxYh0# zAmkQI8XuYrV?b3(NdJj#DmHT$evPIfj&PY{L!OnLOtVN*Hv){_nBma+l6`L|=A%m7 zCD&V>s*m2&AaG$1(oi*}%@>Aos$GZcJ&1iucv z{*WMz?mEqj)c{Bi0~~y$V%VIw)KOeM9uOe zb4m#A=hu(Mg?s^y;my--f+EKiLXg(;QTJ2Nxjv#uF_uQvXwM!z`q@>g{!$-_)=hc{ zSl-3uxqeasdd{8xCqDER6i5$QiWMTNK*?ik{~dO?*z#nnV|=hP#oKjTvOmShUTx6s zpuzV9s|X2I6S^vNXsTl>r+EO9-c=Ir-kxKo*8Q?lFg>H-*K=rIQtxjSt@9!Ew{DO^ z*Nb5BkPmJ3`ha(;!hyLui0nuUu)XzD+?gno&AH1F32JDv-p%H&{mA4i@893iblXnt zK~eW1`1Y&jeYXv^rkc{!9^uk>{>fk6vbc6?eColHvXI|06&v(zK#R>iWSN!M8A4DzF|AXrG4}|}|*l!0>P8G2>HUIc6 z!6Oj=vl9FVFVm%c8I?mArB(9wMq^RrJ^{|8V1kG}+8 z!1jOqY5(&D{0#!}pD*BV7VCd@z+Zdy|6Hy9=Lq`u!`93HIfDLk1pVvn|Npy77!apB zHP5*Rpol(z*pYq)R-<0ZB+OAd5GRS!shsX0_w=3%_W_3#?*Tx-x}pxiSW7?+&O55{ zc=fm{djnea%)t;0MHQgBZ7$vZH_Pg;3>v6@7Uv~wZr%*%J0vf zSm#>_ywF3yeE114#9~6Ur%TANLcgH6^b`kA=xRcof%}v?*@PFxTuce4BRN%*%}^I{ zLofd3_WiTWoeRBOyX_wITmhgGI99_7Y?aPCO)6YzXz^b6>xeZ%lh56GvmJAb@H}JZ zZm~a>#|20=FToi1C^2}WXD7;pR>++E&t9zld_x}UrtBLg4(xQt``0GL&ejZyG)*LQlWu4O+83u3ncz?SHNovT%KjbRr9D>GuY(&VerwMfeT zX`Z+G69I_7JU*hVR^R>kE)X7~dz2Tsi*>T_a)5o`^i?OPUuGL92EL%9RY z7f*f%g8f5(k;8v&p?}*bG_373K8*5%_fr8F=#7PCMc&Co076d%_2zNzO7et8(dqi5 zPvw5s=0Fa703op$k^C-Y!L)qf_x=3mr>>(%KILhO@+gv@l3WOW%j1owavm6FI|0+o z5=@E&qL`mF3jC^$wYwv1m!6zr{|@H&riJ91!$G0DJJrmtSIonDddBN85sU>Xx|I~%O~ zN{vzT;BmkR)Ffj`C1M~jAGlaS(ZbXlQa%=sn27bMfd|Ji2{J7@LP!08`iZDKeBu6QeD#C)=~N zPTFEg0#vvl5_MB`;GdnFCi@D`qAuMX{x%OeH8J zotg*vRE!3vb5(+XftiP1Irn$qGg!ixl4(Z{ZhFSxs`ud+qb@>X^cNZZQFqB`Etn0n zQ7JPfZ9TBYobuSReuDwPIyv5^_-=hsmC3Q4DCIEbLx?svBrXvk63a%#WAwjJ5s!}> zUMB>;1^B{V8x%)^Qljfzz(#_5KVLZ<4iCEzSKS!~QyD`~bfaqg0y~m@U_>&+0P*TG zqAdVwWceM4alY}g{ofbZf7K3`efPj~_!T0Sk>r!9eiJ~?eJm~nS0fYM>fNQcd}SZB ze!pybw}0B@jN3N~nd6ul$NF&c(1RnIh@Zbp=ZNe6A0fg=a!FD|H%xAGLJ>!umP9$ULWtRiR8D+F>{mY!BW9<|QBKJwXvtE;}cFem?_`BVc8O14Z# zWCRcn{RuKw7BdAePH42L@snjJSA;{1-b&U}o$>T;@pCNo{+E+?$)JonXoG72yC(iy zvroSbJvHqUe_T?jzMo-XIp+#PyDSvv%`!rw(vqZ3-`i^FC4x~jmn45r`X zq#P$E$L?ecAeKd>+$nl8_*!16=s>orEN^RH%UrdbW`U3tM=)$Uadego!v$4IX`qh>1S4&u9V-~; zx~FQ`v-V{^w1Neb^yd<=VuTnT1?q_Hr|ex`YJSZ#m_W%X;FDsa0r{-^3x&d`6Z`Pj zYoburgXm|oE+W)lQF}s*=2G~ZMX$&3_{1buTOSC07%e(zVumOQ$h_ht>_UFvEm11d z(`aHZ^G*-=;Gak;8zm0H20Yr${=$#(b_sIN}Sc9Ql z`(EC8dSX`QK(s;sNk*7$$P(T`MrGxP{eWPdCkF|{Q;BTjPIs*S!0F3yP&rJ)TILE8Pz1Q18J-+2rfb&mNW)j-i;kQr8)CWe9x~! zVdkc-U3$w(zGNb}_Veac2c@0Mpbj3KVeyg~6mRb#@cQ@b*^*pf5F_JAP^*SV{VBBL%GY=<4%SNG?hqt0ZEYo;rf+*`7mQn)*MnJfJWgeL1M zoe9H$kuHL7SFsIee!L;4B`T$8`@503^3Z!!Oi>QLS5EuSd_1k36|zf9j@8fonl+{nsP72x;sB*t@d8tN^EY zApxf|mbaG^a*0dUTIS1prUybEzH~O+eMlR^8xz~Nr^Xgp8O$LA=M*i0#g4{^{LP#< z7Pqy>@l_vU*nOWgp_OM=Sk3CFQQ2Z`-|T<9hwS3`bG}}=odi|?1xxiNNKn-i zuI@kP0wGi%0V&?U&%BM(G5h06_nV0n8YUV?jX!Q!Wvvs6th{3k?RZP}-5H!pW2rV~ z$SsT!>4n0;Hh0XrN#;>_#91cVgD=TzNq z^nne&ju6-$5t%0B4l-nl8*im?VRSwBtC$ns+jfpYp~Ubnfk7aHaS25*h2L(a`Cv@R z@bPmL@7VmbE@Xoy`iMNedPbmW>W`aa-Y?}1%}BJqNz$yIe;lYlKleRqVm7h1o6&u95nQtHaZb=L?*#PQ5YM%ER+AG(J5EiBm$d>iYbLY1o z1`5(tg6S{pjwXTsVpGJ*Tp=qj>YvdT72y;OH;Ml21jVo4K75{U_rE*?T5@!^5WQnd zyn8rLLX0YZ*riN=Q##(;e;=iOHQqD1A}i@H-|=I-+HThf+ANB2o>-S)rB2ZnRoV|( zD+fcQR(ze_Nee8Ai4Ww(>G45Z+7i~f8=8{zn_?RMUEBgm`TtzTRA{qeb9=#+_ZOq2 Po7!e>v$<%K+ll`G<9gCH literal 0 HcmV?d00001 diff --git a/docs/builder/client/img/get-started/transaction-confirmation.png b/docs/builder/client/img/get-started/transaction-confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..e535a88f6ff1330017ba72da69a8106229af0f9d GIT binary patch literal 143664 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

PT3Je*l#x(l_(G^`!%PQjD>u3!f$ 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 OK;Y@>=d#Wzp$P!1!n)c3 literal 0 HcmV?d00001 diff --git a/docs/builder/client/img/get-started/two-accounts.png b/docs/builder/client/img/get-started/two-accounts.png new file mode 100644 index 0000000000000000000000000000000000000000..9c989073f37115fe72bc55520aba7559d936e011 GIT binary patch literal 54890 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 NWG~C4NnOA5e*ipr1u*~s literal 0 HcmV?d00001 diff --git a/docs/builder/client/img/get-started/view-account-vault.png b/docs/builder/client/img/get-started/view-account-vault.png new file mode 100644 index 0000000000000000000000000000000000000000..e2eeaa9f66225afa1677f86c23aebfbe2f55e489 GIT binary patch literal 192391 zcmeFYWk6iL)-XCq(IUmANP!~7ip!wI-Q8L!#ocwV7I!T!ZE-EGE$)N6+fW<^8}tr6 z=Y7xl?)~#U|L>l?Np_NzEKOEcHsPwuGFTX77ytkOOHNi&9RNUc2LKSo&`{td8*?rr z0Kjt*D+vizISC1BRcD7!R<`B`a4U6Zyw~Y z&~fFX0&`7ehzJca-w;*hmC{6HeUdp~iD+XdB1m$pey_9gEui9d@M`CFXB6}(0L|fo zj4t`00xs|ktNBr<0n|E4?BVE_7Id!*-^wlnkUokbe-euv8p8jXpWlhV5`4Hi)Itu3 zuhXIUsQ-BISSgjr-oJ?uASs^N3*Ov*=ZgzyjbKRGLJ~_l-O+&da6V@qOZf$OWz5(` ziedP=%L=1a#~z=!>q{dcpyo{~^8i5XkaLUlS?lwnycyK$#4vUOgxt}9IR-utPO1&f zFuUAn64S3DT!*MxQ5{x4u&kV$NF{VRh`nB+qCvX_mi|0i2tIfWjKpK#R0V1AXyD<| zW^fHJmLCj!;4H&%s$^uP!82tI6GekL`-G`k|KO%G{t!!cb~g9cLX6myL4=R`xv4~0 zu%y6?b$Jn1Ba-ewk_uec^tU73m_50upvu(UK3E&){sZM!sHzUAeI$F!3Chc=HjPO zTcHh_)m24%2$2Pxed&b_`8>-7oSB5`_Dmyu8}h;2qOJL@5#}OJ(jR!G4r3gTYd}6h z=IjJ{LOKV7Pj`O3*?+vcqrT1hAWm;MAd4!@Ifcp^9@q^qMdJvwj3i$ZX(Xn^uJo@G z+*DjLbEI57L{~wl2$2cd4^i$slgvm$D(P$w zRshlw;(e8)$?iO1jjj1oP1#%jiHF7K{+?v=zzFrUrQa=26lgCFKaKjz>pR^_l(f1X1)U~$I-#!~zy10Vrocuei))JQ4yja0TuZN?0u zgtBdmXzxNhelsu+eazM<*NB}YmNIF7pMF4rHJ8{k`MNV|*cS!U{{`~%m@o)`(E7pF z0b;A1P``i^VTrDfP>32~7kpNmJ4Y_uFjYN92_h z@mh!I=h3Rs55DUf<99_&4^$S%95;1EZ$>GX_Q<=~l{=^LrZ|)|$-O7}rTNxqn84*% z8VPx1w|bSUV$evhd^JWHS!q}Lx=VY6n`zseOlH`m6Uq@l#}SP(7J9;TZR^X?j=dT< zyIFp%b@yr|6hu3Q_66A|h#^oymgXbw4?KA^!VtRtbaX1M(;hZ8@2VbYnsnEoq%U#krsMCcj3^F9g%_O+T$0Sz7HOo@fx+f7&Ze8PtMv8j9dOA}oqfruAQ>lb!I)hARB!9G^ zB5y`bMdMg)wWz2lt=O|jvJ_2gr=(16zSLQHJ8w`%i&YD#Rlnz{RlJ8ceOSVv=}_99 zH*TrTEvk>fno}R5EdiAB5xdQm)^X9?EIOUuDbgyLE;Ul~DOOf%(6lI4(PY=GR29wj zmuu4r&j0ZJ_sp90@J!K^GT?%)+M(kM=Qj)cEiA+j$Z6arw z%KKcS?3FDhz0P6h<>!;P~2w2EXl z89o`0;v@fM^5&c`q*!KH_|FZv%k1ZpKOA3t*@yi>KbOC_+%=lL{RSSxnF7z4RIKKL zRsnofTw%Ov)>XgPYQ>Ko57&*myt))ZkE#6oaCvIEqBt@?H1<@DRIT>UG0w@_*3RrE zsZ~~2ROdLQoXT&S^$OFw;#1-04ag^M(t}9_pA*rBR(}~E+~wlo#^Oj$x97FvySM#h zN93UWvA*x1U0^!XD%-w&qP3?L+}Ukf)}t7y9|=q$Q21f~W7~S@XUcJTSvg)gkuHy} zo58-GOBrUlP5JTsn60nfk2%dn!=JAgIPHGg%`O_(OB@;=avr`pWScLzw7-0JdvQrY zi$*IX9VV?A+xRDU@0T;9W09NZZqYu;k?z*q+O_kyp8llxA(?Cn*vP;%Q=e7og? zA-a_W5aGU5B^#qGA|#<|WIGX$(^HjJwNo{zvN?%b!+#YLR~5JYicdiLC1v54N#Z?9 zLFQT>MIIJjTcf!G#}-F9PpGb|?d}|**|C(abQld8jW`{Hv((l-<9-p7T4+J|xY~H~ zxQdx{&v29gxk79fK?~QVQ6^|O0*xTZKPV#QgTtjTNUAn+mAqgYA4V1nL)Lo#wYjJ%rId@2l1vgy=D(@FK>@89=#D!*@~;f5yQr>3>uZM z-!RkJn9bZC^dB6~BMF2H_&5(V6*no-u&UJ;xz(I*StSCyFE{X>+Iy*+s$Ye&{uCGc=_aTt-`K58 z_Uc``I5#-QYsiQEQjZyDS=d=Xt)>SNH_1`S-9*J&rn-IIuh6;CIV$EX)7QN47Y5xYWBHTs@sioGEM8kBI!>04{La`fEiYlN$88|6 z^=jt%us^?=)-i3%HK$#FxbHrGIZD9+)VEo(v34grGSrWpk+<=2k6v~2^7wVsD;U~5 z;^TUibok8YyHC!s!m@`MXzn2eX&A{3l@&*uBA@C_xy)YS>=n;PURPdvK6mcVymj0@ zJXC@Qo}RZaCTWvp++x^-rG>S9ZPz^4Pap6%@Y@);ltt{nPB~v`P88dekCz`7b}8oo z@m+VO^k(KaA+2Bvfn%@sKZwwGT~ZB^7j_kPq5dBC_o^)hKKHM$6rxjw+4wx7{_wl^ zTn!GCBItk(Hw{}ng*UwWqOZvt>|;9Sy&^%Sx9+2dIvyBDzU{y(%5~#Ee$lstIM1mx zA3xmoWh*y~7T_RJ)(c1Yxn6M`pGGoxskFNiihdU^_xyBL_G7W>R#rt7ybamR_GrWH zxLz_iE8NM^Vz)D#?eSi0IN5Q#1CgZ6(pwNv*?=UbfD(WWwwQ8? zfabJPM{t$C415eBw2<_2LdwN{=#aVU?8wLf94uqRny8xi2?5l&0UJU9LGN=_3Zc>g zaB|JN5J-ShwaKLO?CfAWZ8@H&9FhJ>6PJk>CBHaE9-v2<_^_osLdFF<#c)pG#=h+aQE z2y*IlC-DAftu%FAb(Ita%^d95K74dAHD~j*bA-1B0E9dR;aNL#*ALX5cDD8|f}X-O ze_IH`^H0U>G}M2axY`KQ=qjmFOE@^2Q}eRDWqV5_f>L6D0_<-&**Q5`;VoEQyzE^+c(U5N(Eh8F|LI54+{Mh< z%F)%z!Jhi5-w&n^Zmz;KG*1Kl@AWS{%{{IDGm^c_zsZ6V$o^Er&cXJU{eSz0g9<&B z3aVOpn%nA0TG_#Q1|LI&hmTk2Z~OmG&3{JxFG$`0Kyq^M{vV+KRrUV{)p9X+mT<6x zkLfD%A9?+I-2blpH=q#v6Y2lOihuF>Zz-J7A{avK|0^^Rj3xknG+d4^tt3@6;VE3p zo-PDx_#ei9rSLo=X#)9dF$(}729T2!*Yrd<$U+SukecbUNv%@AMOOKhNKNxwQdO0| zhbt4oMbJg?g-|k2rZ;7#faxzlM1FQ=5Gf(PcQ5|&bKkx2_%ght%opw-8al4Le|#z_ zDYf`v!Eio&XON1mVYIF@T{%&zV~$OMh>8{f_$Rm6E?Sa!HLa^x5L)0r0t`?9L{KoI z!O8pwH?BIO>H(TnFSY(Z0D2ms2RjJ?7w}JRG$sT__YiI~T-JXE7hsAy_>UL?KnqC% z5CGq$bA%E76V3zB#Hx|Z0mx$iX1wefD8qgCH_vv~5 zvwtFC09?Rgr2j}#fWSDs08<%RE|hV^e{+W6F|7P{yT7ay6P_(Sh93yhWSpB_To4>nac&)*9 zo|6Og8}YYjO7gg<@>fP1Rr;IrBeTY+mGo@M<5X4#kbk<0e;n|vEAMfTJjv!Et#Sb| ztUL5>Jx%Z+a_pW%SnYUuzdtxllz^De>A+0jdugmn^T&_7ZlU~*>yuo6RH9z?$SI_% zTw^yeyL^xoa=-ry{u9ytg?(^{Ox4$WD2~>G*7v^8)0f|$jly{~x7F}`$F<2RT(bXp z&VBeD-YExO&a)RL{MiRM+djv}ezoTr>o(bAu?Jv8`PA-VW2a{Ci=*$~bMDo;`0m~A z_1@;ZRBO(^8yeu^Gb%Bg#J|X{XnM(())CN|PadH_3e!=BjXo49Yq8haICrnJo74y0 z!3O+7?>~SC!(DQWlT42M&RM55t_07-&Qg7^U&r8g==VNcCwEz1*W5`-gr`V6C=VbM zMn2Mt9C^IiG($IO2U|RN34o51Ozb7Yu=+~M5R$uA#+`TZ{fDXeqC5pYst9a-lWpg$#!RCr6s_vlq3;mw z&p}Hk$-XZ4c?L5B1m2BrRf_j%gby4??u$0Cx$cYCf~Y~~m!hc!VIOA{2)1HJkq)WO zJH{S2{AqL;Q)u5v(l`g-4()<^RGVyR0_doY9u)>6PjftH2eu_P>5ht!dqEpiWQ0`x z@So1Zgf6B6{_3eQ8_x?Td?wK&w=IM%m5odGEtPNmo)6zQkYG_2t}B+2yxjG%^f`;OJ;iTjfS3HN|*Za!&Hhz=BHt_q9DC(w}ZG+J&6w10P zfLik!ls~`kQ?ujqV*{TP)R}S|rqZgbKlBRWP48)l?T(M}woCjDaq5I(KLq}Er%+=u z-_G96Fgn=VH}eqQ@u8#UMnaiO&7Z$p@fto1ShE@9Rma}mOKVXbmxSf6VX$pVPSrMW zgH|EXPox5O&_(FkC9}a_OovB~$FkF}H4K^~cse+H7;Itokt!mK;QH%sh0Oawee40I zL6?x!Xcb<8(rpIj2nwF*X^z*?nn+c|6hhDbEh0ri^hP^4{_YVH2u4F zmiYF1QVdF{B3i@b>K+M)O;O8BO3K1)dlIYx;`j(x|I!c`t*X+(qq7$ImhZzE!mD7o z6A~ato%N;t59*OPH4Ad>GbF8#*3PcZ8i^mmfg1=B)aV-)vRG~$dX?L9 zg#7Rjfioq|(NnFQm=PmpPt3;frtOb6Sr0nYJ=k^tdtJiA3r@j|KY^?N8d!inmq*ev z-<+FX-#HTr4g1NnI6$7T+FkVP)WGc*MbL^TK%#j^M`5ug;ExTdSl?H|En+W(O52$MjNAC+90b0j zRV~;1BwtR$RLf1%{)C8X7;^0wf5HLCxM~$!x36R-E%MYeB)B(G{1@N^SGDiHBzKo8 zJ4##;j-h;Zzzo&5asdt}-7_gfxQ~te?j7JvfR0oxcU-pckx;dow!MLm0EkhWM7{9T ze_Q~7j0Syejo~lav~YRpjAN9KS7oO5Es2d?Jb61ec-^;un^GY1)bdzJNqyfJ=)JG$ zB58+}fe#P#h4#ouoDpTvHj>C`H9{6X+vWCC7dSdOPM(BZ;Gf{b27 z78D14tqX|z2q$_BPYftjs}~&hU0jUowGwk@-~0UrZpID5zkLY>lGUu~s;RAeM?JjX zfpy9}mCB}y3F3?X`SSVdUtWYdL+%^*_ph|~mex4mQU6P(bpiRop{A&R6+#B!+lXldf-X*3D&do==ifImY5;=n0U7{PSwcmu0ashfCnOfzFY|@? z6WWZ=5Er^%+1;bS3^AHwxZ&(0Ktwo4#e9{D3nwd3oi2B@@cl|Ffr8lmM5gj1bDSxv zHpUEl@Come3muXbu%gy2W;_SQJVkBq@5TPGt7%$ELBzN4XfCaT~jDYtCYl6PWV=HJT+0@cc6~Bxtq1u*vh66Vix0Jk$C4 z`4dWH1lJK9q4D%j>i;@US)xOAGQyKs6v1r`DMG#{XI1tUT*=mP1AN&sTi+>)!*x6o za1;DJc~zG6Z^anF@t5BlM(bOK{HEz}rlpypDqU-tcCx>0iq?JdfW(NfM^&goqaJ|M_v$tLwKhj0UFm5H zBZiI#N8z_3_zlT{nz41(BDgWlDIs3nu7rd2VSw9s)oo_7Y0t- z4C+Ym4uz24zBLl^3QvMlPe2Txb2kQ6zC9u2iKdyjVPvj(iXB1GlUUg#FDG~bBmg=m z1JO{Q7=r<~Wr`afoA(v@ID_-jRxEY3slC0PtJXs5=cYh|{4Z@`$M(u%I zdx>(12Bz=~fh!dNQ4UQ^gaIKW=WnG7^4pvQh7&0~TfqyTw>>dr3lZOGY6you6B|=g zdcL=f&z0bO(i{MCT7cj<;$#dX{$E|Age!HmwQe$r@F!PKn$WZWF)>7Iuil81fRnYC zPt9xKXP5$!j_W*6CNUKZ*J|Olb*;ZjO9LmBrIQt*a{4T>WJQX)C+1>*CcIp~)=}+p zZ(6|@ww?MqfKcu)Z4<9@wduMnHyoeSV=FK~)A+o>3GRteg%HxD zW&#wG=`E0npOA~gLG%X2v4lhiey;M}Lh5|#2q7_mK4+YY`*e-+3A;1t-1Of4H`|^R zI~r#xIG@Q*1SeW7U#K3_#F_RjxYVX3J)kOWjKU_A~eVZHSG*zY5YKw%gHTyFa-vPOEYJ1PH{-DAq z5M%gESWDB2$J`mo7aGqA@9N#_fbf)eBLdxv(g37M-Z!2oPlAOps7e^T)sbv?|K)Sl z9R$@B&IdKpbk&xG4AH%A;T`|M&n{++F<;}{TQJnt`<@+&Ho zT@M$u&UX=DnT1heRixBw{4t(pg9K^{+fC%jkRwJgX)Xr)U#cIFbwyNO!3=dEsy=26 zwS0TA1R{T}Um8tv3rbFxV>3=QjHc#^_%!<0S8Hh2qGqjZTyGV|Qk61z<5#5c`L>Jq zjF4;Q5Jn2{ShQq0|4Iffod26!Od8G70H%qBZzdfpx90$NDV9IlCzEh}a-9II{Z;cP zB>yjOF*K!W+Mej$;tPKf`G1m9`1HCv|XR+~0aGgrP#LU$SyM-6`^@g;=2{@*c~0J^v4gXA0G z43ve7MSxUMM#!@JqLQKC#q=P);nP&}UpE0T@Fk=BRGg{I=OHKEh;-WdAQ8I-?$gSK z2Prds?h-;_GHzSOFD7n;Sgt)e1FMdsRDsP4`qhr(`Ig8p(^IXf7aAOLCecQ&{lBE0 zchX^K9Lqu<;L*9{RL(1TCZ%__Z5J~^Lrp^MH+wdxgUswh2HuG)(d}x=iFR4;bK(c> z`xQr&>x6{y$8gNamjzCTmF|HbchxRezt07ZnO2zfxE;q#Ep(dx&mUzHG^g%uY{- zFUqX2SzA$AcoiK|`4d^`4HTZS(KN%Z5Rm+3@W)WkUSs2iy_jqD!mQ(Kj$qa7{qlU& z#K&y;#%%)zp$~Uxhw1y?9yXZvMv(?BlG!cR5{6<4DrPzl7N0M>MfU)6i0u~Z2^CV= zqNUa|T}EGQ_Ql37hyDp_aBPECv>+cpWB(o!l~V>`vS;cywC7gG90_AIwxj*N({W19?37n(y&r}$H6?;wAR~k-!WXWt zU)002%k?88*_y{ND!nJ^oghVOQ^Js5UO$g1Dk{N`MboU5J1KzJ9L?_M)??Z%W(f{G zox!Y3R2jT>3A9|;N}h#x#=I}Hea{A}8*z8$E*|e!AI)j`uk~;crv#$6V~0zl$@ylw z`qnCy)878ZM~F5K;w| zrKUP`w6BEKC93-=Yd@UHVu^<)1F+t74{B>=-y}P7iRBmH6NP} z@sXWOZOBJZ@LJ?~*25z|tQG#Y+faYMTLHNKRjPIi%hH`KKcM63G(HQ|M7LGH4HifM z>zMdO%X|_#>!(F8@V(%<0SaON^zDfVfop|~dcwswl|fN2N`A) z$4|N3Uw)sWQhD}q@ojqwaXo*D8|sMLF9T9lg4LKSWI;o-kE>dfYlhr^giAs0uU2(T z>Wo$Dd`&)Bx){(#hFamH>6@G{yMTkr*w2jE3$w&MIcSkxVVNx)RjJ0_1GKUCTgMwc z9hUYj2elf~6WA(yDo?a(sD{Qt+yjrL>QP)BQYd!`56BS-@dJG>pX6EL+;8W0 zsiBmaoseqB8*<{B?3Z^LN#>AUC<}8jRmR#Hh1kY%o@S9E99P)r@2hdi@GO7+v78 zQNI)=$6lZ zkJ3;9@_Z0^zPoDTW6=?agx?H?#NvqFRZZqepcYEpUdD47B_`{zK76dERV9G3f>KzO zR7O|*`zQh@zB=@!6%Bb{Q~M?dEKm*Co%tT7u#UFh9+VE0OCGjJN0SRYdY-HC++^?L z*kXzoKZX}HqKy%CF{P5%DaO~81|h!q0;>!{)czPhz2$;UJgDsdM+$sZ2Nt>2{ljM5 zs_W8%PXH{-JUe~+S320{=2{}G?ya{+E&8uCKl|qhU-qN=gnSJMsLM++!@4?WaVLqO zVA4NO9ilY}^%~<5uU{|3dtFs5_>u@n4Z$o0ECAnTIH!cE6)5&#gUqAVK7X6zm@J*E z1`q+AwJSP_R7C_M$oYDcn@28{O0JsJ-=Q1$zY+;Yw;kLJ3jAZDF&&M~YbgR3X1KxPtvl};6?&!qrr!o-7Wa4yr{?Na4GFm{M_uWY}O zSIpp58tabS`ErGJx3gH;GYUM;7w*GC3yBw7?}vS+gEZjK!tG=-lqw-}l^x`qUFH}z z#NHv)o6X`LwxGZAYtm=Q1uVS54uUBhpsp}{y>iFew&iC(WEMFWrb?;1)U=-rR&T6Ak2<8xWt zyJt;6h+V@ zT2J0Nb)qvgg0;&Hnc5$A$WMPE;e>4urP>_bTplu8`e+^M={h`3sLaIOrB&#=XH5|c za(58EbpED11~}^jvUj$SDmrIOx6N zOhc*nanE@F2&|rknqSo~E^G_&5$co~zHW!5Z{OX=LFHWVvBju);K4YmvZxDG7ls@G zce_PZpsQXh#X_r>i_@~(Y(y6d7GBF?b4KnVZ+HKqbVSQ>lYzo8N8d|YdX?-l;Y2=I ziWw&*zeTE8{!NgCaZ|*8WF=;Y32qRq@?eL~S4EQALJczpl` z*FqFhSY8}1)I|y}77r<#US`f$`xtJ;iV1Erz<0=4@Ex*dGZS56lwo?H{O>AOx{;V ztc_;#F(_jR6fZ!Ow4nCzYp!F|@mjs99OJg0HRvdz-D0mOndqZu?hy=GlOlRM5?@lIN80bo=P#Ca;hkP4!%IL6s^;Ki8OF%;&FE{7P>=Ya(_Ne2qa>g zVn}UzeiE=%vpea`zNqizS?b&ao9ylCNdMWGjGxJ{7h7zV%Ir)FA`YP zUStN!=lKoi&#QDE2YO?_ZLL#R&C%I$aLYl>&)p6W5J$+CuS9HSj!YukWd7XC1n6pn zfqne|OnTgre>5hSaAG5t4l=~a0%?n&co-zRT2hLjNbMs8^0T>#L{N~=IN+)%dcIR+ z=xL*};&gzWnOCSwK`7h_kWkJ&w%Z2iF{FSaIie;}}b zB7WVZ7MaR!?~x8E+Q0I+r0go&PX#CIfNmErH`+W_U#MtgjXq4zOg9e(`yAJ$^6!`Z zL_YK?Z4cU~d6mn1K7jFsM3`Rm&@p^+GKNg~u*l$kQLRj~?$gCyk?k9N1H0+Wg|E%d zVduB0CjKurDamB)ztiDwFj}Kt9WKT$*w;-}wCYt&g!`yUoTZt?5c-TYbRU8X>6Hmw z{WJ@&`5A@H8r>1M2GgmRXk75Ms#fC|m% zQp|?j5+QRj#q`$&wdJCY)?<+k#_V0Cv+|Y)#`~k=_WNvauIk5VNex${$ydy2C+2zmu!?fW8#uRHYV=L+3gxK7_za z+MXDkEpWEW+*YhzeoXR(Zn%oD?&wvX|5bjDMiNwAL_wf(s_=HAarXt&RN+g1Ti@jS z^;4}1cJ*BkFs*=S^i9(e%J!)a32d=2te5s_P7$+Z?#RjLy1atF+0tZxwhdypiRx z;8;NGLEwz=fDt;8Qg zy^dO&HtKXtXr-W)mbR|hyK{MMz!-s#{kYW^GX{~wmNDz4ecU<%Re|M!wNQh72@{5?D%E1W~|r@lUrfno&3B2xs#$7+e;Gb>ScqvnuaK6>;cW>BRc@wk_D&ZVwxc6x}= z5d96e<>ppNx)yNU1V1?9R)2HC{aLO{D+@@cRas!~|ri zRn6sopd0#TC*(A5aAdtrW+WJ;L-@E2I=c9S>+0cz7JGIn+i8cC!=vNw;38Bo7F(}= zY$e|Jx)qY`BglP11Px}l{G3tgb78c2A;<~;;yf5dw$2lqN<`?x7*4E@t_%2-p$8ib zoOoUKYfG&8&FT}A|BrQMlv6}|MdImdefE$Dbqw|WoiK+!%Q|99<7ia&& zW;arHolk8NDG9z^x#I8372`PbrdeBTmYb7zW>`cGA1CSZF8r=uS&cbTEHpZ8hCJNa z|2lrDo_T&PAzzq%<;hG$Hhd|R>a?$N8$B6P+s7`%=!<9#Y%M8ybBu01$EXXm9?KQa zc2*z)m;E6DUW&&qf*x;ID;6*4BtCkjTBKh)WqWR*gI!>^AA+%6EZu^5Sp2W&Epi0> zZZ9tUa_;|3|4ilbyKyxUJ&|~en33ea-6OyP#%EAG-};#Y^Vb(Rbn>~sn6*L2((Ev} zahmukmq-u0d?vTvz5ZZaVo-gzYVim;-(Ljdd%%QGz7lbMtP`4)%x1VlE$XlV9<^K< z$1Yy2_^7z(6X$l^4HV{B9+&W4jIjS~%i~mX&x*c`P3JWX7W;u#WYDp#E;1>ZrlF=* zJbsgI+o!8n^7rPHLo%aW|d3?cTFSH$*v~yyRRv+>MTUxy-$t z*jN!4JePZ#_Ho)_z2w;r*I6E`)t!&K1+g#HOFUvkzC7&u-ktUV@BE-@>;j*@vcCsW zDY|8jOkhJqKIS{zEIPEi`TyYMZ|Jc*s%SY9?{KG6rY+bn|iY0K`4W&fk>@Y|+%|KB>*9-Mw379&0rw3q*0^2up1IcXnfFLLlP zMp4B4w#P%IlXI3i1Y`edocU8hjJ$Fv&-W7E+I+^o<&ZM5Bh%Z3nMghAQf%FQDws68 zkY1|p8x;E^=`=nuj2a($e4z8@EUxcf)=C*A>*vpfM|n4(%?mpBJ%C{e0`jRSVMD{J zQ>eC+k@LXo(V<$LO8wuwR{DS9h+-=}60>u@HR-I@8HrwOX=r!I+AyVwst8+MKsqtm zWao2;SPcX}rfWkPWJ950U9n@Gg0ur6tE)0mV@r$IjuJ}3($OU{GW`>(8uz1HJmobr z6Df+-W|>me!3=Y@ec!pO-q+BSb7yD>Aq9@TcyG=+k?m?}?q{3 zU4ov#W0KJ*Y6ZLR*4;CNE#IMXgXU-~LVsKV(DnKk#GE$}Rty?i={qB{(wfv+_%0}l zi~>^O&3JN}J@-{adigsu0loSGNpg^BAAJ7*niT%AYf#)DOEnvibd-?Quwcy`s!d~K zX&XVox8iB0E{X$mjoZPoj|dH5&H<%C%0?4?wdK4CKFZK($N6nIRc`c1;6!V*MHx}~ zO{wV%I5aG~S7ZNazA)~=u6YYNX-L}zE*5|(vCFk1KEGn`N3N34w#RE{zJHy#iCw-C zU%6qZf>_fQKXm3h!ZYi6mdGJc^?g=J5M%Sj#~YM0Y_A(qEDhXI)}{{I^cGR+w*G_!#Zn=eTW1kG6W+_TT7riqkD7xKMY_7E=afGW4C{9!PG zHI)nJ6hEXgn2w`LgraC1pk>@uD@~1K_}e&_J3o9q-@cnM%pp6|L-GCnxj44c+3&-R z*(Ec6GC8!t_T0t1*%1Xn4j!F@Jl93a%%4xKtr*$AZohvN{Kh3F*lH&nzC0w*wu)5a);s;nPrc0)?qrA40b;`u! z1^fynLb21S4yY>U%*$n_9lS=!HVx5>QJG`DL1IO$pbxjlK7!w0ve|rc{{Ch&H+#T0 zSHd8yJKyZ*T>PkfP!20qHkp0Cjn@1(5wggp12iuJV1lA-9I2m*{~U|EWA90Xa^mdn z_(Lho>}xnC{3xt12`YqJYd!rYHWM_hGFr%*gC&sT?)M=c`i{!?BPA{Zd!Pd}*Er;rjW*}wxYx7@2JHq6=3H5#-)%Q^jjNyS3$X&CVRiS`llO{^uj?bJCEWX+EOAQ3x2-5=0tNX z(+RBn7kpEvQrJ_jNuK}?@0GGic2ZLg*^eE6+_+PkIzFlT#eeE$m&T5sf(62HBt8KdZLg1#*sap<@(+WlesQTTGM>(6{?A$_8rdzF;1p3L0n ztPyd;))f>Si8u?~;m0$mILpYW`CKUiJ;$^ZnyfT&Jb8r*sm&pmtnSh_`L@I^%dy&2 z<_ycb*Ajwd6t%DU2kIYB6$(L|ADELJ@a-{D1FWjeD%&n+c2q2FK7`iCI^*xE9qi^a zyVE6=qTdYdd3?}_(l*!1w{cquq|Gdbd8|4mWZn1OqwIJtvG2n_ZsQ(%vksAfPwjG= zBV_F<%!5{yTe?g9F}0Aii^$sYPT{oxq?h*JPB=V9UqVzsH;FsMw=%a(HV~P-z*9jYDqhSVH@|27BPe7@ z@ck`Hn44H1s!W6e?sIS+C9DiKs^m<0$IZX=84UCX13hgg;vPlvL^DuWn74f8;l>9P z$)Kt{XE%U+!E!5~{zwF*tbgOqQYGy$lFmaZZQFwc|6E?o6tOlnPiC~zm}1=ZVh{!` z%bwr5d!Q5m#X!h;wp;CziD!u?GDT;JA#;0?Nn3Y*)z}CQQt#jVtcvp6`P!HXp8A!q z^g=Zis$e9r$_zgg2xs2Z^IzP$8>+0zjGcWpp9JMiYyuus1)JS+>0D&UQ`gr<`RwND zwhbFR8*g9Ihs{?H#bno9_huNoe0PXLpPUmUa3YN({~?49oi0grRqe5x- zmblMLAAbnvsu?7U;%KVInbjfBJl)EI?>0WD(R&WX?Aj+4)gje$S_^a$a&_8ACC9)| zOcE$zNv)CGVu&&+JnU~s+d$=!^Ye8{+8>jSKAo)UXE;0}z9UW>?b8w4%$d`r+Jf+t zx`y;0e5j6g+ps*R(=$UI0~>ZQm0u3DE$Aol$iZ8LO2&zG6@^EJ~+pm zr-r+@zGEjGJxKi%JIpSC+w)Kr^%g3jg%)}4(lz-IALWP=X!`0c=s_jh;UwGVXgtB9 zqDnZN;Bq*4I~v9+DtXazw_=SHHm+t@`;mn%kOw1HHw@%FPZGC1a z+a0(!po9*85}n-&_rdKa4uo&zN1-DMq`$P28rgeYIF{@e8m$U=(vPkP?>}7webx{v zIalHFU%cCgC5Nc?I;$_+&X-G*6*llQy5H>{JPGwZNJ3OJll_~remCb%4XFaVxxtxs z_4B=I4VJZb`}s3KE|yK%Pi;_mh`OgUaot{F5JM#)K>!S@M#Q>$k)Bwm18Wf~oMKnK zd2%MTC_y5l@*TenOs+35^&1wXBk|c&HXb^JgkagykCFGLpD71oz%?dS<_hKHns4qS z-+g^dIB;ZBM*LxldOZ4m)b4R}TxPl3hX5E=u6wZBv#WbMf83&4zBjj13?p}eq&{{* zhq#YV5WwtL6Yb*eT?U+`GCy`!%QxvFF5a)K{3$7IJv%9gb>=%tb%U>)+$V278;cMC z>6NFhBv))I+f2RgXFH5ZBgy-mfSmJ+yyRvbLy?pHnrVtiIT<`QJ7tDV>JJCmI+c2d zRpGCvmvK20izscK74O^he*T~YHBQ*gtMg%wWbt{Oh}8=)+Aos33TQ3aE=Xe?m;D?~ zSZVZOEA2RSD}jGrsLdj3pm_dMJ5^v!1Ri0x+eq#*!=LjHwF6mquqxi&_4m3Y`qd== z*ksumBVwsyc6apkQq>+wHH#HyBOeIJp^j5S7|yI`0g-z-=EG9+sOW*tIn)^B~Zy6KcCc^!fJ4ILc~%sEUPoh zuoTgg|7*6~hA#nn^M)@4`eUFs*V%vl9SD||i}vjzu{{1qjiRgF8+YG}X`KpAh@|@1 zheS7xAB=+}<8#ZdlS=x=PJT33(aGr75Yavxdw%SL2Jb2wd>hFjQI}txKjxm!5LEoD zgHSyrr(LlreJjWaDk1{_mC_@HzPvAZt&38dUdXZJoZhy+k!LORy@wxOSR1<-=(=?g zolUW7!d+n762I+1!gNt`-aGkLS7txE0l^&aOz()5Y|)7N0FGGJx;ka}@qaDa>oFnSVv~#D$`J&^dX(?Y)hQP0U)~Nuqxn9y3oQ}=A6$=`MkDEvbg_kQ z`e{ddw1^F^a2_}17+L5B+|9a13 z=wxet20UVZE7OZ)f!j}qVDI4ScpKc54CcgY^S+R09BTI1uecvA?HLJPT*9|O4`Pnm)3r-V1q900z;ngkA)Q9 zyNrBl0Ciz1ISU*2Vd^$Kmbd?sx{sN%(e_@GtC7?`r-H`XSSAX8vU@qzWE`^s%#K?nb5ZWvt&YYVY3^g?~|aHbb!=J|%#^d;^Il=#3{M z*_5phms+VA7s~eRZ0RYUXXoch_D5hU$hZ$8x7=SFloafe$pkm#GO7@46-+UL@?L&9NDy6LVC_beMa z6glNChAJtNcUw*}OmHb{Aql##y{T4e)U`R7`at9})tbszP z`rFy1f@p`0O%bbM)!2@ma?aP_>aIjZ**RAC>%uN>Qm?HSGF#k!XwQ)+UR7CX7zS3B zSnCQJPwi)QJ3lBX9bFH=grCC>W=~>SybIfkQsgnLtxy?0Ga>J~z`hOO;Y1760j zJ^>X4L>=EREp^!S%qHl)wyDs9vIo!YR^j`*8n<7}q0a4a-^G09{8o6& zVQYZFO-h3;@`v+t$WMKhGalxCxGc+x8me^2KNp?ACion+4Q#z&=CW#OmN5YP+FL2|O-q zusCkqbPv4+PETjNjA4E}6~;*_en>;Im=Mj>V5kZwQTUBI^TIv)f3e6MavFWsk_f-fFw1m&#lVqw=@b0;z*mAc*e#4!8E zwA0_hXdidoBHaj*11O@TbTgE6O6L&LE#1w~F+&Z^4CjXD zcg}m(Isd%xa+YfWbMLyZeeL>QpREPGFi6Yk*ShZKb&%zDPsFSnVy4-4RMKm_;}M9* zVj$m3-E^O$GWE}5Wf7qUyM$1`+B}o9rT78y^!gDn?Z^Q8{8wPvlD`iFPPz3fEyb?( zDkEVj)xNu^uoBKAomxMc=zRozPx~?vP?5R41kBg*<4)wbao5 zG@>E#>>HWd$d~eeLHqgHZ^HCKwMxk&WBqMn0E zYIa|{@Tq0FXqDZ{b(Qn!SsHcNQ7-lsUv(cQ7FlZ9d(!6!=@yxIFI11WCK(x6f&|BZfD>K|WP<{E42c z(MUqSul!&$uMNKNI4ySYt4#2vfA zB6s|Gw94$ADTzfDW!ZA`E-RUX)wvHn6oL}scI-4zjP=iZ)V)xNO2?Re#6`W(c$MlI%UxHI8pscwkvF?8wX+r!JZu=V!{Of$&oyAZlpA|@JKZ>raJqhk80&FNh)q) z`YjP?g?gT945-m^&gQwWtF1&j7~>fUMr?MmhkFtm3p8mR5KEoBHFWwy;eW>?gLQZQ zx%-x(nZ0~&*qE5fm$tdcHB90Di}R3!;*+&Hb#Aevq!RcA9dLRWx;aVPs@f>Y5RHVV z4t-kvGX#G3-yt*pUrc)&j3a_?~7;$^ndrS9a)cSosXQ6`hDhO6fviw z2*|GgbcRAErpy&uHq^!M`*6YX*kcfaJUi?VvVJ6G)t@$BNf6k9#<~yr1v)ptyZhx6 zc7OBcRUIB6${o4k^2r*+{yAU18%%KBP`JKf4h>K+3+76Oh;n$WKoH(O(colX^$UlA!k7p?5 z6*e5(PK!hwQtIu7(gK~F%s*I+`4=w|_3xvvQJ@7egQR6a#Cya6MUzze^K6fu2F3K(L?^jUv_?Cz_w^=YgM2tRNN zozl%!TkAwnRYd=`Ztgwf0j-g@HATxx0phL9&bS3+$rHZXF0lT?8vzn5J%;InrKY=`E>`0`Yfg^y7O z=i!CJKvOLzGSt0^lxcY^agR>=O+Nxq1RB;Js>ByEqD3o>icT8~rYmA9hD)d;7n{9p zoq@GthgSO6(gEOnq`LBb$33C?gU^gZRj|6tw8B(~Ky1^a(?+t51gbVb+c|In=+60N z{Y&okI&w^{`9)n!i2+j4aNzLC1=zW21f{vwILL-_lOgH0t6ED+pdcA)d^N~5gEwS~D~ zbj|ANdPO(A^5n)I;rq>@6x&m#1thknCusB>)2esvEG(o^BhBU*^kjY6t2^~a>}kQ0 zeu;-lXT(|rV(DMA=~9bxi2i2p)rg2nG7^kerC2oYux%pNYLekrpu z$|UDWf1m_gmX#4wG2x~?`7*TirJN#eiSN_E6K=`smw&8ZBK7w~SDmg2pr(G4gU3#n zKA@(rrxOl^BQM5&mEJ4eR?j{3&C;$67Sf!xL(M-K);O;!}xAjICXspHFvGUwsW?7k2WzSx6yhzKTB}- zrA6Z+`1&I(C*%AD~cX>Tyq3prLb>(rVyyV_CZ1DJy5NM(|qjG<@u#%%T9*XHXCkCp#*k9 znVNY$No5j8z9*gvUVdjYmWCZ29peO6xjC+Nrzv7lUC1HMT@;Z6VVd9N_7K%cH*EC7 z>qfP~fJnL1EA)qhslI9hXl3=I>H&`#J_n+SFwHWPX2IIcI}R~y4OtpRC5G~SF5PMe z^&h&49P~H&2RG_~EoO&$>8sSr!HgYWN5kGhG%`~9avFKD7MTXcCSt=dypQBr#T#&YgxHWX1VK4sudly;3Jm%#4?P^w@N?_t>Q&^ZN>0mlVNoe z3eKr>&X7}29$HYI^7C*ZcY38ZzbigbZtabvSTCVp@!A^#F82rGdoK*%9#rN~NQ80I z)#tM7{SN;9?ytIx*fp#+El;R!$v1^EzPsksgSJ8$EI&mwo2WSi zbe-Ux2Pw*E@AYiFEC$2?idQY;VzaEu6cVZ_LZRrP4;wafB7m;A!DV97?<~z!4HzDN zdQ$PIraM214yNOR57V)~>$?8)lo+k#@n0~X4c6diyhy@igCmV*KdV%S<+4b%p9rtUh3p|#v(iR7l>2FoNW%^vA zcirp4bAY|%iz8BD%SlV^s<lno9`Uj*Ku50)Yu zS3@|f_@`6vne14dX7As~5|a%zE3)l>^i|rkij?g|bpxAj#lM3P@0VK^6;%x-LfFad zyG^ePT{q8uNd_X@f70~_NEC&EZMUnLjyn+;A+Z`Yr!6SKot1vNAXKBOM z&>Pd@eK;ErVVv#Z1h1c{>#^7&K@{{66w+PRewzqxMKK?>4fK_1~Fvw=eSeLTeo%9I;;F zVNzs1BMkFnxv&)a62B+xkXj`qZAU zx$V|JLd6kuS^uW-tcka@>ts59jMldW!JJn5lzFK`=q%FLupWTArZ%tnwH5RAx>+KM;~R5Y=B`KA=rHwn_#=RXuyAc^z@4uu9HUopr-d<-r1!x|}2+#^nFuUtT86El| zuxo|tmGVYyQysp|CsH>9&&s2%ry@{Pv{#{s{aV+7AkPO|Aek#PAjOFTt)yCD7Y3CV7KT>R8q9mU%JcRwe25SeK9H&RI*C%Kg10#^ zd|CFJ>QpgAWBxSzF}xwuN0p)^&|zQD4#~lvM8fFSW#@qE*2kC-IIudsGBU<+J12Cz88fcqf*J9}`ab81p9#Dmll7 za+$$I9k){9@GHusi4Oes(HSd$kM^=Rb&B`4O#hsFMrXPyP}dk+{6bNTW7zIzw%Idi>ardf6cFWJWdXSji&e29c(bo zgyG}MaUI?(q<|BH=1?~}>Nvr2PKWdtBARHZp6yo|W_d+{w$%3!EV@P9qIexhk@Y5t zao7>Ft6Jop5_DIawEgmtR8{XoC^FWUY#=WmGejb+NDJMz`%e014+4u@vCHxCX*^24teJnvwe_kHE)Q(FUV=%uB zb8%htgn7=tfOXT;KoSI*-jcitZUy2!mYwiEO*}WI_`RlEc$nzYB39B@STJMfy8s;S zXxMg?LA&M+HV|vyQz6MAsnAx06v$zmQWJFYTyQ@B*`#xK3OkoRQ4e%Maj0_OEpbsQ z)IMkDFDFd#sm17UsJX-B*c~f=F$OEn_&bIUzK%)D4VODbADsKog1XJ|k`fRSuUX5d zk2{(?D}17npAmy1wkBwm0U#a?=4|=g{phbm8O6awkqG+KMNND=atJsR5QN&rXGjBH zCy~amBNU}g-KTNF3#cHBY+f!ZXt6;5p6zSo7edQTlMSBhE;KFCH z`m83)ek44ue$i`}d%N0u)3M-Pc2_b)%4@4AeJE$*flcB(fl<9n(55=KJ)P@3AYR&^ ztBpk8D14G>=5rKUxq;X)(IVIBMZJ3S-A?z$WO360qki1$m?fFfjS4elY6OT-J%br$^z5?4?9p6(6NwpPbm zDwTOTNx7k%y*yh^qLsDTsp@OW213;@oEg=nHt1qE+cZy?kMSma?7|S#&2*>5)lgbT z1!rhuL7voWnExP>TBK#j8$Lz>kz;6J3E=f4 zrKp@4ZQ*Mad)05NQ#LxHzpE)Pt+4K+$=$TzZLqV!avDVOY~jcqWK+MkYjoy1c(cT0 z+PB;x-h3-<>KWuP7&bT5ls_tY;Vpe(wgBe@3n){})k>*&w3w0EQ+=`xPC;<=u79Tn z8#1`6g@n){fT`?d;2ebVUGvza&Y@O!mNSUsR|@<)%)=z{BoM(F?pdne*o6e7Vec3I zb&m1Ah<(b8HflC~+mFUp2Z<1(u|t`b_2fx^VNJ(s*Ij4R1AFuppg}1#Hg%rRCGMoN z!SBU)Yh6>@@s?u@^OQURJzwYs^NJ^-)pogCoh%`Av}dPNriW47T(;vSdQ3|RV&Jy@ zXW3GptQ8h=2Q=}LJzhMP827Y^sQv8MEx`LBW$EWIv=U^Q?inBNmm)c@VH*=%PjmhO zqk+k@$rJ+uG73FoZSFiMYw4Dmwbft?8xE%PN-RqdS#-5=^~RcH-mY z?{$6YJp9R?x@A{Ap+gVCARyN^?*Z+|HR6)FZyrlH-Aw!#2r~=9@HrV_u1psop}Z~A zWE8}1kxgiKOVq`2X_mh=cA_rLP^y?_C^7M!!mx{mQ{j?%?T4^b-#1NW$CqkDpKiD2SVvx0VdbUxdXuTg+D)Bj>nuwgGRJQeHYb@gDS@cJFiBp<2 zTh*bMZNGTFLYnyO`O%*}Ffx8NSW4~DB;~cx4k1Vke6`PG=^Xe@^+C2OE- zrF#0^CQVqkxkCLx&8s{$1My@L$Afq}lkM)WUrG#XC;bv=2TSx0nh#APC3ISr$#EgR zXGw_Vuf)+wR#L-Xu4U+Reg)gJhLm+ijHyku(|jw@V|krgDVLF%In5V1>mp0!aMgR* z?T*<@aV%b(8CZv370CUiyg3_eGWktwBBHUaFZNJH<{ zp9Diu3iR8~0?w;)6EsGEE&!O^4aMXceXoO*pPP7#-E3OsnQShdPk$g*l^r&L9xl(* z?{@=JyYy~`N`_jW8JFN)Dg=$y%pX?$&*JmwHOx<>#8S%LItJ8Sqf!{2?MKh_7b^s| z!2eGX8%ed4LTkmzTQH^$CAOM@f5-_HQpwpg zqY*hTivBF`4y6H_0p5&1eK7sYx_n6L)YZbJXn-N_aB|$Q%KD&OAV#3F3_(df+$1iZ z-s=mZWqezV^99w8dW~!WUt@-V(CsxKCTv0Q06}Sa1wZN>8VdC7o?g+ly&FTn-DX+4b4@&JSr1{cZ~3?@WSU?hXNAWw4)Db;0y5CV5L2 zkqfBq#Ibi|lNB-Q&8|>d1$co+Y*4=)vSX6hY%=$OAfjW8w_Hzs>E|Z9-pWDfF#4)~ zW}9-FOL9BJ|8$$uO=l-m>(VsUu?7<)!H^fv@I3UnWle-##8{yP;{$}LjgONtHI7L# zDoaOgLhO#B86cn$jNgxwHEwW^Q=6|`@_2f+P-;}|OR3}?#{IKs>7nV>phO~t#6X>; z4Q4_3pnHFeJ$ucMjBOn}&r8=FI>PB*tXI))ZDv>I0;BV=2~ulD4udgk9FniTZ+)%H zOLI@|4%c5Ezv{qy$dvu|Bk!bW;HAJ1bio)p2?TCI&``^1btt?0&XqJ&6Gcp-KQtMn z34;fSN(%|J8Gyxa0qxy5*VX_$7S*)~xqus>8LGVOgOqc zNmUcwDTE&@junsC$W4U`0F!o`59zQdL>}JdCf;bsi^aTul4`_yrsb*ZvSpr#F%%@Q z-*a}SLvlLy1AkHn)MF>ZBPX499o5T~zoN^tpvi=Me@B$yN%Ch|%y(`@1@vFB1fYX7BnH{_Nh{c=%>U zp*AsA2Q;JsHC4X5+S?8z0BKf?(6(;Siv3Xez>ZKxrwx`lO#ec{?F@URbY?>2a>2Y2sab*61Vv>!tg5#S^B~z z;OOfMtA*P{`THI9mZ`SK68~NhtkSrIfXchVRAMEsN^~rE_2>RryDo$=q?BmDX5wSS z=3WttjjxrRm`YXF(5FDF=}@SVSDNR+9o2M@v5;1sk|qO98_9K{l!*6ZFE-n@KOz48 zOWPkvUI$B?F1>t>o(2#9!BY?8ly6VQ2IQkmBa?SYc=GxflA_k zK8cvGca7;sa&a6b8CDz>K8Jo7&u~N1w6ADvFdhj*CPfL?^oN)3E5{5;JG>Ox{2-|;azO{o%#HH{q);UGL(rk zgxz+ya$};KzOov2$_)_!a*{(OwvT`OtEyqP$6S~jk(SjD9p*!i^{=8RJ*qWsi1(EBVx;4n0wE@#`By##+L zTn8ta?P^BK7PRQn&#kDt?rbz2h;M5@J78Xq8SzW+)j2!%b4@UIPa13g^YDQo*Y;Rm zBqDv7K8xSDNT-Wq3ZZu&~f2&QNq|-Br4X9F&660I%&5=lU@=PYo4UWi)7` zM`@pnNRIa9M$V*e0K5K%k*x6mj)$XEz#9p~w%Q(RuN`MPC9GCrc6q_N(iF2sk>-~Y8t!kt4ep&n_0?O?w}sgd`q1(I?uT` z!K!+zJrA&|CG#4Xo(eqe_FZW%te?N!kl^I4Kw)~#w^(E`$u(rz_A=>AxZ?qZXx2_1^kIKoNJroNwEg>;GN2P(pM)597|Ux zpOB~)Zv6e3)o^AJn$RQD)y#cnWIP78ol~B#pq0au&XJryI_@=ncmuL~*~G`8V0CQE!!cJTj#2cySz`bAU(DP9<`>=*n+_;BSY>?dr-Z#%+*$AtG6T&QvVC`VHb8}3) zPikLE*{)`~D%8nT6leT6+^7a(>btMKKL?M&Re`5B9*)ktA1*H3pSB0q`EzH+EJ=Aa z!x9&RybPJ0-Mj}$$zYFe#W#z{@N2pC_wL<_#jV>n;6(njFdQ2tJnJC>>c5{CG_c64 zmVA^BgBC~$jQ9ZdQpKlzg9_tDcXMED3?Z8HAhFo62*^^SmRr5O>oA{;_QCk{}z8VUGK;|nRx7aC4i=MG!Q5nz;J)k0}n z#>B5cHYH6zkS@`7_TwrWRY9w_Y<>MSBh#iksV?LS-|k}nex1?qecea?xDQ!v`$js( zh$S36>gOFjjI|*-Mac!5DmH%Q;@4>9I|_t{!(&60 z1vXV?%HD!LlQ>>e2Wd1{r!j7jSExSQXkxap6^ZfTW!E?T;*x%be4O)SXHs42StPZv zO{|Ob9BrvdwSmv8Qvo42Tzfj%{cm)*CC@6wIt56MNS<}MUznCPD9w9z(-|1xoiH#; zUtTcpCwaY^d;Mc`uvUZNr=df$eApA|cHbKJeQ{YGh*8pPCF~$ezj8Bq?xRR0KqNxI zcuD#bc!8KZK(TZs<07s9CgSK$!-cnT zDBZ5|TDH5df>bl6XK8G_(=Ft)Uq2k{V?2TWYmc8)cJOWZan&yXNbjRId?F9D7;>d~ z`mnlpHuPD5`ebEqjb?&hZveAfLX_u->-i&UA!bph~Q#3q^%&>Y%U zd?W~WbXz?R=gD$~sj*mot?pHMyXV0j-gzWy_=;K~i+I3owI0^X?Eo6iI`n0(?qJ^U zSl)Mv?6#I1*-bkLxFjpMr$DiZYtKsNia9STqxjg#@9x-`sOlRF@k{2l+Gt?3fLFnw zc7Cv3eU+gpz?W2J1N58>_$#z%AuvDNrf^D~jKtc6qIw=rA$E4ClSLw{G($cuN{XvX z#ccBOqm6S?u96bLuyV_&0lg!#$Sdy1u$YkxN&QE^-Hmq;65F|LXC}9xLpzq^2RCdq zrPv$J;m@p>e{NZYc{qZdjn6g8>5c2|PfAXomWeDqR$%Zh&MzvN5S2#kRj#hbsQpVX z5ZRq_Br&xA&1w6qlZemf!fAr4^p%?bz=O~bCZiW5E_*-dZ;)v$tQplJAy%@w|Gsr# z-TdNPDnKdh5y(#;^*+kP>wGx1Ad}0@WLs`6@rDoJuN?%MPV91M=HmbH%8`B)!>&&8 z@w1NicN&1lH&5E?qjaE0`Qgp>_#rU+4sm1k;G?*gLvT|I0AZ+B^~+j;ui*`s!0!(1 z!y85o1#ng2m`Q|=rU0JUhL<%EBO%oAh1gG|+&7b6al4wCmK6=fqW@JW^^i@At{Mg-`O!%9On+wCXQuPZ1r!!MnIc`MzhCxoYXI z!G8kWlqDgJKG7TnWT2e0Y^upWfCyjTiYXIsLvRAI2tZ2R58!lMsB9n)J-h4hQaR(9 zYTWmDVWwMvVFB65)z{8ST-P0(sygGrUnhBK4M! z{A{V+uxro!F91e_{j_FcvgEI-$Px=r!&X*~!wP^HWNZWgkWt1hod=CTsOvd-KG{jlWWLZ?O5^rPOGCx_%&DyZv85(jL)Y`Bb zRB=fnQG+5&KgQG~RJF8pLI8r^j|e*PItp>jNuH}5tCaFae)fsF4_xt`!fCAJ*`l{& z1!72|-!PT%n?KiZNxoz)S1a6zF_BdD240D;!gzzrd@w-7duy%21YCMDYoDtHO@hx{ zh529$hk(3FSrTzFwu(N#=BD5^;hOehXQ0c!2Go2KA;3PuTO*(2P6vqiVU+w$RgAC! zN1fqZXb?SIV(pWSo9{2vhhx)|@mgN~ql%z5;UEAD@5xd5Ey!^t#Ujm;bE<|DP;m zgbA!d=(In+{cw_)(}t_D_x9YS@u;1!6R6rR!8@Wr8{L3{xv+O9%g8=gM_A3~{InW> zGP@iU=l$abc*{qoSL@L1)Km4rVvH@zIlHSfRV$|i2fx@*VLx14LC{)*gIeUZCr<#E z!Xv;s?|*Cc+996Q0F%J$W%wVA0?g89RM-wzGX-R-&r>w6sMbES#vH$S2Bf@2VCKVo zqW^dn9|#?tzHL%%G=RARA1d~@l}YQaA9`S6UxR`@pOz=h(u8O4hb!kdJM+%cc=qDq z+`suA8vsC7WvT=E%$)!yfbvVEAk9c|lZ4r$k*-~yOk}J#AHYNJFCaPD zMx&|7O%oq!^q0z*Nl}wqmWW1&6<{tJ1NadB+o50{rySR{4uMy316Vf3-uYq-Y<-xY zB(CSqDko5A0Jz>e*!9f*XRfzS833x1a~ssS#l-)In{~r}_Il(E*=>HD0m(K7q$X7Q zq|#iSQq3W8xc_dk=kJ*^h}MC-WmLqz*5$mCp}S~pbrZ)qCc1g(W3Yee7X@$0534UE zGFCWmeucy0k1>-mbGpr0j47kvlFO)<^el_ud+o9HC{vpIp6>hAGpR6ksUzs%e1~L5)r_g%%s&6a({7Dbzc9#ENfZYBq%zu(dL4ogM{nsrV z*0-vLgxarbDFU-J-g-IRLegiLGaLXocB<6S(Jiz(@R9$j@mur%{#gIi|2TZ!iD&XH z06mbc$ktQ7`(KM%lZ>ztWws{VlWn?%yUsk#u#dwK-Z^oLfL~0R9%7 zDmUkD+t&{_#@oY$wXjOJ?n?2l!}ivg;0XcDS*O417Sn zm)r5eSr11ngyqJd2(hYx`(CR$ql*V{f||?Mtt4 z+~jf-N-ZO88O?^eAzKFwkhTWS4ODznzpa)cw!sw@g#`c48Wz;QKJ^en2+)LP7TSuj z%q+m5p7D(!pHBYSQJj;k%s(LOmkKiWTd#mSoMyh_-rOD_69FI@snBh- zvI;M5)5Qj;(T^G12yP0n9^n5R!e^2Y{NULUBS4Y1xnZy?d{zz5FV1)3`%NtqARvEo zYYsX1RumE%<0M=hGHR(yv?Yd$8~w1#jH&HWS%So$tTsfyQ{m z{@;BBCtG~1YB;_B<1gRjWimu0GE*=v13fs}e7U0^PyIGaQ=F5tdtGRF95Mba4p;@- z=F0QQriF^+f3CKP6o|9vuv(-=aCr8IVL#C01r?m$7-c@0U-|Sqe^#7#w{U3|9JhXz z0&Nz>roY2CWd$5NV}{U4(HrSV`ZO%l6H` zqubdw{H4q;aeKRi2^>I*18=}T{LXr1`2FaKM8CVD#^+-(wJww0U^i*L$LHuE{sT{%200byplfS8WMd$wtYfyoLS>?u_ zdw8(4Uy-;-|1a<7@BW3vz=_5kJDJ1UfK>XPAv8#;p9FOC8lJw@)O-~}NA6$)%+8`z zZpV%Lfj8F?;6}ZWyPaL$PxUXH4hYi2O;7Ut;Rmea0T*q9CFR)Txq9&K{4GD-(>|uW zh6aO*m8o!tf4v_t^06Y%C2T8>ZVab|`I8A9X*8ld7gBE(!+d(G1~PfbWNEo7(XZ(_Y9H z^LZ`*S)RV@l^K39nuQzmf*z7WIw7>NrkOHhfzni982JZBTl}} zCkTP3)FY~zLuEf=dV298;IO=MmGMb?XY|Us#f61Z3&K@;;D|YW%vHpP2lUx|?fXL> z!gHz(@ZHt_5viYf0a^xPEbt^04ue{HOoL*kT{ zAN8emub$)=Xml^M50sELK=U%T5cOUR3Y^C@%m@EUWf0nN;3j4SuX|*-vQERVzM_7D zGiweR;OtEG7pB#i7&!4h0~;B##tsf0-%vjVXbAQIhotH0tG^2#kuJC(;C`J;^%@W( zxSbVTSS0e!J3D-G@hud50b{sR31Jpr>>x6?f? z^~pLV?t<*2!GY^F#~O6t$+_WI^T!Q|!{2D(c>n!Fn2w&=M8Kf)XRdbAK^ur?C(yd+ z&@<42GFu=fK>}(w1T8|BX_4=a>FoXZcn|a6)i6Le`rrKEE15m9ZI`%cXetL`38Z`FOr zf){43cLt6Bq;!V%Lh4<6A^Bq3{A2(8YupG9hI!40<~={Iu&xr*ta3R1GV$3QNFob$ zr}|yi^j`c}pKDX2;R`1byj@6fiZShi1Sa-Z%p4x2zU?~sFOCgj`V6`$j|3>xqSu~; z>8;4l?PQvjflpVW*JH!Hs{^^d`Fl>7yhGw{_GEpxI5j_ReN?!z>>*nEOc=ync{!C8TMz`9~zstp^;649rbxO_VuV;}Urdry< zeQ}p$HFVtWS>$s_qlSbJLnYnN66JcNW7jLpMV2$zOuBv#T(IGp$1`3=TUSOQJM7Vi zCOmxL6aU|ynh-2a$J15_L+=%?K5yZPI~v8DxdWc zT%lv7J^*#hI7%-!i-_{1!e9Xq8~T8=$f1rV&dHScrJy(C)#gwFvr=I;o%00ED;^O=}sw{|f>M>MPQ-#z_GD_oGi;tzA{>GI62 zB`9d&xH2C%BGJZu@8#$u4>On|6o|BJJU~iKt~&h1JYWP{Rm%-X-U)uH-Gnr_T=k+k zwmd7IIp94|ciZUdK2>mL0BbgyQ|_^M2cv)Ds%{bh%hAW->VLJ@m#n<9R(7LeFau1y z9ICXAF0kCt3%R8*$?-?zNY(?3afVg0Q>LLjkm2jhJm>BxtNLp%WFzwT<*O*0@gM&- zHWPd%Xj*z9=p-TU_@dt46<18Zo1&?xMlXEHxS)gc!!rUN+Xg2wWodrnf08)fLnP)3 zET#O$2Wwl04{3xR-|b;I7hVnXi!jzJ%K@Q?@Oqs?;$BgG8o%zb9|xU3J~zBvYgh?m zmySAQN;cgCq2-%GObh(rW1R=*@*6X%P`L45IOk=lH~f+rC|Bnau2@v*Dv}i<_cDQJ zJ`WCgcFh{P?Hw7<5Fup?=Z8&u6k0@pG0M_J6&%dMsN`Khiu1Mv0{{Uz2kk5ib-bPNoeK-1Qegso6qXI|za6k&^fY6rG{HV`D>%?Hw zW8UZ3cyNW9YxD4yiy-$nTcoC@W_FdxID9~ieU5tzEFU5mXPbS!Hkr2tuD9qc(OZiP zy4v1_|JtDd-1=GY`d5su+@jn{odq5|Pvy(yS6C{!#Vhv9R7NmMgjLF2cyOP5Y>?cm z(>l{D;D_H~vEs)?_~KRIL={v_7H1XM+?2fERQ+luE#YSZGt#%7_dQAQIy;G(}X|p@~5S6wYXB7 zcMB}LvD3|DWv}x*YAVeoB;;jq_xAVhKhxo2G?SP8d(WN2ODQI+{2IC6vab54x8}U% zT$*t-a-lXw70H@3pu$F`_L&wvI<-`fnkdqBbZqs73}}2_385e$&VyoWekWfhsv4n$({H8pFR5j%11_(@$K4oIy~T%$752zImeK? z4(AHkzia|dPB~B8qR0S&Xr850MW76+kR#`cdfiTk;Zmxau~OdMf0-n5e?fJ5CnWbN zqeK^ngk$r7Gg6b_2s%B~Dkal3qtsbsfyw6rNjmYj;(W+{CS2=@Os~O+<*#ny8qLdg zL-8P!<;2i-S>aDUk5dUtclGGn4OV4I!J5q>`<>F0@Tuc#>zd33Pj6hsOn3ZFRL7D$ zO7&vANH<}&`Ktz43LIsZm`(@FXf_AFDzf_3>vN9Zle**_TFok`P})l{5kl4BdgeQZ ztcvnqRGMl|7d>w4<71JyJf2fX#JYKfFdxWmt<#2>&WhLu$DN( z(zP5cOg;G2`1zAO@XC1*Mg=&lKoJ{B&~t1d0+u_5&10IgfrlPnm5TEmN%nz*)=Irj z6t;&0j1bNxyJzga#*U?B0toI1433lj)o|b6 zYbRvUrw0=GUxfj56x`}RYw}T7`nK1U zYcQ54(*2xH88X^~tPXU>VL#FB-FSqx2uU-lHxka|tOB}Lc_7pB7UKSFd8q-AW~)o2 zfA(;{FImI=o9@T?3_C))EaRbJrp?ASs6Ntsdm)7ab=imuy+SuA zPK3eaZ3`Bww_P=w#2?qA1Gt99s`&>o!}7%uOV9k3L0GH#tn+mKyG&5b)9pK!Zwx{W z`^g7^RP>U7ohDfYh;D9;$LG&L&$ki5zVGV}H`{mM(iI0PV+IVe^dmF`zI66~U3NJ* zwGjzM`WAlb1q}V4rdK50W9Q%S{O2m(rjWj+BF*b58noZ&+XM)W0w6P68gCuSt@3U{NE`Jis@cF2iRh znfi4-;XS4^4{5M(P;;%dZgsS(u;Fl#e!ddH?)V zlCO7`Mpq?A{@&Rz5xa4t0r#0(w=3sHwBH{YyWc*+cn?bf@}bqa?AFQ3kdr!n_t3@x zw5z@En9|I(Jk9$GV&ls+i=ul^L+4hu~NJ!Majn^91HD);;c z-!xlGo-A}twBKg-m~@#;@zA8X8FTlN(zHS1HqT{}d}{1e>2nuCZf#q<1ZPjcVERlJ z{ju)$#gr>|-aaUbqx4c{MI<%2Ji6SCLE^UFE=(ElVF%;f)aiz*|4PGwpMNs5Euz%s zVu2ElM8%Dkf2f$sf0un{&ZKHtq?P-kBn&+;F$1Ki7eLx05LMjjR9E<4BN}}5-&tuT z2&v9}ZzSvTwAG`kE?dt%j+V9A@p zgv}@LyEt94JU7q7zSAl9lxM&9&y=url|N7_bpV>LwJ$^_{pUxE&c2Dc+e&FY3IKvH zy&uxtziVqb{Z4Vu*knUNW?^(y_(3eg`-H69ta^g)h%~u+L4BSy{LlMTWo$kDJoKW0 zjl|tr{I(^0@I^6V3=RiHBmt6W_U!j~=hG{X`%2gTs~Y*k0M^iiFAsyTAeAqSN0X-} zx^G$_f^<1VvUcPTtw;{1m;W6~qcro`&-eec0&kMH4-Zop%g(C8IB!h5{15Z;dRtsG zUftzQ+gFog#Ys1Yb5>WU+1S?q*LSS)%(C0nWb^!sN)}q<`fn?^t{`I}m&(Koiat>O zFJTiLQD1kTFP;^j3$*D2Bm-?Xl(${nZkw2s0ek+aG(q6R6e;dsQ~~7r)|PY`ZdPXE zuu?uL9Lt$_QxM>!bHuV6ROYsCY7>OG?X?sVk#xU>qpuck^Bn(#L&2NLTuV(6G4B%g z#@^w%t}u|d8S5+H?Q-gWEnA-0upAM8^_#q@!ua&2|7_gH@;gZZT%-0_efv#=a*ASm zQuygOy)nA^J7D)EGOgPpHu3^owLv}1;0@tDQN%#{Vr#(Hc*Am|w%fkp|B5lh|Busj zzvtc$ruFpO2~NNcV+L*9#+K`6>b4C7VH{fMJK<->FK_#3M)8fU?&I@v*75ND*EZPL zh20W>S^59--MMufeIfp9kpBBHrGzJkAj>n!F&a@TGp2h<47<<0GD#1|H$d7s`Zv5t5uaGW>wam#jwu_wKHGA``gzPRC`TvWu_l~FXk01Ukq*9^GtWfp{m3@@GC6#0+N%nR)&M~rAWUphZ z$e!8Rlw*_4aUA>L9FB81&hP5;y}y6_{=4r#&x42Sa<2FF9Tb@5^ zC@uRxKit5&PrR65GXwk>}2;=6;i^ffyOjFzrdltEmmZHJ0g~0VB~~ z1OC!+Ui^Q)2|Y@qZb{AmWdSe*WXsDnW$3LOdjB_2u3d_18y>ZzV#D*Y1_4?HztSJ| zZ|Ed|yW;zwyULK-(R9Ab-1XmuMM|#7s4cqBx|YxUdk3$@UnoHgcXeJ{niqypB}@Iv z4zFZvYc;0=o?;M+`eL7ph>{aZ``-fqRu>s!i+f!|>A%^n^6YNM4U8XtYxjt21V#{S z5w@SCPfP8}QwOf97R>|(q)#`6`~VM#FRjAJ0pMi@@aeqyw+cw1F+&odst)?QM8mwfbpL8WV`Q-G0D+zy>;C%cN^x zA$la6cH3h98ym`$_X5HcG|$2c5ao9NGumc@E>s~Fv4~h)%B}wv*bldj|L1)MLZN3h z2HS#}jYkaAqLSR7`}TOgSclJhji8>`t&DeZ@0%(Sw@VXF3u5MbghXICacClz5EmBX1bjwl>fbRMZoc~cR9D>SkxHbqnET2@Zo!{ z2a;nok3PH@VQb)SJ-AH3^;(m;TUDjTbl&YKskJV}Jd0n*rT>G8ZJm0N^GbHe$Y`d? z^WPvJqxnucn zsn^dI-1<0LhhcYzKHid69TG@n&7Y~+k7gZj8&!4e$Zs~0WjVN0Y%=_SZ*g+)8K zCrwnBM$A4aOD3UB0?jq`?Q2#2WOS<9yb@qVS@fDVM+2N&|J4NdU9TyV#lSgdqny9c z7ag={ zC6^rOo$}@u{1Qy5gM=oN5OY9bYbyZ69+>l*ZXa0^YjWq*LW@E7~bfM!k5$~dp3 z950+VYl$~z%UARYno|*21+M>_h;MK{l=-j?peOn>rR?IS0clGGfTmc~;?G_qh4wm_ zb)00#9CT@tr%&N5us%2)2Xj~0%_Bbsq8c0&(DKi_BsTOL6MPO4JwoGkFo<-iiac5< zKk?_^;!Hn4^mhb^4Oh&)O~4X5rj8>7emG>1P3p4ed2HaY&z7oZn};U4p&Wobn=Ur` z0vG;*teAkZ49ly+X@tY_$#d)Qd&KKRDOXn+eg07yQgZL+8*6oC@LQ zjU?fhFae|^>5G1!Ie*v^p4V9c081T=z>uNIwR(HEB{u3t!a+wfYUTc^;2 zd3~Jr1BhgmZ=7Y|!#6wncg{8yg8io1K0CbxBQF4>@y~}mSHV9{ii4n%o=KOT8HvS> z(F(&P9&+C%g1G$y?F1CCEi#!puKZ{{o^{ju@fnl5VGaljZMFeY2^{>-Srl6%*?Ja2 z#1?NLx?OM^iwn)T>Y?w?Nl(fliED#ZHm%Z2R|v5jK0B(OB{e>-R48pjLdG)e`+ZoX z+zJr@pZZZyFRDL;R!bj^e_K2wU|W?)n+Cu|oj0?!ciTO#2XM+ItsA|Ws2YVod6AON zh{EhPEOiR?O;VC?uR=rzK$xMi{Y;Bi&0&tu`opLt+a@wVnr#VcxPb#@JRCU1jU%q0 z!54>3Zw)K@;qDUL(INw=DAU_#1|9s@IoDe8d#5j?S8qe_H@Sx}S)AVFXe}39(>A2X zbymN`29ASetQ$ zg`&|!w;k}71kfCGw=PkW&l8v*caG2HYsFyU+98 z>+?E@elfD?E3i6u1c!~Yo1XOnQ@B4o2PAGTo88;^@jX? zAntnSM6ql%m^KtmwA#b38{uHRR z9ZVwk85N%Ztm~9bz7-oCc9}0!e(Rq7GW{---;>XVKY77H#kOXTo!*z40M058KYR3d6?fu8O4l` z4GJHAoGLSUz@&ANpHrhEOr7eI4F*dAl*vU7HZ*zHRUS@DM+lV6l^%w9}7X(eBf|PO#Rf zi#91ewEVp`xcD+rICTW#<{M*XVh`oj8vbLH^KsBJzsnrfbp!>l5;pc%M2Uo2&ATAO za^S*y+H$KJdizSWN;p?X(i7_8tz`XSM$~V=*7Gp7L^sf4oX6Ce;{moI)nre9(!!Vz zTPj`H$zRMhyXD}wSY|S_ggmi0SSYz@S+eQ${r9w}g;_xBQesaxVw#62GOJ^TX+m?# zt`7)*_01y4-5+tVoo?7*MU9e^jLKV>-REZq+~;FhrEvLn=h^QeMR{y)?t~F;72DH9 zYmIfusR`=5mX>;v%w-9J7qDU1O-dbl**4+n^$iS_PDZYT8~rX3JnAjRWtNQS>|>rM zmjpw~glMORz0wuVg!)=0PFrw<#nU~#ym)P;Hsw}5V68M1k2xey$e9>OdZd^mUJVoS zCywg^;0+64zi++%H^$-an`+?J!^PBs1?&)&p=>!jY9LxI10xeqKJ~Lnzz%pb@)hD z%Qm}N%RhUi!FKDWPpk@YhlS=R17aRn(8eb`F1J&ua=Tp+t(ur-GI#|bH$;?$d?*F#Do@y4#)eBcHV2yl z4&&+C@S~T5X__*iaL$aFctL9pbnRvg8$QLd!P(pdI$^v0qyBh+MoabYOtX&*jFn_} z&E#|iz{Rp@g(=kayC<36wRCV=gyY3=Xv8-q7#q&+@Ok2QC5>z5C~5$kk&^Z@WEenC zD#Ktj*)GGI5RxA#X=6xbIgBIVxj+tbD=EM%?FP%DpF@_UKATmRb4}fn+bKs3a>DXG zXNj9F3X^zU-U1L!!OOO6msG${@W*p5O8>Y_DTt@S$QXGjFQ{`0_R7-9D_wuVZvyr) z&0q#tvu&Zly(LZF7*0m3KwFu1ONXqbitmS)F1T!q;DLF=XtosqW1LT!y6j@C(#0J~ z`zsob*iF7Lf~P#JGkB?*p=PT42On3?RHX{ejm2J%n|C}}G0^8$8szvdT3DW4o5Xw& z+O?Q$tV^!{yr!LDqk6jhF-3TrKs&h)xoGtQg=LJUzwZ$h~jCTE0h%Z?*P0RAI+0^l~cuvJv6pb z{bHRU>L5EbK&FIT0`m2r-0y>>r4CDnM9#K=oyHGbS8uJGb@Oh$)FInbC9|Io9qN)# z)>f7J#er`UIGt!~?D_$6TQpI8 zt2}?RpnfrG&5U9}CKG3PS;9DB$sy9ZZ>ZvPi&=?)xQg?v*ymJy?BI|opG%l#bc3kH zr*fuspWDNE2k+&6{(L-M^OUS4lxC2==sTuyju*uB*1JpVY$y?Z96S^sj}{pg{34L% zf;pSV{Mr?0l>D-_39X+`>@wSI9~HZB)2crzcafN+Q2!+qz-b%B1TNk#c+&Ulz;;R_ z!EQ?P&T7!e+{2Hr=VOG{Cu+APd44>vh-aDNn6iWgv@h@#@^j~CC(%q>Ed=50i$8^Q&9<1%ZpFtissJX3_sUF6=mY8x5;^~>y2%;aj_q=iibSB(3 z2Tn1Sjf#9Q~yRx=!C1q=Cp$M4dKfdLV31YA=D5 zdej=)jK;3I>g(IBEO7|H9ya{?@?To{XG-r# zmKYcdZ)f8JTo<=WG^hNk_d6CEI_!RFMSG&x6IgF|Q~sw}RW$c?WjezR$h7mV)4*Z2 z+1C2H&{bK!P9weNf9LAyvHBYMU1=V_&RsHLy4Yo&=PAy^F*k3@X>ydbkLKgmm@Nd{ z;@C>GP>dMlb@~36#qEp4?SZr7SqJeql!WJyJ7(NzPcJZf%qo!y2B_8(3D@Pjtl?&) z%aGvL_jvFf(CPAI~sZ-P-8^by#I#Xj7u}HZ)3hl;=sX$#fEpl#lEd(=FG;U`*CdEW>5lS z&}eUxK{2H<4$;Ty|66IdcAOzZqE@^~z_R>-n2$BB(RKN(zMF9_yQ|X5O^I=`*P^a8 zJ%@`s9x_)L3F6I$MVZM)PK50_m-hPznBLmF7od?5a35#^V@W`Xyg^&v{PCfVxSG{< z=?hnyez-D9a+G(H3ZJw^XBs#}kw@LmN%4b&RFN_WxP}ZfN@e*h@gn-lzART#G+C>Q z-^?>%kUworTMDE`y2vq2w;5ivdbD4~Q%`daG;(IxN{Tns-wmPb_oW2!qqLflY z!w)^~pup?=oU|{|k34XqZ)_`?y!?ZK_~En{msO%tK5JCMdnC${hrdnK9mAU7VAvae znsVo3B{s18oS%_TYQPbLZs>#QbPQ6#`xEi&pLby8fC(Q-fNrXp7ytaay!Lz=x0LwG zW#Z?fDVxK?oO|M5$_7H>uwW)|I_wMn9EhV}&YtDm)t}dKqBB;8q5;v17AGV?uiJkBPXUFHOKj9oKK`R8QDaqx z-*AROi+u0R*8w_(BxAFBPU!YcHCm<4pA_R?0ujG{s!&MYx=p-4_fy5KO~8p%sxG7* zIVRCleN*0RP+HtL^PFWW31sC*(?-@h)15^vqmjy&_5#@Xd75H-H`vjA_<`1 z8Uyy1f!>+m=Dq6Zd+RNCu!8*tUq7$4RRtL@o1bvsljC^d;LWM4@7(7eAvg;9l0= zL-7h)tnNKjnQ#dy9$AyqPIJ@2kBWm*A5)>iLeZFAx%H#4On23KDQNNMox^ ze=|(D&GsCZ`u zGw~72##Lg1v_p&DRsJNbt5raFHR66JKZ=?8WFZ{griO^wb^^}jpUh06+E75TjI@UM z+x=4j>7GQIOQ&p?DT`WAT=a;O|SIu(qu9+>XLv9HCB zw*JS^g8=jUN1{M{%V-1ZA-Gwi-?#qy$S@{uw3tmXZOS&cv@s~|9s{x{k9~7u+XTEwI(=pA?Wtnp>nQZ$pP@nDic2KIepmcE|4_ftcXF0n zkc>~T`*Y?d@ie&n(IXj?9Nxq2t}k0=gZ^zf&o{lWK*CCWI#h8n`N?b2J>};St)`(--gdJ~|XfGz8 z=Ut0RHvh2V2`z}7eN$RK0`3wMd`%4QZP&kSJKzZoroGI0fd1%dA>NTC>v1OC7juAV zMBXF^W5xGf8qfX6qkWu5qn5}^(hpWOsvwWDiQKXFEDP2LHpJRZw*g8*1a!KFGM+-Z zkiEpFuRGqzVx~tYg%WACF_IVLLuvKUX8k(ref`cq%=h$_NS=h)&G$}nix*iY4z^UU zKk+3;qHkLyBd5FhHwbUfxr{#GvEsSj{GDf28eBS#K8hT37@)OGKLrg;^A`E%#Oc*v z`%Dkp+mEJZ?h4vM5pE1Lal9Abo1n#8IV*!xJ!3u~Bj|b042(vq*j%izJx<4jw<4M1 zaxCjKI|}qjo*_t->|L=yP*<|l26nf*tMG@hSw>MCGWczgBHAsULnXXdJU0uxo?fkY zjv=3m*UxfuJ?iW;S!cGqckK(k(shps9+0wN6TW3ZT(0~Wn6>{?|x@+64>ZfuL5%E zkc&{>jx<;OHE97vZiS)z27oJR*It2r%siV+2Af2ip0S_rxc=pYZO)qh>((xmsW^d1Dtot}{)8C-m z#FQa1y$Y8V){V_TV;weN^TW`}m5S8Y`HY-0X};Sxs(vq%TWL_dclyDq^okcP(t+=b zaOPu|JGDXf)<8TZ`tox(z~CsYOB4`m_drxw>cRJxe8>S*1X8)GV&WoaaK+GfvY{JD z&)^jy7D-psqR`i3tqi$93jgd80!9s?B%BOmIyAl&z{xd&einBT&cMtG{WNMfMqhXX0x6o(VBJWo z7OSC}o?~boT$k9na?&MD=Mj}B*`TqR|FYDf9nVC~o8btua?^q`-1sG|1-14)otOf1&(%3Au86sxx@m01zv zAUem?bKH+}VeV4g75dxE<*u=VU9yE%Oc*k*L`luNH>welFy}*08^dK*d2pe@Y?TB^ zc7`o&e;SW9DZu1dI%MjR)kEUgR1piFp^k;ZBI~=p;BtXH1<1uG%Sr2gQzmu;)!Whl z-|15~yZmv_!F9iumUjLGcc$o20W^Sr-R%mnGV|TFo~{k7AIkf2Ixme^%t zBBZVE+x?^Lmic5&NAeE5HB92}2=~6TezmgWW?&t_@v2c7`EB<#4cdLuQ72Rx{WJ|oa$yo#KZ^hS8?$cJlL zpj1h*2l^7~ruB{q5A@p;PSSe62_XNe47&2ombuGs+5yl1jTv!i>h(Qe~R z??CT4+~F_J!@Vv@31(g)wTU%+$jvnH)FFYZ+_mY$wS1te%-j6X#g(>5aUIq@#8xRF z;Jt0V7*v^0E!%DxMhK{aC`ND?r1rWRK{ch*+AA|nDsDr&eBYnctP`S3f@BX9b-rw* z1#kvFiv+RYRNnYDgjTe_C%IxplRnHC(z?8Q+H|$OFn74bn56(w(6guGAQ-S7y!w~1 z7y;q@l>bmnK^MIc-RAY-H~0WhFa*|dU531ff}T7Ott_h|-jP&Fa4AraJ*(;OphUlT z{DJOgYR{z%PUrU4uTS=-E8ypE2%;P83Uoy`zP1Y(F#+Fr@IBDQFpc^PP{XyM3VH8Y ziIcTa4f1wHv-8&zG{!9+DI`Syeb7Y!8=Ae;VF+V~`$D_KjDIQq)TGAdfiS?4Z3X#a zEp`2k(c$#=yYAo~;j_+&A*K`ky%zb4E33x7Y_$V!s8v|ymCVb=io+&MO-~NlJd?`K zZ$JwWftZ>Dwg>NSy0*bxi*3Z6R(evSTX_($rAYZYu5tbXb=;qSu{S6MzpPs$nZc)lWGH6;Gw9Bz| zpZ|OClcMVCRd;q`n&4}cc8qwUa3_tllQTZz_Ey0gO159CIKl5A?PT$1VrtNmg4dw) z8IksB!HonfIyz?UNwUD9`=w#F&yY~io&F(R?=_T)Wf-$#6+szi?-qK-CXJ!=OkU4A z-F(d>GCX@pVKCyMo@d=WWT>=Y*Y7G0{!HAu1c4HZzmfVp2OA1syc&>~1kqhOL}K4g z+wz>%e0PZ)Lw~(VN$?=DA0oDXUKi)}bjt$S7^%WNlB| zHUVo=G(T~fLV_qDc?t43l=H4;{0q01g__?(C{9e#7+2^p|AyaVfep3MB}c5_{#6{* zA@d0OpgyL{#2$ZZ%GS4eZZG7hF&Gcdv|!Nq8F6ko=vVaPI?8wW$g6e0M*qG_)26}w zp}oUvKxLHio91X#ZzY8VXZHoD6V9RcF^srbLV9Uz{<2r)3`nXQMV_+lZXwHW>-7cy z&X(_60wi^|az0C5sfm}NR()jx2*5GJw}kwyxbvc}X)lqUMtUaCP}eROB03gX^DZ@E z^Zl|DMY0sCr@2ht@5fPoO>oVGaK*3E)SgO;DF2|_OqabvzkUU5BVG2^mTPW`yWR0L z3(Y>MZavaOMs=S3<-G8}HSdR98vd>WY1n>DIH%vU-i9XksO18|$2^g5IQM(f=^#nd8cyDxE#DMh9trrdgYLI{(wlA-$p>ZrSkH&w=Yz zvtJ{i6WsT;$LK}5XW29YAuGOO>NkAeuA8WDn@g4n8n=BVv~*yDFLMe8P9r;x>!uIK z38D0IFu%fxN!zo@38;-s#0){>lWV<<_8X*1J!Pf&*)du|<1%)btDQ_A zM-x4yX&7H-yz`OaNMYoGegdbrf7fnBgx${^Z=!uw7>CEk2E7~Q)OzOl=mXs=>$dBc z75B$-sfYPv;#O{F@a4+?$-tM&Q6p8gu$9yT&R1rn004|FM8aDDew^=LB*hiM}sl{puFvj(Few zB6v4>?Iq=$tNxJ7%*pRUVgw$@6GMfv##2g)30#JIg{89=)c1jyr160SKJOt!+}os= z_2H7bU*^D0jKAUCmo8tRD;f~Xz0%Lr<6Cuu$x0;%w?nH>a2T%z#!im!s)haI`AR@L zk&kGxh*vspWLJ@QY*&OO6G8b6RV-=z_gS>~3(mubk}0&N=q~zc`qJr@x^%Mh$92pC z2?(PBw|b6A6pLj(r`B}B?_6|lNIp@Z?WsUAr+w*ZFr!Lyfk#~$jtsyQX*ZSvQ-Yb)Cp6c zvele=Hf{SGn1L#y%ZFUexNLCX(_Q&P<4C*^2X6oa7$q56ctFLmP&n{~2QI|sF6sM5 z)HcgqaR5HPp*7on)}8@)i?1<7Fnqc2pRF|$HW4>O4~P`3FhfS zsK9DY;`;?5bxa@OQ^u51Ndj^Q)hRb>$7tD3C$l}hY57va(%6|;Fg-*n2U9Y1Zyh^{9Oyp>uk)6^5QfW&%=8 zVK;rHUC(r8zUM|A=_@>NGKlz_z0v(Ih7`MTEPN%Lo9aE^WiR<=zO9dQBOOd`;%jz%1=k#E_VuaZ8Ce~ms~u!9Fc3YEZzedqftU8HsnLmXv@j2%nT z;fF3}3sqP#NN0NHTx8V{eh!GU)RNbd#p`oP;%z5y$)Sb?XWxuUF7Kr@6o&E}zOrhU zq)HwxMP8O!PP=wH8@ARSuWEH|1EMIO9bWo6s3vxp*AS;fPdkk?kO8GhJs|^Fc#d`; zF4$&VDbnlTJx$?*5*nK|J?#__2)ud@`e@eP?>1{qESD1Kq#2cBdN%pWRIfOwR+m%$^B%|_BZ{<^{$nP2ylg$l zZv+vbK@N_mXQP0qReAH&JWLmIX@;WVF4<)-C4||Z6Yr(9GZ6u@au94s0&@Ow134pP6sYqy$Uw92d^i3Q$7$`8zJ94- zUrQklqjj1eT)(bdK_~K7Sb_BRU-ZP{bQf7&UnB}ND8n6cE%?kFuu|+W{z_IkkwqJ7 zv}t+cYLsT3`bd=x&yT=(o+3<=Ae{0t6{djeBP8h?*IV?v)=RM(Z`d3wgJ9^-@)XlU z&p3bCsC9*XKL{SM>ElSo%^ZLa>4h$o(l*61okT!oJ^}}5$ciT40TgZS9k(1!{ooyW z<&-O!_vT9Zo#w{}f8yTFT&!?zq&{v8rx&`OVNF>hJYf15DQBZTw5bxh^k77mt=&39 zT)C;*Iq;idxo)S607^pS@b6#&R%s~nEOakqq2;YeLA!yZh%diajgP$rlg--&FC?n5 zuy!9537jmUqh#8H5*~7X7Te$r<=)UUt3;Z+?`>N$kN&;3Ll*mFKvW-(Rf7NfCpl1n>jOY$J6l69IPqYvmdmXoLCsK%2=lM zSWPEQ9iEkWpxgT;4wBacn2)MQRpbN2`a^0r`M%@j_0}2rX?ZMnE-!gEJJ~|oh8T(2 ztWxhOVGm*|LoH$11zUCfD)(`3ns-{FmkhV+G?x+$UA}0Lv9yC(}%=}=eKo%JxxDJ5T#H$6i} zY^bsRFXDf^@T4N-9hQ#j1wJO8_49^#vC6$w+lP&mY~o~pwA~!}W!+Oh=T1~G^Y#~{Zq@0IOAk3(WNCE%ezqf^~+7ftHGy^3?E#3 zHqDXJ%al5VAw3dL0SbbYFD`4TCCN@uL>w_}6!3lY3k+LRTq=uKezX7KZDy(=nRQ|> zEz@aNthf1f^QzzZ#}Tdxt=({QQj?$3#72vjLA2*`lj^GOwn2|qY3O!ym>d-)yw80vb5xnP$W7K*rLFk%xJo;pk^2K zoL`BSYvScvC#tT+RrlIZKudR(H=gK6z%9M@rQci;xG+9S(XeDO|1`6hE3P_5e4&z} zSu{6kv@3b-qkhs=-Jk&nYV!KgbQGxxy{Skj?e-TDiEPnr4u1dpWYp5*&m&v*2l>J} z%bqz>9+hv_(2ZN3ZI(iE?Fk9P6&jw4>vCS3V?`h{eAMx;Jy)Z~xa%}(S&GLqytmXa z;WC^ZBR4`qH4|Z%RVIcCpLA+G z5Sg>VFW4%uceyfvU4tHxgQ(e`F%TnrNu;%Qjl)igMOdS-`~Fq)M<8o?zLRapFTfRc zHdVGDUR5X08WrJ}KD+Q*^Y~e|kMmoXv4!`*oGhdiB{X@ac9MBX`iT_ykuWod&NwZB z9SoFJXGF0njHAb;Bg98lcmnuPfy(er{NSw<--aU&tBZ0YWnd%O$GXn0<2V&xB0ZAE z^9ijC`c2D{-?q~k9CmIJe~V?#{pr%Xna<7c12f_LZw?Jb1aHXuDm{!7$8|lbKDc_; z&(kj}+HXY!0Q4)9rr-9YKbo$gLa$%B0F=h)y4xE6ZSaJuz{M#)JZ`!rh6*)nS|oP6 zu(bT*z5#+Ihmh$}-<=Mb%{D-KnOAZkt5>;@H{`KYpl5q;Ri5Ttz`%kz?+v(VZI-0_ z;2thhX{^E25noef6x&WXP*URb6-nE5zg_R$Xumi;V4z4yB6oi=xHU{Fkom$h!H~jy z9-d0luRpodpNyRh)#o&xr#?|Qx_6|qe0w*1rqbpbgtPXrwUC9HR+tzPi+NN8NRW4B zqk3MnX)8Lg72u->L*}%~Y6e5D0pr_r}uDZFRsyP+4SU@ zV65hBX6p|3j1KYzBstH}ZzQC!;xuEw*0c|FuU<}L2-;RNtfh~eWW;yB;PAB#B&(m_g{OH@`jeRB3`?K-{fnV{PNfP zoJoXyRmFFJJm#J0jT&~$_wo|eqYL?t+RZ*AvjP3j(rFdKO0L!govRYL|A0sQJvEf( z;Xs|`%KO+#u8d8Et-&MFZ?2CwOb7q&xt#!}rl-|ETBX z(>71!&df!KHhKs{6mN|GowSnac-=Mr^lrz4V4C}Q4X%Jfexzk5+e%d{M-o+MvUl_8I8gdj~v>KvxUR-r?`SjI1}Kbx=hDRTV&nHvK>*?u) zPw5jd?-cu0cI*ACK2o5IVsF8LsJ4Fj;gIpfPu^(zEj(~|3l~(!HP$c9SMvTD)(62z z1VmcO2+P#L6^}nHw~-w~wN&9H+idUWOKJN?DHFDF*Lc_>=kA=??2{ z+QX;9Jtu@A%X4Lt?g9r+j}J7sNJ~)m%?i3S{Dv77^fZyPF*w&!kG;ozCQp)#0O_Es zR1UAMQ4KSlocKk1NApuXliCV3%%4dwA0<2_ z8!FoqxLO0Fcw|C48wTylRpcjrOMbWo|CY+nWOrC@OEW}6<{gYbzGXvA>gO|#I$6zN z25QkUR_j-V;xLRT`st^?E0NzBXp~l)Ga9c!3*>OJS*I^sxlRcA3RhaW);eXN7RztP zPD#g^#rWt1YBf0yInU2H8g)*Ed9a<~6q~il6Ui-8%?idXr)xx}Lm{3I1$r()O}02Xo0<{NhVm_oZn3wpwiPu0=yl zI+4@yG~mteImK@^6P_Z9$IzXA)ra`y&W0gqN*Kta)e><%EK{=UPUF)#tJ~U-Ha%|l zDyjHfaG8BuMos*Qp7dfhU*fTn7_}=Kat-+;b8b>NZjpyTMD%qgv$<~)AKm961qS&D z5(N|$4>Gr%#vB`8o>Z~WUM9+rLarD+-Ia_pp2!9qg)9p;hi-p zH@&L(F6v0UochX<;d?p8je=`GtusN_P)2A}qc>M)sZDEzD2|^ayASfQ7Xwr&B_Jhk zqOBIbyKU_L`s88OoT@`sc)!D9GG(PGrY`IZwpK8-VjmUUTN0oiiMKyQG^N;kZON)6ID)3g$*g0PJ0iM`=5oTnU?ue@i^9nWhTm5Exw*f@ zcy=ncCcb^WtFCZ1MS+I~$#8>|1V)u1v;FQAT-g_w2d^Xy(_WQviS!h?RPa3T7cF~i zVC0(#0w%?rGNK&c)z+Y@h>0;6rEPiw1v&%MqVB^<+m_@++wGrx&%SYRS%#m=OPxweq2Q$X4&e78_j1r7!; zAIj{?ps*LNi#k~Y-E_A!GA~hS4+2dwI=#0Ww~g8PFGvUbb?oulkVgrhl*vJM)CtEX zcHcPreVhA61(Pmn7(Ly8RM%{wex8YtZ&TMx? zjlzXJcTkQw7jaM)>2p`82!m<9Viny5g*Aw_y!-g?5h~al)=w?9Ibsnlt;vU za%V_FFaye4+QjaBn$-KQ;=}#Jzg(_R+`%D$?j(cy0H9IV=!{nA)!bTzL-}Ji?_5je zr&-;w%vl&h5&v0c$xkOqTr$AMuNWb(g;g>L5kJdvQ}>JKa7Bu37|kn$w-iBJfuE=mx$Vo!Qy0b05%&I{M|1dX_S&MM`g z3iQO$=@<{#n7lD#2${GZ#$jg3S(2KTt}NcU-HXPLBQ^#sU+%W~;ru3#x?&k(ly|nuZe-wGoN&HeE9== z`0&pw0SGeHrP@H|Xl(F<J1b+Mhv{=Uui)yiO~{Wzo6`iZ3*o3dzXbn*xwnH@rrqa^(H{g5 z(r;REhpu5V(K@YwlQ?NNq^1U!z0bqt+p=u;tvyS5Al9X7$f(vonrWLF-5mW;&p3-( zXtfJT!^ENoqbsZ|c-0+BpTKE#x2E?_>5vRh`R=ubFh7|ZJGZwX+*%@_*gJzQ7Nh%{ z18z6RfZ9s6Ho4)7LbEaok6-4`_S)v0J;P3KB{;4Lom!8b%vhm2jZzY{i&oubCQ4C$XIi5 zltPk8<14BFE`9lue9yKI3b`W$5O@>P;-1wkqO+ysmL^R497l?zncpqlyTgdQ)J*@t zuKSO?P(b+?O}HBP9A9If^&>D4GHe!j3!dg?)SQQxvSweo@JN*r$tGTYSZVEZNI+NT{zdX0 z3Dc!X{?0SpuC;)#L2-Z#=pU~buf<~9dVJJC+Pkpeiq*^VS@FT05t=sWY#$~qwu)!& zk&RlM@;L0LBg(2TRQA@++H5x!Ya9I^{ph=y@ObcC^1wu86(V#osj6@nsV&m%o%odz36%S_xG!TW8C3UJ7QSKrmj$3! z!C26co{>8(lzOhQ#hr(b9=GG$AmzKyUoO;GbDuB0D83NU5_(mRjDY2osA#&|p0vGa zl1y}6xfo;62olO=lQ^VWN=vv$d)QcCU}_li9H;cnl`s2wVoTYuyz$KP;29((ZE1=7 zr_ee+IH>*uKKceWE{7g&P~&)|Opuu6lV@CEEDM{yLv(zT%H75KuWs6ahisNas|LF| zZM#aaTkF}Bipv{Uxzp7wTl>_ZPhTy5Z$x8(2?*nz&Q_muh4Z@w0e=tO6s$YBlFbvY#{Z7bK@-J@^y&M(J_cII)WwXS)K zM@dWHPOaZ%Z#dk~&NwsFBRZBEzarY`^eI+=DGzaQ$1sj}t@ruuq*`XSwcTMsxBb)8z$=cp^ZB=earfvbO*mh)-zs3ZkcFnYM&+oQ&V|74KSq3eGwR{ z!)VcD+p9GHA7^hF71bNXjY%?=Ov(G-~+4~o`(2>d}ap4-7ZF0}@-Ct&vPk3lP z>_bx7GsCBXyX*lpVfEWD)wQ=LtwT3A1pVkrXnVI`#p#K5p8~5s8wKG%-I3xzt7gr+ z_9EFiUMf3&$Z`A3A=RihM(apNO5dQ-AyaQ$(Ed%OG^^#xklTDsiR<2Y=6xvHwXYU{ zdvH`67>Q_lcXjsHN|a8eE!dOHc`Xzv?$H+4sWBY z0kEctgX(<8HUAppyc3%WJ&I|JkP1$>qvWJ8T3C4Nr=##ZyS2CxC9hABqs4D|vmKZZ z2@0RaW18c@&UfllC3%e7^yc$*LlI8EXO^7$Hnh*{&a4_e3oaYr1Kwp%@3>dq%kQ|` z#QR2W7|Moq^zi2QD4m!?stwE3o-(CJ$o=2QSxAsWneDH9=M7kV%eFlh_ZwT8FG6Bd zRxj-r<3rchU3RL>lcxKqj|?*j0FjG7Z43xFLji^ja(3qlrw0rkwl$mH)=0QkCF@|uBz)I zOD}k(;R;#u=dgSESJ3ih`_}R)^B*-%)*_LiGo=OjI@;|iKOHq@hAL4*)7+7gS~HF8 zE`KUA_w~%RcZm@Yak<1TYmGE)FH8J>-9y2<>Ql+Xo5*4Ebe4nsrn{^Hw)dBcsMw@t z8YC!|-Xr-96r@4! z#PbyF=YA^E9lx56r+01!TSi$@0c12f3V*|JFMFnJL>&ARrs2E%MN(l(8&+!>m<_E2 z95(w?i|; zK`>c+20K{c@E=jU;#(0ltlx*O659JrLEYO+HaW6`maAM@+G?#M`u&4seH*I@vQ}3zfPP*?E z_vXwbNx4 z=lRsWW2HCwSo#(7F}BzE8*4&1C%-n3>QZNdW2O-CFJO25RGFP=Fc;0H)BZfOft>E( zggk>a*S>cyV95KAakGTwl+#h17nE841QV~+LeT*+(0*IZFQ?c`vlfdCvHsoO5rF)G zpPeQ|A>%}YRRt9&odPrWL2U$GtV<)7SKi0()p=t_8?1Ki0d70WIz)dFcnU6Gymi@DS?4DkGYRgYIiPL6ng zq;xK1x;bd=U;$`QIXY7>u^X=0ch*LkWZ9g*{(cZ-%STwm}m`W|XlOKiTrVg;{7Oe}_jGE}*WG}G? z?5BNQ!=8dLE#;|aZ;#_#_NFv^kU`Hjvo)q|iLq*%0TUDhEmgGx+|bT}Otm zN_E<{aAtXX4h36ezTZWrpixyO$;DE?p=QBU^XdHgi z2=J^DEphH|pVp{`umL;(^4Ql4afM4qzs{c?VnHS_7;BtDVH@WLLQ$ieevNp z1<)0{E#fw^Ue=%OM=}npa!Z9r z8H}E2_5pu(rt4RH7Xr?PG76wYtW=w0Q-U1kr$fv2z@j&MWa;m$jO zVjnehSJstK+@fl1`x?=meQy{H(Kc1>47yt7W2mrprflZevQ?9JLhAiAZvYCG1;j5t z8 zU}Rs9swY-UT}(TLCyj@-_%NIiJmdb*<~3cO6aVL&Zs!is8y3mD@Fa7@w`B z_>A?yQok49JWP*pC*R=ndnx$9KeGzZ8_&)AZh!N5oJr+e`1Mq3cs+9n$ zOC#q=N_%PSCw3k^iFi9=3Mhn?rAH+!yb;Y1||iw&{kU`W@f-0~I^=td z%;*KDs%7&$rB55a)L1T@QusZP`czA@vv_LR38|%Zw;^u7vhfS={7}rhUHks-(Zevv zLstWotV{TJq_S{)#H^JAi{q|@^?v9l`Tc?IJYnNIcN)VrO|3&6QGfl5iJJzDg{a-6 ztqZ=tYoEcYjsC-(6TT*I{W8l(_4lD%wAXFB&j7JKOM#=3tP#W2XHelyM;!q~^D2~!OG@Ia`1{qCN7)_-=VXbI#8sQRBfjBfV_)i@ui3+Ki zHgAMcBUOl(-ffHdTv#KFu1{9_wrY%96Nr_P>;W!+)UnB*WqdO6tzTS?e;8-xPHh^8 z`p;Gt^qo3ZWBENKBYjNc?d*POh_)ReZZ}HBDYH3LoyYwQzpS$l@jov(hkyB5TuNIKs6^*&S3BhlQ4@CS6G*K%kw|NRxk zGw9JLlDS~$T7Q=*yJzBe`JD24Fh8~?1)GOel>***vl;ckaS=n;Wa^=(3AT813`l2{ zGAG*`7NqkiQxA2_FoYK4i%kTu(8jemO28#Kyp5{=6s*|z z{cHgWet-p|2G)#yk3%j+G$VxD$Pzoegd(EA8ukK>;QN}KcbNeD)><6c3N z9Pyn=jHJ?)w>R$-AEH@0bn3icih^bcwKLRTX}_MURXxr!Yd;%e%Z_vJ^ZB#Ma%%fC zuj=>kjNEQ+Wl!YA=gpP~%2n;}0S$9(9QW0QTUiU@=n#MP!*@)HW(u#lpbrZ3XK!BM zVod>3{V@^7-j-8hj}6P0(OH9^ey}GZaC4c84kRG|`loP4#46kV_78lr19rU8iMp?R zy$WDYw}cAMSFi#f0P(=2CR)(~bt`RAlxh*b!CM8Tr29e9FUe=(A1fDx-t!cSgTF1y zkcO(q>2p>>C5uX$B%|6&7tu+}_3EDANO?749ntNz!XK|?t=3bnv9!#8u$YmB~i&wzZgfbZdNTDMp_VsftDW|KqGui%0PKSSiP{}n9b`&Bb9C*g=#@SyR zI!$=EaGq#bPsJ}F-j;npzw~Mh5^403@!^;(^(Nk@z3ipv(?0fFrb#ObO`v7v3Z*T| z*L$Z?5%Nw?TEP#c-3H$jrjJAu)53@fY4aGsp>reHX`;5BQDt(87 zTlf1ep2nw9urL9ppX^`i#aF{S!?oty!!GCGJj1!9&UXRb`IT>sA(P|I8-q;HBy)UY z7CY(GEr-TYnFjc&;Wtkg0QtETX_bUeCr0WY?D4|@F)ETVVW_nsl)`1SyA|zr(XQ#N zGprSLlPz|_NtNGK!V_iKoOHu8MY!?yK!vX*0#AX?3?7~VkI|a%KW%sRcEzX^zymwm zBySl>Wp_IQQ?LAZ((08JmJb-u?__3AS&1Lu-wN11i_cQap5h@z+Qnm=5k+ssbz>|( zj2C zI|+R%??qzCzHh!kp?QeJf==JXo)%6bXpki(cMgJNX(A*(1-mu(W)~B|j6(Vsu}Vk~ zXVc5Gv$}ops6mOgpEz0Csj1qcYlD(--ur$k+mEaItmobBZ*&uPuPItyl5qX`%LJ|U z8eG3;8`l%&@Eadd0MgwxJWeuTKNwYJF}Z)v8PyRAPZ@~UZ+P^eTQ-98ATqgdTvvP4 zBltjhfo<&0)3gpz%9e&=-9HydpRux|!`pl(UcFd)kgs!E%raH|fMN0b;?%N~ZDG0K zbn$df_ow8+GAXj;b+B{GtPbW*bH@oUi`h!9;h{;Sy2kC+MP~wB71`tS^JbTP$+tokw^eqStsL2{FUCm!uuHkD+tU@<-Zy$T4D} zk#QFXshZE{T*we7jotHl8#)EjG@YnM2`)DGVT9oNpX`a+R+^WQqgWjS!WcE{-~gZK zzWJ z+dy&uKVCmza?3`pZ!aL4s{!kU;T*Yf3nO*6fvG??J?ijvK9RgJt-BS6aQA>@XAq3D zN=Es|+)OhulJH*d*!8u(mGjI@n_bU>f)g-!N)I!PBl_ZoSR3nm5DMR*6)yjWQj??boSheM*irX7hA9QMfHHJ_Vy*9j;RZi zcj$>FRj7`J#Gd1}5RBRNmIO<1(d1_To$%(VUXNd@4wVfsYv&D zmLY+BSx&#c)>O*v3{S4}eqCGNd6A5I*0i&uJHis+oaIqk-f(6$n#K@WWZ2vmDS6+G zO_F?lH}Frrt(suFDXFzhmTG4`K=#Atu=9zMSYs{bxFe0lx)8c#B3Iv<&L39<8(& z?8p>~cAeC%$X3<2KIJa^0i?|}h|dqpg6(T`hH&!Bjym8WQ28D$2dqL7**}mEH>X?o ztXRPSP17h=YkSzooe4rq>~}GRLSFuEvrFK32Az2dts2jVQVqvi$a!NRGR2usAAP&b z0f17M11Ek)gg*w!SzrNq!s+DE{ZNp?nM;!m`cBw2h6MAWkbuZS&f4T&CdjHF-E$Qs zRaolt`v&qkk?F$m@9ntQH)F<}iO21j_7qz_j|@;7`=!(^YI~JBOTKGv%Qu@p~=bMQ~T)*==!2`qongCJ2nN$|GGFoaFnlxotx+IpSwvg?^`!X z{GZ*%dxIwIBS!cQmDswtJpMJvJLojV`}Ru zQ4X}y>OmhRV{*?!pT?tQ3c=*GGoYvBT+y3lWd`+&U8rEUW$}{ZSod#tNUQjY3i6n9 zQl^e)x`pC(4AX6DA?|wPjYnLPCN`DcunA>6on(#*3XcNu&*cQesv-2+IcR%R6$A7R zm4NF38V0f$Sz#D&J?T>yu|CD<9mlNy+jlS1H%kFec{Sa<->WC=&;GrrmBU|$#ubn2 z!TYjThiqA1f5Z+-@`F989Ttbv&rV4zZE8R9ozyQFAI2M0ta}3Jz_x$t!?yjaTYZ(C zek)A4(*Ds~KvR}!gY$;#0pUK* zvzlUHS6Cn;|Ag+@#v9Q@y!}zmBK~jFHl;-}R@UCzc~HG;(JTd2zV`m++Xt^2>_0?` z-wxf678#nzPuYtW>TMh8!EI^hhn4>XZz)Z(%-&a0mWhY?gnlDM`EA84NPJWc!rrd# zp%(XYI<@>otFP;$4!%r^c3+pq_6dKu4V9|2#h5WDHVE4~+h1=rlP;4|vr^Zs{Y z_#nw?gBF3K;@%@~auY~(ghN}NdcI>+LmrkfG(^hW@SZ`R)>r+-4UOy#%|Utn?)Oz- zGqsyPg`4LGrF3uIeE5u+Gcj=YWC&R@7S1~Ef}DyZi`MNFt^OEnwY6Wb3@~}lNF&G6 zg|4mRDOWi0VM*P78%0hGmJtfWzuz!NSDM&BzTKM5e0tjsWmC^}eihQMTMbex@>g7y zwV-P1rVziJt@5+kgDRXXNx0l9ZJ{U}dvwa%KvoYhiOX%RRp7nA*2$Fn&YubNS;()@i1z~4y7$Wq0^aV>#dmftyqb1+eRBP_y9cM?@7m= z15~^l2r7;BcBNA>_XFmwtxxPzs?t_eLJqR`PR}lT+=I^S7eDuWS^bF5b}2*5`&H6$ zXN>4vEmON~s|65!{y{z}CZJ|DZh9VT)`8Q%FX@ZDg|^cp{9Hf_Ut4@Z2K8`nozV~v z?Itl*yWI!}ZSxb$w`F=PiQL>@Et9kXtkSHd3hw<`9e})}nd8NrGkDX)AXn@ONH_TQ z_F_)h=*D@TfFCxFo3>(&`Cn2~c6%|&NB=!(zov8iT~ig3L%6L!kdLLqQeK5}D{A}o zitI1$UZ#p=3FrdES97|HBWdP&0IvLYOStsxUIp`vU_Bn4!|od7e=&IT*7jPcWW|$s zD%sXzwb>PCDveG#qY1QeCz+CWgN9(a-uX}ttXPn1OcMf6XvLCXiw#(!f+79v zwBNSk13_cKBSCJeZU6|SF`{7#BJD=WkjBI5>Pdu#dN+4_t+j`TsBn^rG7Uvs9Iq=a zA(CRZPbaUBF1&H3_V(Xbw!E)QhDy$S+gJq%}`01B9V&}VKS_#tNj=fdis5=6Aj?0DR$M}DXR1wS(zC$djUce`v)b)lK zRo?3A?a@}f?Sfj793Hwr$LPJ&;~`Q&TOIEvq^0y7m^q7V0-Z1;IV`+bY1XWfD zZTN9c+wEU>cy`9Y3-8vl{tBM9PlQ5v_QU*5&RVTDeREssQfB zF%9480JBvHax|}_uV7+!M|cnibu-Ys8k^~X54$4-LqNmM*MIi7&SjdrmuAtYXIC99x-w4bkJEU7p=vi=-(3Pmw_H*3+$_^JDRjgL!(&um*J45U|l z*j9RHLY;{XioI&NJ@F+KAs4??`<@ZyZIznonSi_om>Q4I><0*r+duX42crUxst2?t z;OyjYj5}BgCMH!NAXZt_V;|g?OjI|=jd=IPlKU*;t;TQs4V#7x=p-_q?>CNDKEC5G zACV##{4`1}n;lLJ)|_1EgBfI*UNk?Cd2vRi!GH11OZg1>OrX1jJVFvqUO1s48g|NZ zp)rR3zy<(~TzT@%4dNsZ?B#%q6=Vp-6;6^;2VU5-2njFJ$sC8JJ31k?PPY5S_5vtU z^?-re%P}FgWk&5M9iM9Z4ICaY+0w(^=Z<}Lu^yvXee$m2k|#;FGF4AKQ1Sqf#w(N* z(3!$8^c$NifIhiw==;vRCY=&@EO~&HhkeW9pXAw=8ucK1yFs;z(f}XT0qr63LVra! z|6WCy+z(KKAruH?Sa|76Km_nlzJllUtv&0dzY;RVWj|Z4+pQf&l(0o#S@5*;;mx6} zLA5(0tOp9;Jgyci&rUF=ILw}Gw=$|!O%Je#>Z&2NmJeIM$aC;7p%?i+DVUuexbzoUPP8x^LoiQ~&ib-XV%bm+kX3!ZB+ zK4G{>v#(oGWE7U(P8~0}NJrL+T)H>)8-<0m>yjS+G&**6Y1h065XX4id~`NqA!5_r z|2~AuH_T|fe7Ww*d42`p(dnBbdRa06Iopiy<6zXE^Z27G442lcWu=TEVGd#i@h_nq z9=pGnRK?l)-$U{Y!&9n3pD4)*KkU--38<7sm5_7-i|sNy1{Q(`4_?if8Ce6RNi|&`Dq3T5YIV;XdN#!(~2%@EK zN^-_?f|zQ~K;Hsl@1piA_ySMD^Ie`MK6Pa#hlhjZMn`d4Cc4d<5$;s)Hap>$c^UU{ zx;04%fgi?oY4VpZr>%})l@|2DEZNcYewzN;8UHGB1xF1!zLd=if81){S}te%o;3G2 z3CD6iHIf6@RcqA2_7bJzMpfW57NdK?4qx{QZg^96Xd`EGq+xwZy*s)|=Y^>zXJXI2 za1sXyn*MCB6|@U^gOv`#(XxT6<%2rHk&W-P3JAS^4WIl(EV4R22&=}}p%Zp`_tX1Z^hEg_b1-A4QLCFUym=w3nvTO3 z50%*1E;VyWbk+0LLJSbxO1G-NUJZcWtiCSa{{n9p3WQ5s3D1d{8|q(p-s3|ujTc<* z9%#?#PpP$&v9%`mq~Hn)@@YY8+1bA1QrR{GwRzW3xf4a=z5H|L;XZDW5y6LmChflB zWM`z>!+O$bDwJu-Y2N?4eRpF zhlvuXXo|NXUrce6RS|+Vt8H*y+&P2bD`hbaG@#l&+taYoN?QLj#OXw=;zr)a^b{I5%@XAm?iTwy*BIkqvbkW8A)g>!vw*;3|%Vy zzLq+O#LDZuw!UwBF^(*>insO4xJP5C!;x?*U@^Lshj4nPTj}7;K*-&wik7ynI`Qdk zy3$`cZ>Mpt<2P5G$ODd<;$i-R;M(-`+I(Tg{kZ8xGBv>RLh)hqwtyqeN1`hN+iD|T z+mv}l`=FpQRnhZkv6?TlE>jB<#Sv{^aWJExk#*+NeRp$L z=AO_|@-|E|n+g)P?=yyV6kAb9vp-EYpIdsRJ2#?xCUbir8My@H{Q%G^$txdXzub_! z#dn0K?bA|tWmOY>X;A;UFbT~HHO*~?+ROI8a%5y84WvG1oUg5%T8pwdifZ#M6rU+& zeR46(Q3-H8X>-vPqF71RPNSk$-3;&08-}7hU9n>sb8E)cLq>b*@@qBQr*}8N1V~G>KbSJdvSDZ z%qINV9$+ttx1458h@lgj%Z~JD?s{^Lrv;^THmO(yUU~=wNSyJGnbb*v$nD(9@TOj6 zYz^%%!lpDtbx!;vYQoNK)+6a*GVJE_yg|FBBz^=3au<}tMuBs-l`-SrAxfvEL*YG> z>a(|5z9(PHvGKvOhS3J;libK$VOCj4Fvkr$O=SY$N+Lawo-tKhEPhD6mSDvKip*(T z^@%zIr15I{QVjG)-WqofIx&5oZ9DC!MnDq|KZO{1tg+-Gl&ICBxTBmW!U9_ZLSTXX$tq?OIPNUTajvtu3+#k;m@# zYS^Be?+i0`N{bzr_4Q0Kx)0U2Sx22(Bw64U0?mo z)b>;h7ghcg0BS7b@sU|X=s_k4Nywf#x$$__wm}?iAS?8%s;@mvs0H0}U8?WIX*C1_ zr1#I(dkI%{@k^a76z6%pCh3)y6QcbwTBwQ}f5%^Zu(=d;-j@QWFw&0pO*Y1*66j+~ zXX`S^JQ?hqDP}w5A9&^vw>4O6#7tX&?f>_QsJuFO{{6sr@uS}8%GMwlK%Mk&$vqfm zJoC*_I8gRsHu85oB%~#F+=jkc-YzObf*5!b_XIh{ZFVdt5i-%pn4paGkDR9d>UpJv z5_iCx09!a&G`oMwDi;-V2xiA1{OtWQfJTBRs;RO_oPGGqAxCA3g2_U;tx#5(3rf0* zTT8$$VrJn5s0I|wH)%DAii-_Zh{F58UhxK02#R8?DgBC&$O1(z$V9qqP{EWU$f8=L z_TpcM_zX@jbUtLaAAYILQ$)67>JyPE5hvp-lM-R}(nyKaW?^2w@51p4k!qR%NYeT>N*9HcCt$6i%cHS!Checo{EK9N4j?`W*o5Vpq0@96XSCu&8@NL$M& zX5#*FN3o%qzxoRAYazGt^bvwW4Drc z8#iR4v*!TD<)8J#Kqq-(h?bw2A;9hM?anW0`iT4FKxi1blET*^l@Y?|Qu z;kpx*_YA7w(EabPxcG`{gP^zg8BSk)GB}JvPCXT~aU#RN<+V!RKQ7a+Eh-b>?B2A} z+TX54KBcPJeS1H1dal}7Gf2qYQ;l;Fsv^@>X8Ty}b(qRX!N(DB!o=?Qw-G@*y$N30 zyC20_!yg)~arb993W8|Qzll^G;b5}z@@kGbsa^a zYY9%rI$xnd#O{yebG^3^fNiZmYTEz2R6qamMRpi|Dgw9V+r3jj!wZ8A^IS0Bq&lyC zrN~K_SX7%psB^LE{_LQY;ikp$(%M_sXIh2kOH1_BqgBB>#5#c)Yh6+{R@$YyR)A3= z->Xg02yP?Qfyj}lJH(!Ymbx{z&o5`Ri;#@q$rJhjCqyXkl2Iy3Hg#l31ZQg@AqXhu zmJ+r^t@$^(?x{5pq{x&$K2G9x;l%&rA=N%#X@q^Lxx*iPeS%Za(R(r0WT(R?q%T<< zOh>1)!sJ7G)pHaWD}69%@tC*u9v6F)}U9N;prEg4yHwl#dqH z&N*5P%JCCFJx ztzx2h8cwd$n%ikfz)4-Bab=5jwj8pB+VEFQ0xNVEhad@&{P#=AHMH0uVN(&wsxA6H ze?PB@o0?Toij$Ra_`-);cI4e=b)$RMUNQbb3ekm4teOAiT-6;|BSWZ0rWsrR^5-+( z-#p`b@Q47Wk9)r`+2?T}PyCO)RO6u|Re9WfI|naf%>Mj%xb#O?|z?&lw;3AUc~3#X___z0^jqG`6yq!WY$O%I`>AF|gL9{N)_ zgW$3X-5`QBbuC0Yv9r#$D-~>F=;ZdI?S=^FV*mp0=n)1K59;RB)rU>K@)m~(J>(IC zsT{o!p=2E?KrSQf5(ke!`bc*snE0$$mPhaVlV~{ z`h`f51zlS5t{}n0N031ZIKLbg+L0*3Z1N~26XDJ*~Wy~bP@VIX_ zdXfD6&y|V3+5o%LV-kOnqO%ZYPnM@7AbuxjpAh#sy_?wW6N1~QrRpnO?IYX!ceRev zOWGcN&vn!I1FO~n^TA)-tw(&vR`0rd8Ksc&A5U2h{yPJvoK*6}kL+i3b#!i^|3))F zh5or;EMa2c!>y*@ze)HD?BKd#-|Dt5u82A%Uu59wd&A#6lRNYk`@hlrl9P(%EgV(d z_^2}b-}Oacqv=n9Q&K+S1`X|wrH`>ZAtL#soWeQuq5gBj;`Um~IZ{yJeQ zO1d&zgD?Z>uTm?!V(AHSG@rGE1JeWSO8**XFp%~hd1(b$D=Ix@x_JNJP;t<((DVu6 z3zeY3z1fN%WxT0DiGT@g^gB%Pr;D_yGDynzsh&&LmNX~KZOZWbTrlB_ z&3loJFEbeb4QoDjEPAaU=&b=9ZqWR%ZnQ~!}LEkdn0wa5D%IE z75zl+S==$t%2!ASx|jua#tBB=(bTj5W;;a6OzM%<8<2=gh<4e#K+EJ}LbK4^u?PiV zyzEpsP6$J^ZCCGv2|IXJyWLWqOXttA842LtVpCg&uLMh};_SDVlmzH5rr{3q2HAnM&7A!FGut}XXdCZiO8$FJ{)Ov*v;Tkk^RDTc zqL--xU75L2B)ZrWPacL7+<(u&e|PEs{D+|CciggoYG7HJ^vYbBm+NnAX3~7vp_lL?fI=OAy0}ETJmT z)o)Vk|Nn;>m!3Yt$Im~OAmMuz(iG(>4nG4jheVF!T8G_Ym01>H&i`E;{lDfadMJ># z#hE-1LkuZxI`HnvQI5aD|7}?QcepQP=*`}7)%ow4%@x)?umBC?-D=Hm zg{pZi@l07X@BVkV(#zrC(}}0i3OjvC=F&}BnL%ZdI_F+5CUfZ4ywEDH!T(f+H{Kan z51%xK_X{hx3tI4w{0{h%%wZ6F*;(Alqb%lmY!P6G2)1AA2&NTDa6BNicN($%Y-ty?iBConSCING^ zRr_3&U@{TS9hRV&DLyl*KF)eHO+G~|G+5qkX>h&@@8l@ zu3JV=Fj|Z~TgjooisS_FUA6yRgLT)w4ESh;B)`;-On#viHupm-e2zK5(MOQVIe8wZ zB#_pJqwwa*5l#XzbNMr--TxV-q?iOC$x*7;4x{+*Mtv?%#^?g>oOgU`)MB^yYJsln zCx9K*jtGBZ4zM*A^)tsm8lk3=Upuaflj_ve3|Ai=-5-UJsF?-;GNtSSBytv`X|Kuv ze-BnfAO<#Tp?ytF&7*8PlN-pzhQd+vUbZD*mDdoudD7uoyU`OCWt*=6{Uk@2D}!vi2?Mx7hX<2tuy+m;~M^$X!~7{K9aDujR7L6cB_6Hp+q_P&nRBmF9|f* z{pQ;be3o~1{AwD!$9io> zKb(M8uUIWpZy=U-XESyHP~S4|2`9AT&?z$oJYCHGrME=&im~q*OCgshGs^{gUasgo z+vI~*0vW!=?HK|E>joG{kO|MYYoke~Jd{8MTGZ2ZVo_1(aJP9vv&%cwSrZ-lHZK*G2GfI5Th z#OOF^q>I~n*MU6ZT7uwSVVCX5e3o!6>(O!j3q9Y^F{llp;OEg;x-o3Oe05Db0%L3j zLg~TZ`zXEfS$#Z$riUnGR-$inYb*;%d`_)28c+^jE!q=yDADREc!N!MvBC?!RV`39k+n&I)R;B{^E7`unOvI{5Lf7tqq>%?jh~Xx)fz%ZC_0@u;w? zXx#@(IJH$(yNVFpZuo)39B86VObO9fIz8YiN8SA0bmEERTuHY*h#YV}WE}j<;dlnm z?vzc_n6UE!BowCMz-ippn}h;Bj!7PP8hwu{5b@x%`vQVu6Qn z{w9`Tf`<-F7OF7T14Q;M){BRJ6m@*@PvsTl0hj-<;x>5V5-e8L^vM*CI-JV4iZ)T% zCE4j8)X0}omqLtQhI}t`=a}?$Je&8m{BTF%CkP-5KT5aW&X5Sl} zyi7T3t{+FXK4Q}J1>gci${6Q_d>+U#ygRAwk$JEO z%)sB|o_`(leT*g$M1DhLc}tTCq81`3UP07;8qcuFfSe5l2~iUILjXfYDlyNK?Z(BE z?i<136s|+%V&ChN#}s)D*KB7B(>)|#xu?_w0b6JzTonlG?P-5<$Ij=n)mNV`C>S_4 zV55Z*B=O6?j;p44fw|01UN^5SU$*0^cDPWgu*q2_i(HF>A5;l8>fU~{&3 z9kswgcpSvBRf~6bpy7ce++#bs|Ngo(rnc<(HEh2Mv=wFia>sQm=j^Y}9QXQjf_$*+ zhqH(B##Lf?1gIIv%Wg5(wqNepcPP+JdR-a1J~XG4kPQB@mYjjMw|$;_neVng9kc+v zFq&(~n^w54at>uU$wyiinxe_7+x<)h#Y_AUB5B@Z4Pmyn!Y)i3#hmdF>XQx zs`^%W++F1qmKMy}wEPa1z5}a$K_*k1%_udVzFFWw>#kIL7lLdh155lmP4q%A+#k3* zxX6^QU_@hVVI1I^34BPq8N7qF!HE_b);7H|fLM#qCE})04u-#Acpt1-fCH>}$VWqF z*Ghs9%;i}A3o!O*oRYAQodvoKY-|HfO|DiOm~XK8MB^vTbUN;EH?KEYR47W`_qTde z;-5|vod$^arZ%(kzAD@iP_PhFa3fwvBIOjgSR*&*(NS_N}k>2pK zG3-*BgEQRJRJ3vR=WJ9qjbw(S`0Y{cE1CLxv_9?X(``TSQ_cbP5aH2ZE<$@r@$kz)t`hOK`qcX-68VL+*S0BWwNFA-W%ZYSYI6XR z6g+|l3zaT6B271O;G!mboDe&tN);Q7^do-i3 z-eo7bgB-{$l6iRiuWRsrZ4Puabo+QX}&T|3+x2YF#PoC zVKBD%hd-k_l~ET~;RN=9obnE%vx(HM@!4tDcsDj%fBh+|?*_MGb-yHs9(NV{A6p)Q zfxZf9lZk)dPSym0D8ZFWRi`)z2aCS1b12`aE0QsL3qPm&FnlcCthKQ^zVu$YqQ9Y4 z&ChLQF$P}Ted7>YJbx+?vQAL>K#~G!sK+i1lvteXrwc*;a%pRcE7TUzmSi&tXb5`N zi!v_^+ z8^b?gCR$Js$$(Vad@6`*;;^U=`7Y#{r7`MY*l>!vnIfrr`04j*X6ZGt4_%63J)i!M zgl#w$^%4JM0BHdHY^Q&|{AcHaGRB1YMG5ngiN{^Yr9sQkUe$q|TSD-crGSego`68w z>CuX9JlLVVi($SI8^fHd$PZr*00UQb_x)qI3u11%~osXVU=4 zWAA2{ae_>X&5Co*zIbx_kA{1c^L)mSlMVkFn&;VnZ?txhqOwBNY*kbKMSI-!AmBr{{R1f`^Y+?LdGFUvMKX$$f}5>?2L?)?7fdw$xdd4W0aA-_a4XUAZ5=Ej=ecJ z!|(Zef4;vz{OfY@^n5%Y_i?*jZxJ<-`}GgGFs@^ZX`Db7MVVjU(TGy{sCi@FSYq55ZZs|Dx1Svr?<(JcDO23LHhJC&3{n`4Szpxr6|G-*4GdqA zger0elQ{fdv!yx8C*x#Q#9fI4RFpb0P{^;8x6aFp!@jWHE;OsxRWHkh-nT2fcbV(q zomfd*wpX7RX&rpFj7gh4L)rbf1xAL5@p02+Is;et^}}5NYcCriy&Cz8;FPalYWhHb zEeyo-Njx%ut9!&B%eiG$k}Av4|Lm;s5&=BP1I4`-{!O<&4!B&Zb`P~3lzSbjW{I7i zvK(6$-(o+k)U`r&Mnp2mPt|SxNP8%;d*i^5Kzj;g&I^y6{pq}FRv&*t{OrZZN$lPw zc7cX`$VC!tbiT?xwjB<)qv{YlOIrf%gsX4DC_XYXJ-dvqZ+&Rho%jxFBQlME{Q_`sl;^xlYeykH}aC%TLypB{WgTOJq}>B>mz*csIO`UK5cZTJxg3H*Zzgm zUK2$5^>mFC$PfxW_~kixTBO8`E1Q5UzurKTYWt@e$hy>3to4j#M*idiP-gYvi8|0F%7=dZr(ao)9oHnwujboFP35)f-r%NBDh%bs^I9;f|r+7Gi^R3 zB=BzyQ!+L=ZmxR+E;AO&?!=9}1ur<*fTKBopYh_Jl@-G89m6@kW|JUaXkcx7ZFu$8 zTOKxS?JJHDb<(?{OXDw$xo}e=OZ|dJ@d381(2^pRQF0fgWHfQqmT~gqWGpAsb>aKP zW0%^q$F~UTv*7a!DP369x1hf00S~oGj7s~%X3=|Ew@^MFl&j%fFW42uW(VM{Drnvv z9@B{Ff0S}l>x(h;wq==%BZDJ-jGx=<{pl$wlOtS;`ULMTTHppqakg6{7A<2Z$6CM+ zMk9=SW3jA<@BcbdHQv9{U8~bdd77;}2CiP3|ApdpedJK|anj*{!8&H*?ua&jQ9!KU z&MWz66@5e*D%OtR@?S*YO5da@x+Dx}+ey(3vgj6QW5wdDKLI(+A<-V- zFn*aYoE*^u>ff?b-cWfMWcUq??qo#}w%wPo^hiR-%w(U?Zx1&ldK6#CX{fXct~rP;hya0Ug89E@ zMsINf6=!&d^QXS&BGvF;H&!_xytPGV)fR67EPIi`=XKI73m*&mb) zICJVh>^_LChYe+$to8vt#L7@SDqSG#XuQFFAE%wd`Iv5dKe6*byAZCa`N6~}S;I1f zSj&G$RV@1zvop>ZKLmbS4~~>VAH?o?G;3X0mx;zGc>F!pM8Zr_xQadlS(z5X6?0`v zPj5FxHfJXiB1b75=?eJSFQMD2^#R|9YP~*>Sf7WuRjJbme*$#7tD4WwS@TK!xTL9r zhk7F~2rRFf*mdKtOp71vt0nX&FrD~itO#zD4C!ScSY*#*Q&>Itnc59=SB}Q=eg@|h z3%;9vLxGfA`I&+Q&WLXRG+_Si4lu#bU0B?nCH=O)uhOaZe2JUdhl;G?<06Y~P(erh ztp$g|i~kJ=`)R2-9#HuwrAJ29-2BAIG=8pt2au|G>?=GzxQqoxo}97v>!IM z;T^8?2Sn=0$8#piTrcImF&h-=hE8X)dr1ZNdD;9bcg&dbB4mztPFt*h&r%NlaIp2& zl6&ZgzAECe1%*xb2gbg4S6n&QsWkcBhzi~}gxeQg61Gw=sS;;xu0s0X?gMoDyBmMz z?WeZq8pn;_T|HP^)Vp(MF2`fudop_QYDl$CC!*L+=!Rn3HUfaHetUz1Bk7g38)r}S z6-Ij13YvAW)9k6@z%aklmGzMU%olB59Sg<35Uj8XIYp>q(aqr?VE1=rLHS_#+2=H> z&)k{05T@AUZg1raYX-mH;Q3~6wxHQsHgx~L6VsY?!433OcZ^umqvXu}Q>q`K8I1kE z&PXds4&j;w)e1uQS%Pz^7EZJgnm^Ph6V};8sltaJ(bDso@GN*^Uxf_}Vh&Y=M&pLM z!}6hA@OJ{>RrgU{9#i2e-#ukaBm^OWItAjR`uz^xv&8{1ZXLrawxYtwA*R(?m-bg} z*F1;e{r@7N1!T;K@rBmF>j;Ta$wb2TbafhR#s{Wv+DDK2oIQ)^=ZO?*(J$w;+w{(c zlpRcfR}WtN-I|E7knQv{^@P4Wi8F|6^lWUCd>(70aM2ed-g#d# zsF#k7ZX1(TI$?at)3>=S-nQNjtN#G*viR0A7XfKJ_}nwHZ|$--3I0c{!f08r=yUi^ z6rV0Nd2hA;yjAw?RBFl-0ELhTx~asrZl8q3u>zi`R{+D~0o5g7WtVHeHq-Vkk|+SX zD=Rx<{0qa(eWvw{ z()jEII@A`BocPBNX!La2X%Oi;e^Z~FXV6}bi1mLe>W>o)ABgi?(KEhCsMWJdmE0}Z zm$o2i4{FL_46sY8z2ajVI$IbUbR&d?_@z7#W?}-fo zs1QQ>I?H%%y*LnQen`Y*UHwI^Ioc9ifKn)=0WvAynyocuu3A9Bf=5r0AMkbQ9U6RAP>@QZlHx$obX zMjVR1+g^49SCE)^VY@lM@i>~(_f=wH;(AchJ5e4faUWFhUfXPncyr8<^_7%Z27Bdl zkJZ5}U17zWXPo&}-~?S;!zfnRdIM?|2GFOj0ILiIMaS(Oh4OREN|a+ei6_7NSkVf6zh0H z(9>XL*+7p5QF9C2DYS7H>~7x1(zlwaNC6ufIrBbV*O%@HRn%zQ#s>Zgc7t|$_{<6# z6wsMWm$wJby1}9GzEk-=oLIqPt8+y(Xc6PIKnwHnlbTYIcBTW_Geu;-sR_D1ptp)=_ z^;kXSbM^b$QsC!8NY>@cs6kXLHq88)Jk)8qbrf>V&Ez+GGOScN1 z9%wh%mUaAi-g0sS4p8w;BtBlh>{>!S2K+oVjUUWZ(r?LTy$Dv&HJ&D-S3To49{|ZS zoU+c>JUVpuQXEiuf^G_LvaFe@aW99eKneP!=4tnP%6cAEZ8-J}hu}K&`Mem(LRh(| zqCJRm8S?>n#t^6HWA`;wc418%mIP{_(B~tT{}A^LB%U^tS8Dw4cm~k|3!jCISDP}@ z{B43$i@`hIlTnguK&)z|=sWbsDilO~a5?=L&?lpkxnYQwFmk4#;i_4TNQ%d5)v%Oq z{5^9vT+0#K^G8I@5RYYFy0ot@1B4K%7J0nR1@`{7rJ`j)f!S@|m3li_v@>WlZvTrL z_LE;ZooAAXjbuiJtcpK_GF1!tnZWSP_zUoM2N^jjmd(O1ta~#sfn0nbSDK4L&alLs zqZ{)vkz{ZCPe&ImjrhJiYyC(vMmjw6`TC(pkoY) zc8L`xhN#JxT0vrwR8)qx^@*a_7C9_|h zuAW3VP`y(4?>K^}DquD;F}7QrKcQS=*&Vgv{2nj$cm~6`ulgHn^@GH|tpr!E{aV7b z;I(8rV^=$X!?~I=CTW0ZJDGCeU>rWyZ}C&t>ZmP{Y)+fM6Y|XWTNJxE49`0bvV6F6 zZApv7E_U=|f4nR+NNDX0Fv4DQ{=0TOZc`RW%r1qbit-97Cz3y;Ucp4htq+Q-D`bTcVR2Q`83e>~@1ceL8(_ zG^+$JMr^^1_01Drp~U3coJw^PFZEv<7ib4VmnoN=?}P z>xrV!swpldH`F~jIcnaOdo$C>Y=xfv>jJ6t%uKU=xgs6({U^q5j|{B{z4Nl+?}>r& z@5rMKpkinn8JgY6MB&!`qA`m04=QK9`V4|YVx-ZBeqmLKt_?MJHfHMke*s7gd3}PcK^>Q#hGe>sl&wJ`hxST8<%K zM!+zF%5l#4?8T(C9q>n7`tQU3afquJDmOnhvWz?9%Zzxw^TsR$pRgj>xk|QECqel1 z(?W0{ju6yeSW*t3Ie_D43qCJw-9a8$ywrQ+sD(a~b(UYuYZet9zBarHyrX|nf>*=1 zrId@R+MQJC4^WJsRGo~!U8$$Cr`C}B-~AbW0fQ6 ze`ss-ckpFjjl+0sae0#|6f`tvU46Q2*?cK=PrF)=8EMoZWc`nlz4cdg>8rs9CDVhJ!D=lP_4Mw;en)rk63`4gzp0_-R=OtnM&~E1a_0ChLZ`iI9MHF znU?&N)q+ICDXkNhbx?H>iw^wq;3HUz=}x5T#FBZ#v$wdPr#tV_k9e}*`EilkEI22{ zjq|B}Xt-Y6dMZ$IY1X3d&Z-rZH6O__%enENQsa>@)g3*O@#o0BFS-qNpYBcSmbskU z#PILc9WwW=3h}xcJ+y+v4;h)PEN9AKsxXvvV*MDSlzW0V<;ALT&)Pgq67W1q0qp;^ zVe-l%<`tvs^Ud}B=Id6rS7x!7Sxk;>$w)I@p;afKQv!^?=ORmjf zV37V&MMu^jdQ(@d%}K@9=u1kA!6u z?(N^7QN9>pS|xD-j0(KSX4xsNB)aF%+%d6~6(tU%PbW!LN0cpxQfK597FO7{!%bmR zpR$a~2u!RqE63u=j?4VTAaT?kN{s|zsc}ky$FcEy^laB+_r?yct(MQOhitd9(R55o$Kk{}?>trGEzl0RXW`Ra6IfMLShQvaFpH;7*k5r;33bL=WD` zzXY!CY`vZ1@!6Y3YBbUAyt1czuqC>3)=Y_2FkA)UyL}9?K>vj6CRH_OXGPgi$8)#@ z+$mVCK~f{4SOlJ=2TT4-`^dQ88)!rPausH)?y67x^3h~;XGpyL{*!?H>e)WMm?2Jg z*oyF1gsDb3JsRb=Tr)oQ63gEEuH-(yJA8F2;2O>7*2iJu3G@0u@x;x7UkFLAPEV(4#Gl?&hnx)UV=h45+Fyen`5+vfZLFUNAj{%HWO1k7+SC@}Yq+PE21yH!_(qt}6PvFs;Ju z(wvLIdT7|&`TaIJ7Vhtk^D7*t{jzALzH12+j0Vw%0Xd2AOr`IUBQ&BxEASBfPW`_| zRpphTniZSaXzYnU$MXW3c@{O)r3m-5dwJ4ZKyPKqc7m$imcQYHuaZ#nT7x5}A0A(9 zxqb}vUJsHP&x$`$OP&UIeynwwNPzfM$Cl#yv1#V_>YJs}CtH)OCjna_mr0NBqJZi= z?&4%Crs_ZSo5y@WmCwAX&0z9CAMgowvSOx1bFB@XWha4QFUB;10_r_$*yQ5J!R`s? z8QR9B+eY*;P$->a8`A4=AXhm-=``J$QiH;df9P8#V4bS7JAG)F?TMDx8vXhFN0kuB z{f1+j*sE9;0e-Y?&vvSrOXZI+$5CWS=ScO4l5iHL9~>n2;=G80VD9LKh-Q;Znm=3C z(M?SCaroQx;BtCy2y$fK!SJ@=mv(u~dgOJD)|!*1spb23(p7w+DJOBNe0JOH#IJHm!u zuD-$+1nAYBUI&PFpb0W$!wyb-R)BVGAlPyJEcJ8v?u?jma^c+pF_HB7}QZ;CRAk_=Pi94e7O~U zm2`CX4=Jan6)Qd%F>D>oC_ZwlnF9+Og@dOncj7S)&T$7X;6W%62W*CL!k$Eyg&FXZ zE8DiU6bqqlbvsqGkehBi+0t-sxon({V9wCjs{*-4UD-0Mcljgu0La(bvO6LGS-Y&k zB*W2|=*=4mmx3aVS8s5a%lsJ&kz>RiypCO0Y{F2Bm4>O>~|DWl=a0aMOTFDf_ucp<%W{BrAQKbQtg3md4Nrt_6dUhU$}*niSz3xt1kw1c(DCVnahsk!=lh>JkM25!KeH0> z_rIMeaR8_X29H-;z3d%4V>=%_Kd%eMGg0Q9Hj;-rivDLB>;uw%1Q6XnuC9~ait}T+R;VKl1I@-%?EnVt3xtWdP}Sm?EO2kQp9hvV$rmI3cHwX2VWhAte(xU;50VbKu$+_-i+7U)y4->q4TG;VGz3lA5=T504n+W zZse0CmX%$)Jerx+f)DNaniJ-xy5ywk)0me>4y&{F!IGG?qlO5G{+aYANP%|+nDTV} zS#K3P*=F(%Eu|wc7xYj~8ea?aT4*Czm6D?za_QzZwW!;SdU<^AZp^0CHDVWjr{EXv zDq^9AF(BpKasJ-T+flm4{(%N`=5Czz4Hor1Ps<~w^E2xGk6y#<2O)3t-nj=`*0owh z5(WGHer|H=4gF>Cf@|8mI1x=gfkaOzi<&lT@ zP*+7CinsFLP+tg6Wa z$B8FRO6z?#CCYmu;Q95XT59?=Vd6Ov{2JamcwZtt0*7U9lvKF6e;=60p3CfD&Tk-; z-TLdYH>?Wh{KJi^4k%qluPysM?Gx!;w4fR&814y;j%a-EZ4` z4_+LhG*jhS%&ao93Z1h{bBHZq!r*_T`CKP7oSU^=B$O%}N?6Q+PmAO&9)*2h)lrl+ zge0v(XCm4OhuS(ugCnrla}%g}p1BtP>OvzxoW^~^$rbY?E#7uSeOBU&nY!|%ZWPI> z6#ncIY(D`s{S~(>MP&W5L%+>E`atMZ*xH0~LHt|NH*?{eGn5f?1Qz7TN1XqQ_5O7wltF$2Pi1;sZV?zL#cY1L(Qc^j(sO}Qf6v9F zb8fErJ8-dnGVpxIqZze+*{TayAAUJ(?`%(+v0kfn7g4iZt5YrBwVuGRKD3bRoFZ6UY6SekG@)| zIsHGC>l$Tg67YvrNX~L=a|^#oM(YaBw>B&C@yz>tANfoK$#>~ZbO=JEN{H--Fj!-{{fQ%HazJw z?n^eIA7bhy<+G#%CF#typS~4gI^sKf+q$Qot(lbcDG8=g)ZiYrl z`cY%#I7$h@T-9b|aop9wqdo@4G^$51Kcb@e*)}GAHNowBksw&LY$DE{p&~7EY})8b zQsiL+h7T-BEtdAOe$EN05fM>!*@3VTr)rR=&daVQ0230nW4Tvbq=wG|aUe**$E261 z>2+yolgl8=-74;ILtjc5)^Xq9_j`z~%gnJucmW`+5hDDHf=Z8E@ZHa^K!GhTatO;6 zSjOFec}lT>OjgdSHp#nal`zJN-PV>r;RdNURy450i>t>sWP>R){}A$+XuL5WREwiu zk;!xoUKjr5=+ROCS8Q}yOY2e+^8En$d$;;zhoW8k#G!(v;bX4r8#FsTK>{K>ctLP1 zZ{5V`))pd3vA+MROwCiL2N>r=B~oJ6rvU~>&7!!8%iQSEhr3t5@yiB2LtOfV{sOT0 z(?cHfSM$nVHQ$`Ab1~=-W*iC|*mFtBf65I@7nZ$|0i0pmKw5v_nU+lf%(i^nC6;^) zMwkLM9GBcOde!G_PD;k9%AUuZ^a{AT1^Lq5xQ`k?YDM{S=|Mc$7q|Wv3!k}vTi$zr z^vZW$blr+*QR`p+>!3>wGF$7I#+OiVcv7m%FQc#M%0QcN%sSRbIKqhOScF~d5dU)y*%9*3F__wMuvevZ zcQNcU=X@u}3cgC?^hxaJ+n+K&jUW7BP4=k=lfB%&lYr$86^Pc6ceRlJt<^Hyk{%$@%%6hK!C zr8rdiUGD0!3e7*)q~^)Pxwk6GM?)B0TmsJgiU#5@ub_NkgXiobll5_Rq7$U)>*3!td({KN3=JbaI;sA&hD1 zCa|^VMKDhu_0`V7(S*4ko=KM!2jz>x-~b)f+bfhN%DAU_U{OA!r2gwysh)47#}9TJ z?z@0})uD!ErmNOoCB4(RF0<>BW7|AUhx@`BJpbg@Ny{ocmMuVQ>bba zdWT}e=045r;lcD%c1QWYpr0xE)^;FmS*2Nyc?8OWw zaINnNVCRqbE4Dio_hMm4U2hCjo5K_ik85A*Na`%MpLe0YoUpS869t6le_)jfWb zq6wo|hc9}XyR$1`q!r69bn!8b*jrgWi;69v24;P?I}VN=J)x~^RsM|$d)CWNgYXLX zu?cU8_$b=$4vmkG*u;a^V9g-KAgJ4{O+}$_>EVtW3@%XwrNWF!s#ovQ zUbP0)ro8Avza+{xk`x?&gkOa0wjAk(anDSiGkuwP=F;D^CZb(oo4cA|Ndz5qBD(R^ zVn(m$ZIujsTU6S6^nlvm`j0sIVJZxS1A4c@6a7JX8eJ{o7u?O(_ifPuG2hE)bR-OD zJFn=Ls6rn1=t+$qCuI}T&MS|S-rbWO1?n+I_$9kNB#~%is5EXWj)?Ev`I+SwpNP#7 z1i}pexKug%W_BDTe$K$%^pz|32`t0?^GNFMKzPnbe9PX)hw-?a;7#`MK)0gKxwt&O z_)YgTt=7UitN2jfpVh9rgmUZ&H-+l9IN<(??9rZ+9e@y?gM^j7{Abt+%Z*U^6n0z0 z3$U^9^|9ZdYP2404aB7LW%Dbp{W~9hZG_eSZs+4Rp)&f^0yXnQ%ZDZK zRPE6?;GvJK4m+ArH4PZh3v^znnO^trW|TN8ZSuRLj6cH+v7h{?O+LV6k5`drfa;0b zz`l4rFXLjTesL~3GT`YiH^BB+xWrQVou7B)%|_ZC2-A+rv(;s zwJLx(V`$nqI;tKVsnJW;LYz+PbUF^Do(fHP!$vPAz?eTGpFiGEXS&9I zP2w5ZENNIePy3e4+dutNM6An(&;hqaz<@xmg<-H-9laZ)zeR{y^HTfe^~qA7FbLCM z+^e0DM}o0FzW=nCdd3FU*VF}L7Y!W13J2x=YGD5@_3k>@9-v4+WI$*ErSyfhB~Fd| z&~G%T9epi$GN|3>a-*m1ycxR7a8d=bQ<`Im71{2T+gXk0&ONl=&6pA>SQ(rH92mJ} z3DCojK?4U<<=kwBt+pAF3?~)M*E3!=&z8OR*&!8Z!Gg~19D=~^Pz{T1neqcAk&K89D_x6`2Ws4ykf3ORe@`D0os&`s`TbZK zbaL5$7_@8d+vvVX#6`(e4#ueuLS})x`7(+_+{#^L>rTj$uj%LRfQ0dLZE?*LC&6}g zbyxoKhN_Dax%_=yr&@{ zDz^~wd!RODaYy&n;IX>b%wYspTH zHty%r^OVvM49Nz78Tz@>?&mhn2iwYd%ipx=pG!b`1 z7JL0kh^oqy&O*FF#R7Do{90o0&R!n~f_Q_zr3$}_{T$g@}2jV&*ws$*ChW$j~hz`3;2{W$z&-L~RRpVP?4_le48c*(xg1yjqGBkR^gPaC@)u@v)B?w}_)n>40O6-b zr$w#!f|T3i?T=Z^&b}|vp!#nmCmxDM`y4-K8Yl283`+HjImjG&&4eeFM7vU>bnHex zEYd_aH^q-C{1^hMNy^;bx$CzY>XrK%}Og!%f=@- zEkM7{+Z^QfK9M&!xE=@7nf>VKrReM@3V38i9I>P4!1H?-ZjrCUVGIm!&IdMLyMbh7 zb{KMay|$If`kC$&oVdsX3Aq2F1hbZ4-vT+1c`j#M-Y6|TI>D;kkVvq`;uFxwY>f-Q zMDOvQYQ2o}Z3TW!DgjDD4HM9_sa)9}HID8Dk5ht}t_58T_*e(`b&#XI{vgh>PYhSh zcOv!fO>XP{Ii*|J&G3;C3I0=Itrj+*28Q*B_tv5W$j%fm%R`95Vx|a}RBnGmP%%W| zMe2VGXxr`wf8!lwp)_4A!i3=Z!I$UVK~PN9{Lyv)LV2b^j+9Y-He38^+TYwZImLO$ z?gxeP%IS5+3o8e=+H8tw`s?6(3Q2*?aIY4Ggb ze8?vwlSMxTmA?2{mo5HHljV1GeZZt%jw)vdbT=U8=BJ-C)IZF3!f*V_Q=N#pQ4CyT z_VdS(VrAIVZn27SY~~pU-;X6GmX8>9+5Ww^ORqMG2 zO2i7aIDYX`d6%~R5b=dj;w2(%xi2XDftF;m)A^AxmYhQ?p(D*O^4BkmzGlDunoLn= z0eQ|;{iUfT{7x-3&_62T9(4rpS<<1wO|xLN?^a~O=m~`dnjwfAgKnsgWs#7P9U?rw zpx6k{sVD0)#p_oazxP8rk95N~q)Xo@B<4D#-g6qwy>>wUJm01k1o1z!KCkkC`pg;Y z!-thW#hWQiM}!ez%+t$SF4?4>MGg~}+s{dN4^0d%&+&UbacnL`H>xRGE=aLu*U$R( zGil7j4 zKr=P;sOlvD&rTv&clFctL&)hR=CZykpaJjlcfim?_lbrM9D_`g2_@{L0 zCS$-bY$&roz1`+5G`=c;*sI~067xdmL3uh)+x0<2xk85?M zJdVQcww|qbH07vnEL}8*L$WcoZTYpz6P}I8t?x6M+c9k7F6cW)rj#v#3A^EwxAVT{2Tpggodz9RJveCM^sTpJ0ypjKn>K70K z_N#KI&Slnq2_;WZyd)f*@5JMQ^pIDhwF=L;TMUZ$w6XnPb5C8d z!1E|}lQM*JV)0>Q>QMRq%`^f3vs48!;f{_d@3}GVcKdD*H}f?hyXJvm)!=!;5tb8( zz~b#AImn(=)~5R0&0C|^^?_mPux?Gjwy~4tZ>8{Ex;>&P`hx$v&~|y;7Kyl zkGs5qig(c>@kH%uD_U&dXamL*kcm7o-Dn( zT$zb5%(4q^GgMKUn?Z(*ZjXfQMeV6&ipZ`6P_Kd<-u;LyKFzLfZSi^aXSdIHpy|OI zX2$G=2KR`QDi6|NaXDS%VJ=F`b4#w!F~nhVs2hD^gG6qkr+7U#9!57ai^#JG>6`K9iR$c4nEm;5_RI*o8MyeJ>lf729 zaGKp57eDw=ZTax85z^zG$%I+S#b%u!;kN9hwtxODS#v^-1x8oBT=>R8g8vy^;3JRj zx2S<(YG<6p2^Gv|oB+{Bhd2zAp44J0bgLG&9{Aitz+!mBFcB!AG>lw(F0%0^#ANIG zTH`IGK?!ipi07toQQ6{)%h%K$*CHP@M*P-Mh4t&3{NIKJOp*SCh4L0@p<1v=C-1jW zlaB2vNFmX8XT}a6;uot042b{>XlliV{S0mu`=U0YEHv0oJ4o1h8& z9NG@ms%xdSWjN-;Qb5Kv}Eoz!&tLBwY^u(~(#A zxX;yI2yI8U6Z4^w$n744U-%q2WF_tOsoc1*Q^uk{mRlb*JbZNY^QGj-Ds1UU-lu^_ zgyun`^M3(Z+1z@X9QAOyS22Uw_RQ$fy>}`(s$}>h(@|MBg5KJM>0sCK!uQAV2@5q> zSKq$i*{$k-X~OdrQt05NIk(vlo!ep-;yUdjt{yT8&jGKR{C+jt@zX5T z($~FoG@BGbNr0scW-J1p&X%4y%%(GH?N1$XK=kvMlplyK(mK&1IA z#z~(0cp5^0>U4mp$_-nk*;J)$OZm z3&$&TzIxQZ3a%~&#ACW{xt^Tk-TOYX_!b9B{cKEQL!N5m-g(6J=Xp4Aniy7?Ow0Hy5_Pa0vmHc3Z?nS%+ zh$}syAwucR=CYUvhQ$G>GKrZmrb|4JZ{T@T2+3e65ctrW6bqvzmw@IjAa|P$8Nyd) z0{&OozVhSMe0cU{u-<)4ekMc(9l9#h7C1fM;^O*e=ZO&x$^TohaYhXRA1EoXz@!=4S81fUaA2b%b%BDl)pmgSzK zw+<&(KZ}J!WY2>VPz`zgj7CbHdHVTIw$qTF&Yy6Ph1bVakVE<3yZZR9BBISqYX>P^ zl-l5~4{N`_mZEOuw|jlIMX3kwN06@pekSlsK2+r1Dvqd2`{vK|?=jNvWyLJ1{2<-1 z5PqJljfG?u{$9xm9Ae05G1F?pVBQu8J; zXd0S2X(X=S@=ns>cTc+1Ubkt36t`j|n!&Bc-2x3g(lP#KvPvDn4J1Sb=+g|%Q2S)7 znU8LK^g6tbaN00txYwfUBf-}i&#iEiT~*vQeN)$Bk_A4Jt19B^I>;30wy9GEc$rN* zEzbJyADqp)0tgmkR8wus{CQ6lE45**wUWjCIHJ(_k=2g-A%0nsr!~`^oA)M1 zZZ?Q4?z?1QmgKP+{8@i%w|?{i*cT~(3^3CDujDh(r<3;CIp>LXqf5w|?jTl51GUe$S@X8C;&5K?@ zZR=Y}7wcLsJ)?S0JT+hp{zb~vpB{R#Me1UT77vKxksUMX2lKa*Y%?UuMwzf5VV$j)Z-%f(x!&zd z;l{zkOg(_Ej{ejtb=|l7L(x$1^n6770L1Fje;yX61_Jk9OR1KfDAb>q%LtLn*U>-Y zE4&0r$9SB-YxEMS||Ptys3Igt237V=pxlmwYJOLCuAL zy-FwrO8(zS&ARAU(l9%M;^Og(M*XhzH-g9qfbMgyzv{2FObO*0&VC~nzzD{PO9%& zg-Hv5#@Yrlmf!+UQmtS?mz11J7fK@KNF;Hx&R4upVQsZVIVr?dlGIhB;B%N4*keJ@E55qqsj1KJ$AXfyhgL}d zI>xNd=_)Slpy%Q^YOXuv-LwMW!>B0rIkT0hb3;%eS?(zJW{Vy=9V{Q8kpOhK4K~X& z-ai1#?OTzUr+J`l8rW0uc>K=xbLrLd9I*~d4eKe-z86HQM!tJOR0j(m+D zz6&!LfG$+S!HTs5MNas-oi+c;*BpRlm}k4ibHv(iD8)uNjOR3td)7C7()!Mgh?B3s zWMo3_o`LOqDBGU?LWINYt_k-w`EJ=OgTi^a)=Q`qyzQjcs^ysWRlxuu?+vVkn&{SS z0b5Zo-BG@I;pD1~T($E)JyXtOSZ41ANy^ytd5xHboUgJ?~TR`LMI>9t(m-6eiS-rE}c!3_gqUXlCsMaqj zV5QWxCZ0Y55G;yEtFQ%}`{Sd3#upwU5OMpST>D3&`{N6PBaqgNzupf^%^|&+_fUbAkU@L?^P}yO z5t%RE$0G`lky4`}9xEiw_sQPP`}u7L-CX;R=;J7jWvt9Cd!Lo}F`mT9l+LD8kDf<- zy|T-v(K;#%*t$VY*!TH}D``4Tjbh>0#BWko@N{70_JM(8aPv=@bJo9*!g}?Ea*9@J zFQm(SbHsv&OV~mcoy1M&*Y8(<;T#28EWQ8Y=*vZo8_4>Ob@R*Ov0Y+h+}9`KLEHf~ z?Ddt4YG2=oS>Lalf35<{>XvJ{v?{0<@@i^H%_s^V1Yh8HnocG8hblm;YV*)MPSUrO> zjSwN0`n>DJw%>~*ku#-}rv;5v`grQmdSM0bYUrqsQC;vR3*^9a4IYhjSZD?^EBnaL z4Ec%M%Dzr2&{?yc5=b-e5^E>W0sW!|&6kf;Q|=gc+iuoL_t-G7%Rh7FkCP;+E$X_V ziPFRaZihTBRKT)gy;bMK!pVZGFtVu^kw@D^vgjbO%qzt8PY!$LARk$gE4Gflv(pks zYv}hrT8#mtCH6ItE}^|>nH^Y9J_K>e9lM8}irr)6tb_sY^y1mUw$aD|(UE;o{5rB)`VBGu=I`p7Mq=kRB1I8@fhVi2#B~_ucP`=G1e!Q6+`cq0@jeI6SH1QxeY81uG zPc~IBKP{i1X?A1fRy>;(wreW-TavQ9MKVb-NDi6lZ?7du_k5|5^j#Owt0{?tjk_-~yxde+;+Fz8(LDS4Vg!T`gv%B_hlw% zjwz030m&^Bfdvw7`8vz*+VHNunkeGRF+7)P?|XSyk7QD6NqvX9f=^p7__e9Y(-Y^Stp1N=7ab=HwUfw@l06@m01{sCOa>Y-JKeW zbK#XmQwI%(lklD;Sq?U+U+>+|yJD=&X^5P%$s-abgMV6wA!i}^CGnf>SCw*@+JDwg zI{4nUO@WRSgwXfeP^gD`>I!ylv7u77Ns+w zlpNDkajvCZd8Qga2-JdPe9z>VLle$u?4N|HklS>Gk_%Y}0CdJ%@9#o9OYrfZ1jw!h zXpwG+n>xKHe4!d^GJ#hWm0dvKog>Qk9Aqi4M1gsrQys|>6ZmuayJLNu@2I{hu6cH!dJpg(2YvIxZ$9-dgap8i2xQ-cis9iX{A zfhX2k?O?FYc&3E7JlJtCF%{0jB(Tc9vHSQmqn`F?_0`I{9F9~m9WYT{?p6_iEd!A* z3N-fEpmPwzP}s(WBoKIfT`7_!M~wKZmjU>$JgISh1rmNQjO^bzJ%*6TW@55!s7S5H&J$8 zg1q%*{+XhP+Q1t$BD;yU$Q!7P(*vL~S2k-F$dRkYfK5=2=V2fDw|xZcr@>)Ow*L3m zy}>M+3PB6JT!K4N_3)XHb8_aja!_4l)szb4WFE>_6V>8CR-sUTFq(Fx_oQXmI&ggy z7*26u7x#l;?q_hY#{%de=caEacR-96Px-I-PCyUEdSJYFO!lKV7xzPb=H3;{Lt?+% zDME62^%w+}3dfjZ^&uoR5dY2+c46kglPZlRaJyUgD{=*Y3hYfr^xBzuH$ExwpExu3 z@~Xp<(U0?JSm<~{2W~kEeVjSvb^Z>@dfXe+IXqdcA9hK~xXS_drHXIG0bNVFu3ilI zi#JAlb`MGMt@b8;oAyNQm!(bLz1sT__ zVDR<}l*-1OZ4)Uh2MvQuVIGoQ`@l$TE?HaqviLUotXOwiud`g{9{Yu=G_PakycXZo~ZLd(Be4r!qM9lV!T&TT89YRafvud@+9!jB^`$ z?$dDWwxH$KL`jr~-8wtxtL9*M71} z2`>d-B;PyFxCq8tApqTEin<3;cwC-Msxb5&_DX(B+Ymt_VAG!QtdHfBhZ_{dcb6Wg zYNP2m&BnyquqroCkDC>WvOK%JQFZf9g4JI+UWzPQ()F@zy6FSM|EE*)mcyTh0Ubg4 z6J53~X$tLWC`%S8|M@W}IY`7Nwu*S{yA`BIs5X=AVAm4DD44$dr$OJ9Y{~TEj%p{_ z_+32ExUH&pK>0YHu?n3v$q*xr$A;hE;iZnkdx`r!vO(5pRjetsr;6<~4{+UN9vpi= z*2SPHRA0L!M;e!xPbWuO8n+Q`M7IEsDZ@9* zcI4pWkCv4V49<^z4>|Tkk|dy9|IMfQer(2khrfE3JQTHAO5yyT*h!f^i$OTH}D3gF#l!Gs-}m z)6aH10cykoe`Id2BTL&@sod*{%crV|*CwF=)M5_L^(PIk5{H!vK_I&+MuV(u4Wnk; zK9mP(UX^l7u3sP=j6cOhPj-9L3om&TXiC~Fe8&N5&I>E2{QK6m1S&xONO`5uZ`x=5 zGn@IMHstwFzz=r5?pc}Vs>FalkUY+tWj?6T=Pu164hnXq4+=KO>|DaiwCeZnnC)Hi zMMiNt9#?iN-uxzg%%~1n6q^lQkWuNo1l+m?A^WtApfJ}P%+pA7?#C1T4*Lt1bT)z0 z%`-(Ui>|j+PbP_#Y;X^_YQh{E_U`bK8jA@w^)NX9<&~wuXc}Lc5+YTz{KsUZ+@;n} zZ^Jo+*9xiXZn}@F=Hrohw)wn7X|Iei_Zo1kQq8*bocS>c&u>&20#l}O(2aj~E-(+< zudC;zO$K&~B4PvEt`m&m;ZN$;0uhH?ZyNC$vHZTpFwuAzo7Q>IMaubC%+b_H9=g|N z+}*go2DNTVs13Jc>gGxP1MXf&@?IFEU0Vz@hPcnvHAlmr>=vY;eD=W+1_PWTpO2+x zz`^PgZ@fMjv&ymzTpT!aKTw<|7-T=u>|5dZb~66x-pPM)p~oy*I+wS&Ah2Efx z(q1;1G}n<}QwCtQc^{hAop~$X-d*-rkI-3d2#`x~L=0!yyxj+M@cb7I3>;YR>=;9I zHooMMO9jb6y+z#eal{D3-%2aHYvA!S<>xp8ut}0Bunj4_P`I`B;8i2F7SDlodj)1u zwK+y5$Xv{KZj1(NkMm3R{V9!Ssdqxl1W7V;ZQj0y7{fe}@f(6)s5{f2Gr*dg`HX$m#;V*f8Or#&&1h|0QmYn)ivjW z7c9N>&m0B>0(WHi##1oYC?3V>mQK}WpzP_XsI)}e_wh1;S7?o4WD{ksMrMS&K7F(2 zkd*TtsO+1y;-C$G?%38*YC%BZo0cLF(qPb1kq4TnAhXoe`+l<62qcDvxMcbnUurjT z7+hzxBf==?_GwA|MC5U;;hk1Ibo?A%b0@Fe@QM|GY|PDGXypmW;rwUiiLxg_^BweQ zDSTaWyRtATK#f4+E;0EhS59$YE184g!3s0|cxJ++`ibI3DGjnMhcg=;y8B3h5jnD% zrJ_mzP+WbNn&*g3Y4LDTe}y2p=y`}An(21$%f}h<5AJU_-N|B$?8smCo$r*f#vTUE z|7KLT2#Ac&8M{~-D9gw>7Fts`AifE|xPH3h^U3*a)5bh!O`!JsoC|uML*;YzKS=2D zL`D35wpc4!YR$kC#mS(unXrbk-^K=YgpX3cz*q}N-U5KxfsfH`>5_{Z@!&ruch|?* zQ3$wjs`6lnb)Lqp6K+t{+)66nw3~aQep@Zh$pd47;T^bKD`BW?FpvY%U+$Q$5MU4B zLW-fnWF7Gd47ofRK?A|-YC080Lvb4*Yf}1rXc^r_|J`;os!jM>FBhVQ4mU`4kv>G? z#MYlx>Rl)F!x;_lmHk|!>m_C*D5YdwZpQ3*N`5rws?!^lSL@*3^5sF{Rmx2Po%ibF zN_KKamjz$h5GMKW?=($-tuMEjg@qydAtFY(R9o`z&wMN_k1zY9*(>-~)Fd9^W9`7B zI#Y`O#gi0Z?CO9={(PoF+d==@LtV1L8}2>^_c;FZlbrNt_(laW)oi|u3NUQ{k9fWy z@qy&&7s|Y=;Cw8}$;5vWJu4h64y#C;@Rce}_Y%B+V|Cjfr77egt?%R(sI766iExAp z3c0-TO2mObex<|y>ipF(j6(chY4|=%0s)=4GC+jRJrtOD`X3Q62zMi@8i3ME?Q0o` z5CH)FyL%dpE`e8_T2Ew&iJ$jy{%3YC7#};D4IA|Oz19vN=|nN%zu!gy$f*1rpYkoD zaA`i=4QVa60Nn0`1GayNc1ptHOMEouUI_mvz$OQn?S$CXHw&q4Fx-%Y1J-}PVFlhI z_@q}L_OqoD;YdH1=Fi)$Su+5lzCj*zpUyA#jIHDW@Im+OaW{rk0or?HM;xm>J$Z@5 zzfa!|4KCX{-z7)-68=JX*fXqkL$HzIAvc)IDppzhu3+f>ZLttLpq6_I@Z519T6w;`aM@J4Jb=b21_<-fx{ z#KPjuQG%*r&-Bl*Bav=~-?eVmcmas@fM6+Cf8Cxp`jj{?~yvt^;6N`}i>OCG1cZI`$_?(33A|8AiF+132t zF8?vB%N9kCNiy$;<}F_wz~Y)H8#fRDqW}3*Jv5}6WCzSU%vM@-OMs;D{--z6|B0oi zg@rZ5Xi5G3@?m~t|8J+MB+a7ug7og5;*0K)|5z=s;I1i{1Ly_^fYau1b;h(e@QIz` zmk;A(?Iw~^?IN;Lfa`Zn&T=;#Sf<2@FIRyoGdt#}L90wPZES>mR|_)H5g+~k-OuuP zA)R3aH8@w~mDPsUvyzxYZk|c6ABgg-T=*^JC?Y;o3Tpg)-C$dQGO%rmKOaucd`&;! z4v7Sy>T!$i>QH@&Ew=xBHR)ApmYsN>Bb?+xT!{3eQf-FoJ3j|Nx+1SXH9W*Uq4>~t zcyNONs>Xi_@^?l_0JuA%=4@YlOEOp){la{+B*kGT`THNq@EY(|u?z4F36tw7W3^%n zFQ#Y#ycJv@Y1YoTnSbkNFvT5QBss_i08H5^#Il!pS1j!v_k+|$c|m~}l>P^3#7w?? zjDv3@AZMEeno^Dxy{L77H9T9#ByR8?OGh9f5$pEo&aE)CqdWASk7RWgFxy$ClFEB6 z#Cr8_)6RSP-(>GQQv3~tGGXt_jLvswJ*Q1!%E?@53AW9Y&+f$6b6&^))m-=d>5Ab! zvYy$458GJvf3%HBePRjw{KUHX_A-Vwn@P;WJWDL=mzbBt`2I0b>lu)zSKH?JXFoj~ zB`p+&Ki++6kZ_eZ2p_%B;L1+OCHA(?TWkPfz`ITJLYh285sDwUt|+y| z5ID20{`KXuG+OX&57%FwG=M301G+5$ru-%8R0)77AOFhmux_R8|MVSzL%IOO#fQLK4EfP{D;?ibxrw;f zl%Z`^xyfy3y0G)NSFj)EdU~Son?7qdqx{dU!=xZ@XpJf0jJ#lVK2Z6DOeK zY^S+5uf=K54&doN#m-)bO7;Ga>t4~lPCK|>+6uPK+?0Dw$RxSusA)%rnWC*2!$!9V z?*6kdQ%~ftpRcZJX=aL;I1?OlnWleY43x=#M^kUggta7SnJM3sw`RVA76fE>>bDCnV%P$IsE@!TChMcG|@JSE{ zWVzzj7cf@n8fFl2kuDa~E;$9o5ubHy7Ic{25bbSJYXVjIRZ`)lj$x@?2UDGQ@d8#| zx6(PwB$pDkqY*T|yC|#vSn9L>ju4zAo~v3Oyom4sd`u%vfVwXmX)nT%MQcd|w+h8h`Za7l z$B}w1GS)#X2+1K5nf5ANe~;oW67p)D{vM=u*gKRq5dX6IP%)s{%(a)gZRgLFY57Nr zBQ~zf(Dt^kkpyy|oK$FV$(Rx^-Iph3QjV&Ii*-vs`&8_0Om|@61jyFyAaY0tq*=De z7@jW(f3!ls2mBpX%yB@Q@tY;|hK8S98KjQpr^XK(P*E}2=2yWKLD#;MJU=1ipg$Qq zfNDZMW4_h)A|q9*9sgvg#`0vS=%;Upp+;YdzRBi*!gsC0*vh_BH$%fe?wNB;X;Wi} zjOYAb4(jDn@h#ua%-?PZB17iWC(X?=JwJ~*sYCV)7Tr;?rE3n}%a_-jIdWgrS8hMu zXd8C+UOGMNy-D)$cX_4ikFFx1A~a+f%PGjx5^q?%zm>-;oX6x1v|=0Un(g~JI-OoT zH}g5hle{`nY_s}t9T(>0=JyA&qE6V@deT?1@k>cwigT9PfiV%3>$>iOA(|TgdH3YO zz*n}VB#U&vm^kAIqG#D|&z`iC;!66?bK?-aE(H&FpV_ASCC5NZb-t@wy}j4hE_as0 za)THx=>O1$k41oe>q9;!bK5DVnscy7PCznJA*`xOvLVbYX;T|s1HF=1IvZ)cP1vhY z0Z8g%6544eGSYO*&oEXu*y3&lAxsJP9tOTu%lxk}AUrg<WQ}f!l zlYpnETN=+w&Fs zv4{Ra=HGZ~n+M6yP&fo`wewFDWtR7!Jv)x`Z)8SB9tC}kgpG{2vdXc1Sf#glhWMRf zdmn6SJkXlhpCXk0?48ZbugM_HC7`O_k!0HSd=2{?da#*lR_<*@$?f?NvTQd~nb%?a zD7L5{saIz#T2rnDy1>MX4`byj3i zVC+>19`G6*ECLYiw*p*kM-Me_JDm&lxWtvJ@ma*|fjMNbsot?U^@+tw zzfsZC#U<@pg3TLu#(ILh+nKpAr7g%e$&0<3m*27^i_zI)t2rghoO3fpcEY0b+)+Q( z_pwP-#mn207LyHv`r;WXT8s)+n&*o|Zsr|tmcjm4unH4yXw927m;`IMY#%%AB!wn?sx8P?iZ1+ zLEn?G<^S#`+*9Pl*d8qSzN}hHYyiP^Eu z-EDbDGD$U2$;ouJl`bfL<55yl+HJD7+aHots{FZ+todH|5EO9_uQ9W(L-toMy(UIm z*mo&D z1~7y12>}>(=GR+6B7aD9Pz2`rfSzTpHO5&H?3w&huq06PN~kjacyM3ao18nC| z{+AaG1B{$w4L-8WH04O?X7IQDAg-E4d*AAYMSFjaIqp%Lmi<4n3>4g_mAiWYk-it>@u98? zB7c*8us-8@UurGW*G5aP{W86@(=hO-4u;<<6M3C9hAF%GBtzq|87xIRaUgbyXE{;t zY&Kesw`xTtmdJkd#hih0ss$akCRKMO6~P$i`&hTc4pD%Vh*RQyJlF5b1?TK@(Tmf* z774PUi1fQr^rMT!r`Z!@nk|< zXEWp}vz#y4?B;g5<0g>1wwC2cErdEQSD7R$=tFu5)<)XvoV91E5-%R^5q(g1>r~8m z?kMlus>XHuLi~<{(O$~4`SOBp4v^98{)`2dCh9HCjR!NPa%-@w)w%8}}TX4>#;|8o{d$|l#0z>IE1 z18=UR@#v0EmZQrs=++MQz06_L0lRuXg(TLALghH(j^f1$+O zuzTsy&Q7X*rl|}@n?2mx_c4#ZS}6=i4oSMEcPCGR^IfTMqrY z-u~$#@nt8I0KKpiWAY^GW~DQ%_sZG9gT0Ji-@g+uua;z62HcapMt8S5W?_7%+qOA( z#c1i?aJsU&Ql2(eI-mur266Rw)*`9WJz%KWqF>1SV9m_^nKaLRW(EIIvA#fFqRU5? z3JXW{ezUQ6OhywIDeWG0z4aY#F46ljI6_#UOfGqnFfjeqo=W$@HhuY-ii(Qd%xoYzl?WJG}!l-^KwLoL|385NoK-rwz zqX7ZhwM;YrQ{C35qIUPQ&M(isPsOii%-UseWN54_bhN&E9DZPG7u!HDG9#}WT-W7% ztF^NACzFQZvzXONTXnnhP`P$Rl`R_Qdzdxq--Hw%lh5}^4@-E0hTdsF8W!EhMJ6Zz z?p1lE2d*ZSr!pUWy87Q}fdaIR$C-*;Q@F{*)FgXhRkwoGCbq|G95cgD#9Z5-%=@rc7p>u}InRQInr;yl9b5mk#OPsDxK+fuw!GPI&?j3_Zo*i~-Cf%V5 zQ2X)vM@g$>dQJI-(U^9+kgoM;(}OqlGHe2nK)5_jJ&qGa0pq5hOgM2=&=>onh@cN- zTtQKTr51beF#O&cY89s>=+_{^OMzj@l82|V5p8>Q3`P7K_K6Y|tkb_fX}ay|JrPCt z6uo6|-|uGw)?*j_4#L!CYw+9mM@kPo< z765h5*=b|i`JRLi8B`_@>^dI@up|WU;0Mp3azTHBW3212 zqsGn8MslsL6{B>5HggZZ3*VN~V~f4qTG@}?KTM@J_0Af&0_rnY*4EA5hc@FyuWW&F zDyhE!DTm0UineQ>k>kFDNR8XZw7^ei-OZJtF3GuDpPa>wnP@zw0H4-5E;h4^2iXf> zOF=Ku0k~JpXM&rD&5UQc-jC=IzQgllhr9HTTyM76p_zpQzvBIWHTYmor+;Pj*cT&5 zyvVu8%M*K!PmlX^_^y4z*59EIVJ3&(rZdgnIUQhe_AU|F>bZDy?x6yFL6C6cA$E1k zD63J-SgXG`|I*dT_B#4td))Rzz|YR(5%B8UIppSG)HS&EBHzqw+5h=%IxngM-2UQ* z+UYdop>y~b@~nvNEjd9=rx0Ii-+ajmUh>aInI3$~*a+Xka!YX!vLiaX$3|f04lbpl4 zaoJCy8wE$TgULVVWbOB!%GhVV-3lANd2&RTJhHs(E1rH+o=y&Eo}sMxliDLUE2-tp z<#}7OGJaH3@ASTztTiICRkjxSQW?oBRYs62ncJzw%rsxYR>|o(<}iX<6~b1ff<^Z2 zBK?Nb@rIL%ritu3*ZpAhEEO=u_I4LNFimM&JLz)MiKamq`t$_2Bbv~u%U9a1sY#TF z9x%0itBTuxM}m=W;}7j^fxVE6DRlvv*v2Ro{^aZECTwe9-`I}hW6bE%Ff4KLB|qE$Cx2(B?AjMs47>cJ+O;#;|Nj#BK+#$2``NEI+$0Yr36vJu@>(`EL8U0ZzaY6Q)`WUIaCh3Ek|2LD-wP{4&th&sVc`v^D% zoO96-zWTE2RjU@C)Q+UXr=`EvJduKd+l8qHeXAtLcYh_&P_QvbUIBxNHq*q%#LCV< zSH2_n-E?ZoEPsBlzj-)-clkO12 zH__Y1iU&2g-TCNvAw&8x#MFMF;my|vw&4^#jkI#2ok+XYg{(EkB?e~M;%|k9Yk_vP z1w`G7Ruk0wNX7kfUh=l}2pZEPklB&N*yG+wQ`3|61~mkNj0uAX7Fn{jqs6VhhgG7F ze_Y!D3sKA7Tq*Db9uvn%Jn$tzqM<=u_#(0pDZks|P`o)P2BBiO%MxiuT+RBC%)aDj zQy!C%HKAjJyXD?8H+Z+#iJx0m1wn3eS1VyQxeNI+1ltx-uIg^4IiJ{DNtdoM!|eEF zUF7NuhN0tY3L978_PyWBqLRr}6t-YdtYd{ts=`0&jqyp3URl!0d~DAF#oXua0uoIp znAwbt4`w4t-HS2-twuAAsie_Lfo@&V3%6-c5bK*;zQI|%Z zfb-=Dt_J91=i^$MK5bPR({Ax>Q zE6Vx}moXx@rIbyVWTTT!7kg9E6<Q3HpFLm3l1 znlhh4KEG%h(uL}W1KD&bIprp$p9?CVo<$PSxW15|2oDtn?`Al+Y%AfP|7rm^ z({iRau_zy)KvhMT#yq5E*|1hD-5L6vbirLPjJDB!$+xm!u*hG@>^iSBZ9o# z?VJA+eh|9RQ^zLuAR=B0KSMqlM&tzYB3B8nJvA!0lro^t?AMflpjvhgiEl>q zjqP)SQ7B?EQ3}OV_!ntQ6wBMz)0!Uh=Ts~n2lSPRAPdlL3kZ!MZ}PITd8t2v-N6W8&u42Vk$s+KP?f!g}j__j~~dh_7e4j@@ugXg^_Q zkdn8QL&-|f{EMBU>TEXgOO$}r*oz9&!xq$Ys2pRx)9c5?XKKobA8wb!YK>z@uf~ zLGe(qh>=;#DG%@x$#Rscs|J zi@p^(8V|>zhwp9_wFEbzTHZ=+2!+OJwMy*O0(&O`nW|IoSe=Q{-{uQZi^zi$A3#4F z<{mk}%~JmhB14P1DtP(v!Kv;xEb#I~ckW}MA{>ht``Bb6Zi;9@pr3`B8XF~2Y*wxDs*~S(T-?2|6qAj<`QM^gh|8hfGTqF&)oiwAk*AoVD zvYV9)z{7|T>-ar`Q)NXwtR?asjRxp{Cej}npJ_?Ny!T#+{)>enf%rTD+J%b%ZGKIv zyi9IW#G$J)!&n-!?hLge2*~HoRp5skl^O7#Ex5yL_^tXYfqHulFtnd&p(qvv40K;+ z%iGWJ(e3;Mdbi~m<*GPDw$ZDRon1;xX8l3rIW<>8pV;ihHU0(T8{#0>^%}2_Qh=yc zcBwSmvy-9W9{F;-wTyA7Ubxm~seVN^@0^)5mzOD60&r+few8he2ABdx{Z2#u)eICG zdJivNDeYFvPEUYKz`J4|`3r&!x|<@AM%`2C0e_}6v@y?#gmy)uJO zKkbhB<_R}dI6i_P+0?wrGt2bb;MXmRY>2*DC?4^%x2JpCeTHlY7yRA_jGFE3v+G^0 zukm0>FXu5|Zk1PPe(iAU`ZkI6Pov;f{8oLy%F%wPUm1w?9{J~s|3|R5f8g&C^L3|+ z2P38oOh2DPNU`xlT0Y#_Yy?`dntGHUcdQ4KDcy$vmlV7!e8{j%dE>=e3|%=3qre-& zZWlxl5gIqA=*S0xFk|=x{q2eZ4^${S`QjjCd7VWN-7uYpd+%tKzoZf%IuWdI0z%{7 znx1|O>v546TFkh*qWooNPJ0Z1sh*xKe=1OrfUWmLqP#b929`lpXn!`X`=1$5rHL`a z7#%f@m9hk?n`@N1{p9JdLX~+Co$c?-sNd<&Vp>rL&1FKy>ldqOL!HZRIAdZs5gFkqyw-!UH&yJhY99&6k8J8e10mMWsVLRJ^iZ*}Kv0Hy+7;8XWH|Lrl( z7_VERIn1K>^5|RdhsuZtu?N-tRfkv3Eb#Sy4pZg|v;vPg^DX5gHkKD5^Y`4YC-!eZ zeflV5fR9Jrm3MdI`biA9{fMrJoFEPetHE>7^v5SMwzr+}JS7{6If4i@AF?Kz*L0W0 zZI>|szaG8j$a-?V{JE>dXGC2F+O9CR9OJihSnivR(q5r~5C@KAnB~?`doRe|ct6ol zSK?LMo~@zLlUJ@?)V!5x#;qHbX*O+d*t@6J%D|pCg2dg1$@pa^wXc8XBWjj=1ciVN zoD+Grj;*dQh{`nbdh+iZK}m$;7XN%LC;Wu^h{0s^uCNU?9bETCuhz&#uY6{=G2 zIfMREF?GKi%Ww2*qzbK?X5L=(LwYa(BO!a~0ipo_qD<@Rn{br-XQ`$k3kH^(Qraw! zmi!N+5O2FpldiK$tbQeO%zgm{9r1*EFv(8kQ|TuCV=Co`+>AV zTbiIviDKpY^IPTe1HT(Q@*6x*uBZw4MxIGt7l}U%Ey_+z7S_1Y;P5r|gaQ7w4)|h4 z(a7RIx@z9Ev&!XO`*YXTfnQ4(TzXS^X0I`ao!1x$)&)ye&G6lCVW3Nl%Qw((KGj|cOtDJcLgM`_>u)oK^I-9P!Dyf&SaWv=1d_KHxpE{W`x zX{y5{ZGeJ+>>*Q`i>?mp4|(*ZrB2K1pS<_m{eiNinLWsJjw$PP=p0j&MKYUVHY98j z@3Ez;?(N5qC!4Oor7ty!XA)Y4u$~^Ep=N3$g94pi+3=ZXHq(MZrHc?98Vv zpjL^2yXtV-jG&)+W%iWz;<{m4ZL%j)=sdXuhDI)OP zr2w~j!jh1VMQY_Hu4SsUBo7y$0--+{Kb#R>4$2r&->1Hb>Sfp(LZ0fs#R&0YRQmeW z;drfDT?%!aBD+dx{oN_Y%=+KX1lSW~BTRK(AJe-=h&Utt6>?{Pz7uXn@>ts9pvl;E zX98yHYN#Io>vJUYRLLCAhmugxc{}Eh(fgRhgSK5>i+Uv-^j(@8xmP&&JKNkrC(ik2 zsySz4h$1e9$$KKF8c!(l16(Rovpx@_SZE?%Y2ErZH=nJK`H)*czcrB{lj|s6y{LlG z>|P>a*bE+C;~yW%ptnouuXWm6uQx$VEBIuzEIS)T;8Hs!N^y@mOV+^b^)l?Hchlwh zs?Uc-D>-6H+Ww@=un>lDVLj^-^?LJ=Nj#Gk7JAqA;J-UZ2MQ~Il_VVlFbH9m1VZFT3x z%Pd>xMh``;nkfifOtbMiKlxI@Qyut&-|*SDbaH;GF&Rd_=v4iDRLL^)%GOZluCT+5 zOVq+0ONyS!xe___*4w(0|7HO+n}yf1+^B6|?>pP>z=+}|=Y*F%l8V)VNKi+c-8CuNX!R=Po} z3%*ATp<$3C8t|utzq`+HOpiuiZ?PETd1A-7LOkJvTX;&k3VadYdb?H4eRpL^(W%;Gxs3b|sWAbNdJw zqSc>HEK3fyQujHzf-uR$k!N>3)`sL^v^`+cN1*p3jq)na$~Cl3+tO4&rtxSdx+wHc z>O|^ybtNb#H4DA9CGoO&bT0*VUL`UU_$4XF11X(+ok>^4;$gU*RY1_m`e6%pMeAky z06eFgeaiZY94Sh<*7UlO>r#I@H3@{QY}L77l=O?0JliVx<;Erzcjopv30VP<_wJ~P zx!&}(#l#r8Wk`ttqvIhz;sS?=ljz26?Z!0+pH@atIE662Btuwt`kv}R#2Jv*AaRDG z?)ZwU1Zz~a$8BdGGGtrYiD!N_OjO|E3kEVuhkqO#-f z0cVZ*%USzR`tGx@o`JN|huv)<613(;g>V(Gc8W9GCV4_6lkNTIH*p0Dancj1?s)j7 ze&ld?yeP-*(YZg91U(aeu=tA~UNrr~u#-Y!7`|V`lknnOlGt_t_lg}bl z;85-2gU9K!=??)dB*Rv#T@m|y6+CPfN1Z>o90EEtQm}@z#G>wQiLq9@ni&hJ9*O04 zT>!pYGx$XS;d=HlBQG%P>k2}xI@@-+EM>kotGyTC1PP~5ke$wM_0N1`++K7oB0oZE zHDW(sm*qnSn_O={Y_fx=OJ-=s`z?@*akcJPuylB@5aa;@DQ+bIQ%*{9LM@l3Vc2&j z6XEbo4h#K2&%orhdS7EUwk^l;P|O8?Qhg`%_Hl)ehm>u-cmUrDdh`w)7N)6GDRB`L z1d1>5@*X?AeAPcK*L%?wD7M{vQ%XBMW12EBXqI(`1 zhsZX1basfj-1}-&Dsg=zTRSr*>Z#mO<%{|)EE}HtTPyolC6hsK&G0>|dLS?>C)cAL z%!uEQ1R;Y!_xhglB|!H*9Tr(yg;x64Za`O!$E&Mn~(BidTOr2 z%TMSxS7$#R^<63( z-Jr$2%!M+A5-h5uE+|3c6){29wz{fuN@ei;-l(V8QV&5Fe?jqvVLc(pTb((k?|Bl? zSJB88orW*a+#&dtlat|y{Ao-sb!mT`Rddm-XGi?2FC$SQ!@bn-l7R%<(&#&m z)&9-{7cBL_!u+T{D=3(K6T%F8UWf-S=|dvq`Ajdry9dZmwl7>H-wDuwXZ_}T8|nn~ zQ&$@u;@|GKWU;pw1YG=z3mx>jQ!i0q^q$WHpG5T~aYvOq>h~>fWAD>Q?Z!f}fmNRN zDv0;N#2QRKV9#M#%MO*UZc|u3mZ$B8r5QEHjn+f3Y znh6csU@=}xH>9>voYv9!8JXx#B>yE!B8U8V(GF+yRqbu@o^z1L#&Nkb^jjR$ImD%X z`SFalI^?O#wBs$1Qe5-gQ-CBh>0NL7K7mPBZ~n%?5`nyOIa`ASoyPcq>*s{?r}`yQ zTM6Yx+heU1&gwq-X2^5^sl>n}p(2QEz8*eWJsA44jqT%=iW^6v(_&Lym@MZEP^qd3 z{HFbfA0_O`_18N@FOX9$lWQyWsnOIDxz?`CKsbnSgzLRUTMl6Jdd9U!1O<$qX8TZg zp|{Ps;uiVyRX7knZgh&4T=I zZ1T}Fo?4>sMC>h@%i4Ls2yvQOw@}dXaVpiDfc$CLWRAsYJw(#mqif)aTk@|ct4q$H!%W2rUI9!G&JB2Ulk zoOzDy5Zyf>BFKZn{Oadv^?2lw)h`JRMLmQGF8J13g}41uJ4lj{OmPk ztKL4z_=^Q>warb%P0eF))vz~p-xcdQL+#>91EE#DX2`~rcKOMqwvNzII)m-)S>k3f zC9kORTG62&N*f_jQ4K*h^4m%2On#gyjdd(KJ%p&yYi{c9xCD=eUElM>KAsbsLrZMF za~){a@<$IqhTV>qX}LLL+lF%7neAIW7^S(rXkYyXkM6sAxSkah`GbWA;Z4@UXgB5% zE(~X;6~Xa>@MAppw$4{X|52PR5NeQ*XWqCd;_dQ%y62+q;3Q4to{6KJs#aolDqcbAy*)m!p7yLOQK;3pr3|jUUR2rTDVXtsUO9du(9h~iv4fCMi9Q;- zVpyC|OlHy-R#0;GJmj^@4I2O;70GX0O4&$WMGx}!Hp)dMeU*$Hy(oVDJOANb8ZbNS zZ%=&?%a7B_XB2h*bbQ#ONb}}#$%HD2e#tHxP`EDRYG3NS>tLyA$?ivbj_#xQ4>P7b zO)}HPxj9C9Blsz^3&MmxtkPHRYA^^l+uPNiRjO&qtW ztJWR6mbE((jzowpH|+AMp0h6MXqoSpz0qE#DOL(2H78Pw;012Z9*$c@3|%HICUGH0 z{K`6l+zJvML=kBfS=*)FU4_#fh&qlyQbL@8fe!Jli;I(M6!^mxfcH$?i5NXPGK{^X zNWPvkNkmjMEVzp+q)I^6u5zdQydc72iOO;7+&}%bQ&Gn#u*Bi)frWJIcTKHq5WnTu z6FcL})Sz2Kp6xL9j_<$HDsLl`axhs9T!A|--%zYPJW}qAm-faei3(z;!caddu^*^L zoOm8d`QG*XIgXZ-gEzifBN<(TM0X>7;?zf~u8f?C7Vcec59TUJ9PVzJ8N)s2sFX`i zlu70F>u_q1pBQ;94LBkNr?Td-Joc@4hKd=-O6$e$atFq>dE4A|BhJ#VxFbG~6~8b3 zxoOYgz&GVHe0RaV-f-KZJ`WC*k~GG&OY}+yy>Pd5FX^19K?R{u1%Slv#Zqi4#yZIoZ5*$yiL97~{#_?09`~Ln~)R&9vnc&X9$Nw<|Nb zmu{0KqgSjy8FodyMt&Ih;n#wD(Z2EW&T5(K7g-DlgvgGy-5YXj&65g^I3`Wg1W8?C zXMP|w1|FRd5elFO@8*Sfhq|m=PI+rqaC;_%70#bri#dl6v6l(Fx*3*;l%PFj*xDB=bm%#Irn#ee-5_y`@Pp|uX;Qm@dVoOEPV3Y>$GMQYtsS&vkXwbUr=R75_vQV zOvf8cXOZ-CBh#fUl&00lAUogO2RPQR_9ks_A==)#ul1W3<}p6}tY@xK|Hk|n7^j8o z=7*he3-FWP$N<6TJCU+?jq4=6cOOjOWw7jdEylw}-Ppo~c;eY|OR&VKq4(FF+&~Vb zQuI9?PR0;f-~yD|aeRm+SW&b3)H0W1{VP?MReqZjL~E@sbZYgt5yQuw*1_Dl1K+Vz zJ0D|(@vs;K*8VI`$RIWgTR$zZE`vOOPVLQQ0n6+m8)S%-*eMJ< zproil*M;vsLI%`VvY(6|y<{p4K_wuCTU;?hW6;!iv0Zvh1QJ@9GcuTLNS1M}VYRYP zklvGB(u2=|v#NU@#a{QhgU_n|8K%w3dI7*5dt5$H8mUB3S4e9>&rY_wg(79&N&=!- znhWW`puoj$ncdKvl7VJT1)Gxxtl~rmm&=LtD}G9y-Mc6r-$23Jvzd{;ClKCyTCsL> zs$jxQ09$)a)gcLr0oZuC?Xi|o#Xq&bYZrGb&THfVd+JkxjVS>5?Z^XZnPcHhy$A$(GH91LR)jKI;rXB(kTEheHU z-qWrY6`1@QPT0^p+)-%rnnvz(PeWd%3;H8XX^MdPY=q>|$gVRl+uZUfX~pA`-cj|T zjgZaz;>nDHT3ZD&g~mC4A72?u>4StWX7q)$AuDH)*CjD-G)D%>fSJXFR`JFdpNb_)-j&` znJw#?@8tZX)NqDrK<97=F(`Xw-}(J4A=2Op4|?o}!}70>hsj&%l6MO#7xkGL=kVQK z8l##{xqhk*axz`o`~8%;?`5h&zR6%C3h|?y$`WV=1dhh>v&ZGc7n=Ob(4%OxxSYR3 z)t7dPE00$kaheZMpx*YkHBytB<2F8O%m~O`R-9+&2`TSIMt#~Y+yRpagFUn4zjOc; z$4viS-?oy9`GjrH1~XV}ja!6XGB@o%2F$0l8!q~>-+Y7r+t5amDVpEaC#DC6Y*;HR z5T#0+Jj5c444biYArgqVIjRCUr_rMl`80k|6P5Z=XGn=V7Fd!-xS~%4e`+HLZ0Dvu zxdM+i(JBr1W$UBw?J6?Ru%YbRPWHlO;!qN3R*e)0;0O3vis3M$I9moZT+ex;aMAKq z^u>n(39O>W!a|H|P4Kpsn{Lb{srlNFgtk+;C#x}JcZf7NCC1iqX;N+}dV zc&9D{XcmVZ-xAiy1Im|yZqF96<2PxpH?Ff-91Qi3^XF;SEzz^+`>e$#CA=csjoO%$ z-(t|d?6?HN^*np|PtcLg9OZ~UH?96yHfBTVMW5x#Z2EDaDc1Do0W3SZ8SpDe!6fxK zc<0g8%(=3#m?Q(JbmDq342UxE)J}fTkj%15wLui5)5OcoW|0=aTrt;qZMIb46Pm49 zWqGg-W|+JUHaJ^stjTH1&^6u#m-)iN{8k(CG9}l1!48G8r$x{Gsn|b{E;O|<7zd`H zJJ+$zrgKJqsu1T3kDf)&9ID1{hm=L@*(UYzl+2Co((Z<7W4hnO8>&0-XFsX)l3&X-NkV0@3vugco3?Ssw`kMGy`#RAnKiVe=Z~3gt)pU1-gKFcWJ8Pi z&ikh0Uv&ev9g6&XjT3%#DbV;?S0P^dQ8>`l_zYPr;9+80isg`q&$)v8$+>rBnXpi% zNEy{+-6QV9H?5&FeWyIk8JqbjCYV0{-PPMTv__GT0@x@oTj+x-pW0msc}sbYt~+(s z*q5XFT8t2|U*k#PvT@|GQ>1~hhufNcA1mq+_@$T|52t}bf2ZSg$Tx6}+R@J9a2DEwMN|tzr7|h+B^>|o*Z(5YlN`k+wX%&*Pda*1jU^@2a@~m! zy||;hi#>>O--)^NxSC}#y$W?3Rc2U+JZbP=2+&;#7+KO%ISCtIGF^7OOj=>UckMMN z%no;{&)0wGWr?Qo#57NbCwQ}MG)tO?u;yGL+TOZvXPt9Kc0g|LpIn!9^DW;uUqAg# z&g7MPa>s~nI|;D9;lX@Q=eY?jkb9=K|H(NXrU`1LPr1SC_P;Ika35n7u z_5FTyv;4ut`x1ImSv?Y4S%+-|4f3muKsJq<8G51KTV>cWDcq!O#s& z((``(GoympQ@iwRZqIx!4rPK}m5|FnS*d=-jllu@WMzzFI#s4s+Y?c`Z;}$!LIm3Q(+op%h5l{>Gch z?$$?)#Fs+O`q%asFUbFL0iVs<7G(VLI@^}P{pQV_H1siJ+6ra&x8)+~j$^a*U@*P9 z+_P1{ZdakAF^2$TkDF}`IRB|5z_%_1md^bg14`d#m!vE)X?d;^Y5H?4-N?LMIPOXK zFVf?@K$aiVemkP7w#&YH1amm)tBc>fpbwIZ(YmwtvqDSCq9zcdFLmt4iaPmoOuXeaE*5ZaebyMB-x_E05pjVzb(2(EqO>zj zG;%x)SNAsu3oH$pv=V>ZxQ9dm8#s%m%d^M#q9bDDIncB(4$(;t6PXg+&dpb_;X7rt z4!9?FqlItG0BVbj#ihecZ7I5nbdksv*sdzgyIOXu`fe0KV+bqEJN-6fuPOwB0&NE( zseKgy{9AI*w)df$q|Jk0UQrw(;qbhuxa?+q*1;#V67LOoI^LKOlsISOHloo- zehWPU(EWLMpEMqjXuJa#gM2P9X!k>2hk`K+q@Pk!;Ga#@+oi=w2fm3E zbcV;NbEBIEKxr2og!m*fB<9ySryMMM*dA8vl+La;A4IH-v$yVC3hjAyyK=7hy4;pi zc4!-&QHG!R3j)$WCD4jzHeh|9_OUKpkyQaaR`bb z?6JnDv7K>bpj!^7F9czq(o=k!eAqU`$8cuLKOo&|Lc`n3uP)fQ&BTwq@%4RMF=vY; zGy(BQEYP`M?cpbW4VqwM=B&)dO$M8kb*Gto)U4v`+SfN4UpgCXB80qS%~D)2-iF|T z(QuE$kzb17ovkRJuVZH^^qE=5pWDMhB3Hwv9ea87C(fK;bXJR?pj3N>WjFT>{g2-d zlYY($C-*F2nhiMOh5V&J2fnN9gVG$3% zX;6#)=Ab1Be&D?=em$Cx@w2Cl@(-={7193=Vg#Yrl;x-c?x=nG2BH8mah+@tUTRk@ zC!b9)fSE8vIhK8?&Zrv&zB1Ye&kD^sTgPI}Z$TyY90s!pq&80ngUhzv28h?E=F=ax|8XDEmNUP`c|e}6pGFny56aEF!*R? z2!fL+3wlUi%p>8{!uFg4j`D5B6bW=aULULkO#AOsjt5JEpE!@dYDAoI9(B^jvW*tY z$h163dkl&FAT8>Y!Hy_WQC)~RgyVt<$106bk7Jd%- zc-*KnWO6vSHv1ROZ6Uh>dK$wJMpG<4k(Zx81&aQWd|TJbT{bECT?IgQYlv{7qt8FPF&yrS>V7XSQ z=y2pgBAQ-pPR}bz8sR61FnQT9=iD@KbimF{#US{ZwE(-;IFk{pX()@wK^T8Zc{!x4 z_##}HBQHH$%4Eg2cwMa29azFI&|?!O3B59Yqc)H3ZRWx@R~WN0CDFbRt9$RWmX#Ba zb53WeViQP%C&Uv#^I)wt_O>p2^B}?* zJcKF-Ax+EWdeO|Lk2X!C)Fo?pZ5Fv1s9}RNEe$*tkySAgM>E!>*X}%4J?poIj1=VZ z)@@s!d@h9W0Rd-$a{ToaEYOWE|f2I z@&Luv#J4KdE&OopM~O1@3tNe~gV`bXj8dPk7B*18qH!76r49w4EVbcdT9)nyNACeF zIMh#8cbykf4+}ctKF=XOwgM=O*P^s;+okn(9M~$2ZQ5x__WjAho<~&Cc8txBz9s4B zO9gNJl@bHXSv#Xz9fDia?ZA1SxpYS!wGQsfMwyQDcv2qnrx@d#NTyPUHWZ=ShB>yA zBfgVN(RKSpr$}dBPLf$yxpuYQBPnOV`KDyP#oty2B68E`^#{)vm0=1fUVM{QH zp_$&r*~!GcM~>4^wt$uTO7Rj{peF35Fm%OsV|L?veSvk~P^nHIStW)Exsx-{H4`RP zaQ|J2PnqzbVT-XslQ}?Kx_7)vKty5?Cp-Q5-GK}#jr-Q9rdovvHK-P=U7|PC2*{ou zkj>dS&NYrPKe5TG0rq5+T&{ZEv7jn!kcCx;GVJ|so=QS#nse)K!gtQ5kv8<>ZC4l0 z#XyZk$Iq|vsQVkZ1TbVb06|Z)yJA6g*mhX&czR}FEeBVaqWyIB_aJpb!)Ehk?2DJh zcB1X*6YKHAjmIS#a$7xgv8du86!s?7B<0js0-WMATdsl1+d?J|9o^*Tn7?e04%qiE z`XZ0p32HCP<-Yed3xXDxlRSMxNp3^+>YRfJuUp^YfnZKo9Zq_+i}d#82PDzy?j_*M zNh>P0v)~#a0p{HHjr7C*KtSf<_vWP$T$1=~Nt?W+JKoQM)a-RqNZSwPbm;&a0&((lvh!AhBcZ1L=^FpK zi}Sn$)#-pct`Cz;dJTvI&_McDW&0opd~2|^WvtlS`M}UKL|m-Cncy()I2f z@&(Pgoo68^miLu;clZS@jwYr==Yk|fVF5SQ8XXX@(zA$ZCw;p$I-*uX4Y}JrQ7YVO z*Ks;cxNN_lB`@5nV@OPSyWC7E{xu70!2{vOggV3V-L{*6?+c|ff^g8}J)jnraT=hR`+OV_%TQp4ZEuUC^vg4=iHDMZ1_(bhTpZ+uVH0dM z<((Qt?$>D%ToRL5#2W?$I!-%KU6|Q$T>Zf9KZ&O*Z0n`Tpuo zN`zmLjo7WF?y4GLNL!jpv%=`;ivgh#YPSzo9=xIIpx6KeNDWPCTZ zn(yum9k9OmF}HhE!V8D?vZsxh$Cl3o=ss(G-a?liZzQ}Maz0j^sr>7HPvmPk*)Ulu z&=@^%8@JDZ<<2cM8N>|<);JVmbze-pcSfU_b}eAv^s}rup+|k3(FLSd2C*;FLCQnv zsZxN4E-7(%#1FT=o{fxOEtVrHcHYpl;kKp zHZ2;)zkRdNTWHzqJ)K#~i+yXCKW-aytlThlYq7%ylq|4+={xAtjmbk}kua!by&{lq-2%Vh)(b zsO4-|y4({vizl+Yf(Xn&{!cu#JAU8X<`Ff63e{z@iMw2zl=v~^+WYXM9Ch2y(|AKO zm|=q(anF*1m4p#zojA_z2QmU{Co?l&Ikncu9V8UE(wE|DG)jcCh%28-EZ+*n7isya z#CJ>>m`ZIwEpoO854>8xPfGn(X0_;gt8iO1IU}#(dE`S9eHs4{_}haLMOjSSoQX}{ z(($Wy+)%tY_m$(dT4t44zdtJRxfJ>%W=`zVE?MQe*;FUMiR3QN3phX8w|qp0Nb2FV zVFp%OoW}s=KW!T~gV!Imm#c>Lyks1^lqR!!F@MEb`JNc*e_Q;PUU|zmVnd%94AEvZ zido~H^WD@WCvp9AcrU2GfXdSE+-K9w3MF+bZ0V-*3Jk z-7p2LF>c68`VRjQgTtnSA8%8#+#7P$p!-D(y>m^U%?1 zN>vSVvFDCBQX6|T+pyd7(*I=FdjFGnJbRgiKfw73*m^IJ;&F-z3MP`-I9%Tlavmju zE20&Id~=oK;K6PmsM$~<@8+{OOS@x^Vkd*A9$5)NpV0jDGrJa8w|bolH>j?bD&{OJ z#ZYUjaYWx7pPiT^#i=zd zd%c>*;J-jld$G+9uIw}*k^tJ3j}+oy?}2$7Zr(r5=g(HSRNH)2O4FQj44KnOU-_JO zv91kw8M&{Ccludhl zTiFV{QKlU8sdq09Zw#s{Y`)%WnaDKH1I_EU#J>0Ancp}GEKpOYG$0SqXS*Y(lv@yC z{4BCf$hc8!UmS6^zg3tSLjS2q{3$5L@apq)UoG$YvI6D(DFTC06=iaT1V2 zc{@_Mb3HAoptM+%Fg=RaGFFp37rNtLEc0$Y^}b_iLcG7aBrKqqM_H04?xNFh_TM0s_#o%>70p=`K|7iw zNuMJU%b9|kpVnFojk-ho92eNC#x}`Ze?c5b-TaYTjJBlJl7U}~wmSY@IA&Ep;oIve z>PctDq-&S#`z|L?)B~~s==o0Fhrt;99hl;BV2YqnRZDDn6@Q40LmR_0?EQlVK6=pP ziB{5AnZZ|yDQ$))Q6Pkt?R;~?aW}0RX--68C9z4Gw6DlHdO)n{mO6eg#4xiTE+Y_6 zg1T0$q$HDjsKBaO%5G1b?f;TOvKh9%?T!Us{T?qd?lVRE&XNaQPoii3^LeC$TQS5u zGw@hKvo877_^&(gC6wjDjkG_^jHmMrv>4Wzdr6p>w=oEecxyX>Ew6(w_E^f9@(ftO zr>Yvg{5#;~@Ezg{yPauKI0~{#B?O~fwYFioUdbAKBb5c08p)@ie<^!Lc-9e; zB9A@=N~CW@{;+m7whiwvc%5w&e2~=e1ENC6v3@$Vzoh{&Z!u2uk0~5$u9-^X{R2vN zu8qaKKK>;3H!;K&LVqX1+)g zM3D3F8?6_)A-IM9P_r_h4nfbZ0q!b&8cS+Z=(=gD2F+P-VBOQ&xt6Y$uB;F0H^F_G z2%RQ~$TI`w0s$017wFb}R@R5iB%s*_5e0iV^4fBW+A3nK^&`QaWN48qLBxwQKUXzI z=ny&t$>_I!{}x(nnv#-<6s#m!zoSxwl`dsWX^Zz7z5BbE(?fGpoM=dD@_1+Fj?;m5 zt&zUUZadB;KF%EmICcCPP662@M;oOiqP4}B$ER0&QxaUBLmqq7{(i5BMsFu)y63d6 zWgGx-*p+H0*ERP+RgBJqU12)|#aH+Kq0InDQ$uE!x&&}UrdNsNe=-O@p13WYWmeBd z0oAHF-kzc~KTxaU*Olm&TwNI^P`4h~0Zjg%iT8-=0Cv0&Xm`6_GC?6=*bO}q=)x~Y z{g9j6*7grC9N*WFJd+H86lj0j{^CWZpvT7l!<%?$@q~s@mh!r6fgwcqyG2q&`4X?+ z4=+>Uz~CD11(RZE17>`xoag1ipZA0BrcA_arWt6H13N-|Y3)wL!verFMXoR^%41t9 z?OQjDxj9zTYFM zJc$@YNXIf|m*uQ1few0l2B{V7s$KP*s#rYi2kN`k%6|H@`DQTz+V-6X(F_AOM5hQ= zKAO1s?3VaIbVhy-EYj()!DO_<+4SGG<$Zxj z8nXeS%U0(-*~~MvGi<~CLkQ!(1aygptT=Y5 z{c5&hq=Y=YOdANEe3K9KfUR@YPqUX9n;fPQdx59VW{)iZS@`(0r+rCGXk^Lb zzT_HY_(NuwG!FJyF|7`Zo*M$x1aZv;G)^Io0CK@neyPdI!K)7*#<;U8~NQL!w8tn{jSv-D_q#`&0n+& z_3ERwWM=qH9!&du%>6?e6qpTbblx-B@*tZqy|Z?fUiH#}=(1+oF@<)gjF)%ucHSbb zt+RGG{?0kbNdg(%@5EX8Z7>i)8Md?t`LC_yu|^(Tm??(tUww^PaTxFs*m zT2>fA&r(4|LZ_qD%-iy+j%EsEU9EBUW`i)|haOdDifb{K3rAJmby+gJ%p<{~sTue5 zb+5G79LldVWe27kEDKuZZi`n?HgLW&{Da5$32{VrN(VCcN21$jH5xsTleV3ShGKh_ z)_w9RGnU#CO?I&ZSiNyTs5vKzR%`_{x&+AcYmk+KrPZ+d-dA z2gecUb@xC|EE}x|Bj5pqPtxYx7uElFTRFHg2L<6EjQtz ze>BdCox2|7)F)pf8zK#P6^-|GObG!G?eI z`$;k#h(g6 z{LyUYuwC0VG(Cdu^?PE%=kv60QtAI)Hollv80%hUN3F^9?==T)76>Nkaoyio-4a2+ z_`lv2O7_OzI5PI{Wxj;wKSIb3(Po{clr4n2Zi^2YOeOxO5Vv|n$nw;o9Pq(=m*LiX zUk8wXSDiXWH2-TM`(pz|MEd{6 zNB`d+J-GS(wU3k8Ti$fN6_$IgEjoVRJy=={YV7pe@R*nLio>J5|Np-B|E-PW`pLG5 z+CIGHybuJGciY6>v4>%n-G2d8zyeNqji1Tw|D;|2y8-4Nq5tu2g=#@ctv~_r^vDWJ z6uUr+M?K@p>%!Ni{}{UeI}Q5(Xq7Mpjy^UiYHQZYXhs32l+8=h-8xy^X@U#SlZO8$ zqW_b&UeUZRLd{kg&44;=st4f(Wyz15$QUZPxw$*}bxKmH0N8z}6oAywnuV`x{?Bg{ zrT|D8Zxq`My=wbFz34q8FuBK-XW4D;vdw3g(kt#2X3v^1^MBZ%!T67Ii9yWSzz|XR z8Jh#x;a%=pe>?uyg^Smf&1Q~w#=m`JDFwv4|8V-~+xP8~06tieUPX>}D-<_rU*~gR zVSl>6^mNW1(J)@*t>5xuPp{dkLKIN+34GKaub~Q7Yq9a*YMGTzw5OYF4M?kTUH+yR zDC^bFuTx#9&3cB_hiF&xYeltz(FPo^I{v4Z9|IG=Z6qh zlN|B&q@>E{h#UNI4bJ~bz&x(In9Nm^Z+jYc08u>XF$*(O!-2-9 zjQie#&UzfqD-oFV^$U(z%*m-Ujr{__sP~_Ee|eaoey^YOhn0EpO?#WaQv|Od;b%+b zapmpxYlanvlCDD{JYxT5dlCXhLgiT23Sc8gLNV%EyqX)QC)9eHBcSeOG>PwiSM0pd zIu0m}YG79Z4K?0-ur1KlX_Gb(FjNez#pBi~;bO4BizBgd7UyQCfiy97{cu2Utq*vA zXw1(5UT&gRJ!bZoc-**9+k@&$ynBJ?K^J3a!Y}J_h7_^#%?al$D76qZ^OGLG!y)CJ zb0B>AL(KPA1po~fUE}}N*7WTn)YUhc3?U=bD&@^ z1Y%+r0EjC5jyA1<+$1Bwg=3+l)Ua;qND{s6UUKjCZq=^c>?FTdeYwt@%{PD)s!w_Q zLD0*7$*Na(wuX}5d*%D$ksZ9WD2;nRwmDg@6{oH9C(^|ZhcZVG&myqHPJ)IU1ECsl8`U216;zOCnQ4O*Bs4s zu=P4^-dVfM=sm=hEiR;E4Pc2?0JLQ4z>#*j)}hAg-F%%;0cO2AJT`M2ho10|NdO5& z;c$~0{_HW9)ID+HUnSAh*JD{FC@{Yy_BmrZjHbD6!*44O075q^EFPNLk*a-r4VTP` z_BA0yJh^3pE12zEO3XBz#3UkH{Q8~l$vEYVn_T-e|gVYGYGB>s4K@Xk-Lou znR%e@4qVee{dD?Uf@GiabTbw-zelskc%IdNamFo+B>)LJUz4q|H>7#u-+tC6aEa0; z9Sg5t$;=f71)l79Ki&I-|68D|#d`o?o}s9{A67`EY>NW3^ip5QJte|xA$Mq(zkj{v z@NjrA@c8;M=w}1q=*|H~x!34Ewm}F$r|tI_5w?*ma#cWK^GW_i{Oj-O+Zp`gotGOQuGbQoU3|u`BL7i(-*s1F79RTn~y6OqRSS{Ql26$*Jbe)Xk$pEKPtAvUqOc`X%v) z-QjC!2mv}oR(u2!iu7C^Gn34h+nqz-2ZG?qj~}I@U2mdZ^=P&nW`27O+OLV5@}uZM zVZ-pvl-tFtjsd(cU~7Bb%WDH>ro=2K7Uky;iJE|vm-F`4Gny^w@?!8bhOWGLqF_n} zrE$e9?GYs!I8RuJCM=Jmo8`*MQNcJkmLX;dBRlSmtG+_1#z z_verWmsW+i*I%EQXW7`M>|s&hll;i)nL7J|Jh6BEOe8-Ld)T@KnAA+IXBq|<97+-m zY4Y4E>d$p|U2MObQ8w4OA^j%}^0SAo9ceSQ!>h#~rc}l(S=ayBU|P)+E;D z1zvl()ky=kfTX)dIJW?tt&Uo!xj!$vecb^UjuO3tKOur-`p5^ZZ5?L6fTUr!18EEV zW-;PScG(mA_~Ye`Sk>O{1;58f2c9#Ibt*@T7hPLqboPnX9UnNFE2VbpI}_MTpjI%H z|4n457`62q32De0TAHl*`&(+xc=^L#>K%9Gz+b+tJ``B#$l-6AA^RU>{qWBsGdK6G zO{m+r6*tS##xC3Y{UjipC#SZawVr)C>ddYfN|&4DiH41yRLNq0J_p{!ZyopGKlFM^ zx_##D;dENBZlac8lav%cA4~f)BFcdK(!0cbp-^z?E2Hi-NUE6ufHrMfj-|P}e!rLa z{alS$BoB!mG0JOw9lV?J@a1du-~1N>9!esh)Ad{$(Nn-^YaajdXqSd-k(C$Zk$j)i zIg!>8QJlH?Q79nb4l7t5)$%Nnn?YtmUm0uooI|W1<@Wv$j=|a_-z_8-&sduWf(mOL z+GhA_^T$P82oy?7`UPjQGAM$_&Na{=w0|Tlo;mEOljMJS0bIEa=eBXajhu^soly_$ zd9vROY1l8@YhMf^g6xT@?z6sO`FtH zg@ZfnD85U-K%Z?PAlgM*wjF@5>=M0~*vuRh z>_|eF-&s8RmFyZvO{&fN#Pswh+l9#Tm;b0!uAM#i!Q|x z7#z3Q1133K!Fc#@-^*HBth6K36Cj<{GrKTNu+0TC!qu)0Fw&s;_=Lqi_LwiXf1#VT zzI!yqm_#7oKLx+;CD&tLDVQ)0WZNI%&w))wtUqYzT3*)kfn|GL_xKYkqW3!9aFcH} zIkx|$%lns?5-y9^_7N<1S;enZg#s$;sRh=80|UM}yqEuJF2;a+qcXc}5pO=d{Agm8 zL$c^t^$=2LG?A^KY$NC$7`sKJV&q}Ov9d%tdLYQV4Rh@WyKa~ky-Qx*-;zgMmtZ|o zjqlVgH5lNa$a#y<8j4~T0f}z&&XV3!*@fkUXM^oSX0h1O|GP+zSVirSO(Y)rmUi1;Nt8hLz7R|7KGu z!ht%yNKCstoAmTwGkz?+-5a$o&d_0%RibOj=dH}2KCj@&aba#53LhX;JC zs*ihiwmy{m*Kyy&Y=-?4&4$D0^=$}B_PnHiPpNxqm&UTm*}L|f{$|F(GVi`c6gPi3 zElg*nY3-|hdwrwoY&ZRr_N4oo&sTgmzZc}4n}Fe`Cv9DiSNl>@&hjT7`>@sSR#3gy zTFORi+%Q32#*m0+RGW8__(EmyD(ujd-CJ&JZp zIGq6v=HdtQCb=P#_2%FR^^UgV^#fp6*Z1wk&5ezYPX^b^WqDx&9CJIKk9)pc?i_X6 zoRGeaR-d@Fe@C2;ozxyAj+uQpbs*@k%lb-9u3is-FJ+hTOM;QD`Mc9Ilxe_flAMA5_dw!Sqfhb$((9);l|V7k?m)b`W6aj* zccNxw+LddDY8NSkw)N-P5DZC0S|Mgx^k+d#o{%Zk2P2)AQ?3LtVWaD zB;SSCA}NEL3u($e+8`3pxWy<(LE!*FDCVHs!f7-^Hy@M7QCGjpr!UkVheml(*G}NH zgjNkT)<9z~!MN0Ygx?wdrP52!QY!~KDLmUB0g7{`eyj~mU-hRB9e&jdWlp6J!zd8Q*A$e|%Z- zY8xt;+oRj_Cy`wgANdj97JXjd)eo3Nrt5Dn07^G{oXe5U8)mS%G~kb4m3jY7)-|B+ z={CrHd;thhh4GV}kA6Tvk+R{2$bEZ+;$(FAF?zi8@Ep6y=>ZkR7!5#CGAij({xL$k zL1U-LUj}+U);Yz~=6ia&Ph*&dv*d|_8IP0j>Faohm3{myJ?8mbE?=3xw!6p8@YnHx z+uoBM-+6uZJR*O<&wB{XC}R2?R@9NgfFIRoZ(D%TN!=DS;#)IL%iN7csuQ=_ux6OP zO6BWgS-+L1sx{wUsENG0%xZio-}oe27oa{$m|6!)=i=?7LIO2#!etM=jEG&0_U*lu zbrv%7RsE!*dc+k1NmxGf6W1^%`D?n`eDkQJglGq-=h=@Qlm$GMI_nm_8azmfzFc*v z12UtcaTT6hI>?!+OO|6-(#VTE%f&*C-0I#SKUMiicu1p=)BE0|TWq9@N+Ls+4m4ayoa+^qewzqCmAt2D^-Z`fb$)K zBAT^`C~voooQoW+T^j8%mBh2>`{TD7^QF9u*!OZp(PQjEjQ-;q%*$v*Nc~n0xssbzfb{{OTT|L@5z5X10&R zgP=NgK@eMK2B>Z?(fazLktyaUabhF>$Q^kK-Y$+gHcrJ*(e8w{cgr^LO>H-oLe z{T2%#N^&rT#Wy76AK?QbJ)u^ft(h8|Kqehy^Llh2OZ``yty;%LPO4(LC1*i=c1H%b ztZBD(ruC__6Q(u8d)G*}XZGc$2^Ty~%DHSy=J1E-gy=0_FyS8TYvB(Ss$Rew%sTai zL60h&MF+6QAxp#8Pce_xV&Z?Lus~wcJG&G3pMB)zh-ImQpl*BccT$id zo&Xl|pVYl;Vi-&5FB&y&sUO~cvRXhkC}ZP3tYJ&4i00Q7oR(Gxh*~)h^0A*~+t$@^ zZqClF(lS9pBN!`IWV!DTvnZXQp{{w5u-vp@exCYDM2D4OvrZ{{u9Y!5Ju`D6p^(C=kj0F80|Bw41SPaIzF3hOz-N!cQ zi;Z_dtZ^dkSsjzRbCW?Q3lPIPCpvu(s@cejtDq9;o?Y$4@e0^zP+tLnje`X1IW(SCP_Cbp*JG=08=krRHL&?i zUGKu4Wj%?{l6Pgh0Z3cmmq=ew@BO1DF+1gWtnj2M^BvNPi8$xVf3HG=Te%Wgprxva zFE7)>RJzBi8#i=P;36ZiYUehX#XM|vY%z*WKReJ|-fM5Z^V{ppUnDntGClp)?#wK$ z0F+uQ|C61g(m#tGzjtJajyguv>$alt_H~h=M1gm@8l1?|A8}c*`q2xKvU_hw3D&*X zIntvIR9_5@MW|iE`X1Ir`DMeUh|Wa5wFV?yD0e^Vfkol#Xt?MWbxi7`K^d3IAETcN zlKqzUW?t=7*9k87M>#zWIP)-k?nCnHzMvTnQ;cBh4TO=S$9&BKmuo+qWR>E?8(6kI z`2ydZlV%2H7!JJce!Y3k4(mOG9RJ9vPF@)&(WhExN&Oh{wpF3evhN{?XB#F?GEri( z49!1mIyd}jg63BK?H6nq`#I`I+y&|J<3w|fODHuL>@PRxsk0O{_3g&{Nw{ttb>o0C zQ~G_jME{CFGG7KCk~!I;yNUr_t*bRhcMG~!(H(r?(2^)Oq5S2#e9D@*8r!Yd#r_34 zk35X~-mU4DhO&U9$qPZ<$+1rp2d)w{+aF;Yjay~(z8aCg5%=pR#V`VwynZdY>!!ad zmKB{nHDUkGU4Lt5ot(Q%@C;julAveHxA`%J9zHzGuGtk9#C$L)n$RZIvdL@br@*5d zF0T7ef1%Y$bJgGY0SuiksV1)^UCI~Kce3t2(63Zgb{Mo^_Q{2-i=N480i%s@SKYiZ-zYH1IiU=nQYTfMJLl?mC-ryH7sgzrwSTzV$6s z;7R!$I0Ag5U^nU4$54i`LH5%EyOX8PgjkS#KuX}xPDhV&ls^xYCJ+*OMm70p(q3CE zyMuDWdjoT`uSfg=doI8x=8RolN1eK{K$r}pYQV_f3!u{iKfb{5iD5-L2iBLZDhc-<#Z=3q)ue^q=8@TtmwXvGQB8VayP$hVGLi-)2&ejL ze;2kH)nD!>y2@zmbMOo#)`xms@12+!IZufnspR`+dFY+ z^QuWc-sn+ZsxLNhrdEuwC<&55k>*Y;Wzu)ToE|9M0 zc%2m1Y*5=Q1lDVd?P)=06m#*E1pr*C?dlOVck@uD4A-+e+x~ir`3Y~o1o8#^Y>@2m zy({h-{u&54(Akty`rsD88;Vm(UEaec`+ulh8wgpQ*RI%*`l+_XP1@sS;N4^yW?Eeu zQE@)EQC^(OZrH46k>(-e?=yVoyZyxa(`WPdcsC#MuA=D~9&7I21>~I7&WIBkLBR56 zDw?NBLF8VsE%JX#EgS-Lax^Dn#S`^9@2pm(ItO=0H*B-x7mKbzq7^h|Nd$Zvxb&*t zy+#WdwQYDkKt}0kEjdsM=m@|)ld}dE##hP33hVJesT*Q`%&ilsA#l2jQQT#bJ8N zZ~#@eKs@m%TmN&Cp&SG6+`ykM$028q_m(;%suI*BRaQFjfMvY)+JF!vkO*ywLdgqI zVkz0b!Fit&)`w8(&TJuBTqlmJZUNvsJ7Y!-h7<}H8e1+L>VW#L4`$z>nuNl%*+8L% zI{4f#y%n8n1;q6DYG#aP)O?mI)_lQ6&9qA$5`yJx6T*JT%{~p^oGY?F`2FxweA(`; ziIC7GP!basyZS2mn*Zs=wZU5Ba;Oh%fEkViq8R2kA6@DM>?7paBDe06DVF-~DNu`D^QBowOLj**+Yv_ZL6IMQs>uk`lMv_boc;Kgnf&F^k#g~{RH9Ii=sq;k^^I{) zs8cP;Fj9vssb770)ivmZE!udyA&L3rvo*N;5R&XO7eJzKcdoTxt1gvUTe&9m>4n{V zo9blo7LM7$syAc7&J|+ZYt2V#cvcue@eNhZTe3}mt>sn0$M(u4@y>?0^3*Xh-W>z+bsSs{dI!jPL!8^gFW|H2jh#x z+MEfpZQpQL>KbyEz~M}ROri4m#_ermYrI;N&*j-p=~W6BW1$=sNcUwn;ml#EzP=N=M&L3s8saJv*G`(lBav=m#ajJT9Koz&cSn(=4`2=&WI z9-cTBc9G%jH96c$er_8keYB?6w-S0ydvz?bo$u+pIGbHnX?5ly9vcja>!afOdi}1* zFvSWTa$NSNQ`Wup;JB~@Ww7l4HStAlCKDw&qjSPhsME-w6lbf{q&2GPLSAi`2reEP z)HJ7LP}|Mr-ZO4)^4!pgp7q|NVo6PPCtghrUIP;F8FjVZBxIb;n#hUUb2>AUr zS=cJ#`b(6FIEu1c;&Xz@O1MzE$-PX!t1cuV%%_sow@H0ja(I3p$RQ@`tS9jp%?XVU z14Q$y%RqtdHvlJ~cHtc^e%eR!#P^_XI?{KDc`!UG`z8!so7SJd2It5=Le0mS)LM^q zC7U!p-E|5ayyrB){S@2?qOVLI+(AlJ-r`>9ruBCtA*(AUN~oW!bxhO5$izJ@L~hOE zgu0qXgV+g)fLHEw#Uy~>(OIthH1+=%vc#6Z7VUSssaxiKiu~ob!3@FI6`L;6R^I62 z=JEm)C15sunl--#q%%WI{(_YZY=Dm3zt3Ht73KN+p*CsqBqJuSRpC}&+12Y&-6Jkr zKLLq#B^NFPmA3OY01hwlw!To=|0^mvC_57O9*oe|h+{C+pbHUlh8c_0AkENNhS}Y0 z(kyvvMujJk+HVvjDWXNTzZm?0I4z4~yu8 ztFmF}GC{SbR+0lc5v#Ui?{Q-fK)#GnjG@8*2sJHQdH>iW$*-&~&W|XpMZEIMF(f70 z!*DcDDQgqM%7oX)Xivz#NkPHDEhg47i9UA3^a=ZtvGwvVZkJKEu-LHnXL=ont>?y0 z?XME@J`sx$6~8q^l8(D0csHTVUW8)1fi;?kb*G?sUH`OG&9}>A@w#^4BKG{0L>@nZ z?pJ^6mrgWg9l*2|PUxc_U$Vo;yq5YTzfoPr>b8{5#T(N}LBzRK_DhFxY&aDA&m3=G zB~CId)f9aqErJWeZbz1q1Kw#EUeW9k^*>IJ3@D>$h*)7ymy}V>3m6k$4E?cqOk4OvxeVg5-sO? znPRM!J&6LfDPamHONy4g&pcvVH6=)69(_NDya8JpMNXY z@4Tkb*EKq&v+WSYN}Rx4L++W}&c#G4OoXh|Ia_}HrENbJ$lMd(d8 zb_)&*i_Q3WH%D{jrbK_W(eeL?WfUGxU|@XzZ>*SzFohRA^V6&xmk?<%%R^80%NN|? zszqRD%1pvzVFV#BSgm%aN~1wNrJFU<0!0Yttb|FEehW zoPW;^#V@EZta8AsdDt`6h|A9&q`|jQ^C|f&I=X3N(~Hh32TPhx>lvXY=ipw(cELgi z?nk139?1nQKh^%{CC@84k|M?*w`UEsY&P?+a}7ow{bv-merMavDpIKZ}WPe)|`v zLEtT`L|FTS%N+x?sj9eD+&N%Fvs7{R4+$~gi8#iJLw2e%QsJwF*)S$W!5IParmOFh*lvn=DAB{3q_kN=(Ca&Gp$ z(aq**n|gZ5+=ftP+9`@#e%9^F-denHP=DzRPa468xmug*;yHH_dGoK=p<@ymO8?vj z#CY9g6*eXIYS&KKizHh#|Jvw2==pTG|u)hlOH{{C)%?;Am(??0@E39V$K5 z_S692Tl*d(=)OPmNxK^Yc(J8YN}^)x6>4PfNZ^#JOw@M{uzZ(ez8qD>mg)N|0Q~Tl zXR-Y@z>PTM;_Im#E;bQ{GNJYniP%2hZ$rT+l?o&N&EVcY&uzwM&B`Rlx8t>I%@Euy zF_y~7?}#70cw^U)uY>(9*DAyUlYpD(!CFlvCkn_d5Lj z^YY6#8U9nB(PN}_$FbbrD}Ua)tEj>7VQ01;m?J5QR@Zgh`V*Vv2}?sIy_zElm(+yN z)|G>xl$8dfipNdvdSAoxYgbIoTY;;$$=%)MwKsTM!t}RXrb)F1ogC^2Ba`Z15+Fh_ zZU5d83oSQ5i)iAr?RQ}i*GRVCExtrk&<;JRtXuJAn-9KL$ZSh!dv+!5-a+c+$qhCI z&A_3NA{yC9O4Zi}_8N>C;yp%;i6awE5Mze=hDXD_&}X~_u~vxLw+_ua=fbnznwj38 ztv`FVIX$qF+~#&5avD=#L>0%3cr9HDAUulV#;fhr<~d?z7$GOQcK&!b#?PF*UB~E4 zOXjTVM!rZ!40k%yulqFnB)e#dZ7`omEW#04gK7qi0nZHa%_{TB?W!bq=K6x#;NLTt z=X0lurdBz}95>uJ-KCOIa>fq!51e_E@-sGD7g;nCq_UMSeV0*k!xm?h; zE#MXI?a1y_X|j&uf-qpEM{;qxsBXraob4pKgZ%r0zj^4^6ngVqgVsW@`3ppdk9Qj) z2g)hfGWkmV7AQ&garZqQ(CFi$^*jI}*{4L7%c=7~ntIlZW2Y4%EI7XE7kod{)^4Fu zCab>TA$23xz$s+mxUU5=Gj1OO8d||w=lt~Ur)l8FY|U3^IVVs@$u2A_LwvboG_die zAzt|^ZbyFj)2&Qcah9N=H|m8&_^4&R0iI*sfa`1dsvnT*Dp_wAbl!X09D0*Za492) zqyn=ow4oK4($`Y~c5u}Gf=sY!*7A?Q&q(piud(4?OX!Y-LEem=HxMWEaUaeWjb3hL zn||rBB`-vYg*i7r(4f=BnZd(lUz+7G)vBORT@}JV9BSgan-ab99zob3)W3d_kju6~ zEsTP71O`9#&KPc=<5HRTc!l6KTxF{|8zjz-HKfsP$1SRPT{mEd?!V!0*z$DmriJH| ztD-kx%bKVr*=f?e->Xy~PNP0#147KBxa%qYdFL&XkUwfg2~6SP7x!$&o#xwtfM)7S z@ceWd#M}Ks-r0BuK>ZF1CJHzC1*kL?Uj`foF#M@v0oac;x%-8@h6wdkRqVnTV;88E zXV%$&NO~fZ9r6= zB^&lV`+iSRTX@?ibLR76i_t~$6T{bi3*+Z&Zpr6e(4sfzHKI}$A1OuKDxl+{`su$w znt$!jJ=Hhe8e=|I5(v)W#gdWx6Pf)euI$YfH$oD1yJyj+A`=hs5_A%HUvDfM#$YW`^wP_y8- zgfKT(zD^FNhbZ9)iHyI6qy7`9)C0HBrTOEAxY%remqrZp+)qX6M$0N)8p|L%;Tv=Vi|vs z+Wl2Adz`&juV6)5^Cq0=#QW^27VQhU(Xd>(B*U+<^T=CdwnMqaYm)g1b*aU!g-$cV zm(Uz$?e1|IoV7)dk}J^T8Z9lApMXY}<{s9c*LKt|j!yTJpd|T^R8o%cI2e=<98Zw2 zp$7Yq(JR)U&B|wt6%U1eN075jdeJ*POzJ5%#ZDgo@}xZH<#$C>sybiD=tB1i%2hn> zsGnRJ?sUn$%`4Uk5DF+76CV4Ra zTjSg{AmKWx(|UfmIG?8ke%eP-({hM_gx7{s&Ztq!w0AJAY*CV7&IJWl|M`9~2}5Q5 zy}`NyC0y^tMe>B797>dIg2E+xvug$NN*hl@Tl;#ig<4MAwx0A|{~;L;!M z0vDn4ejE)c7p5d9KUvGrEShOgE~W`N(YDB~_m?5zjB1EVF?h3b=_6J0AhWJkf+P&p zCY}mNTvV)q*q`GC_z8r`syWVTcV?AcN}YvyT-BFj7~<-h;oxDb)X6yV9ZEipmb)5n zSeEFGo1JwM(OWM;G*yn&-JBFj&AaSOb%(tJfFt!%e;e$kc?P()h6NcN;OD!khI#?3 zQ$qrlN(iit-@Kwlc>M5$t7ePvb}VnhOB%ll6aRr`u-(w{#NWTT>@x{(`3l-LOtivV z24ooJ=OhL&NvtxirKH(TzcbWxcNY(PegZIoN)FCz!CFh(UIhKzJc#?dMXVvh>mvC$ z$2$rrF?rSWBRs^pWqsSTA|S4lGN|p5czf9W(b@2X^E{9j z?;oLot0+qYe8$B>;|v=>%4FGfNwcOh59}V21}kEN^~^gcZ^9)8e2({ByeaX^cr$eu z=}D~pdS%lrD`hR|HSL`MP_+YSW9g|!(>eLi(1EI;gBE~)XL5OHs(q8%($DK)Fe%$s zJHqxxCeQW8>(Gn+W>c!Nm$mXQ?`K7aFG%t43Uc#>2Jck1Q2IIWGK2G^`NBCTc0cy$ zOr5#w(Tba=GrD789t20^v&)Tc)mLV$qYO*W5+%^@$`5<$meveo3YXaNfzX-FR6Z?hClWs=+Ak5Bd z8S!_wi34rkcsl$9ZmP~#om%RZaDS^hQ5NahZ?mnP<#kExc3{`AGfb$3>RyO2#+fMU zx4N%E=>ea$%bYvcavO=pknYVRvuEmP9b+Q?R z`1BhIWT2;qsV4qeX3EiO{T2=8WWtMyusEPv$e9gjlaji{MR*S($95KW=il{rs}T>V z^FN{*PI`FUU+KCX9}&N?F_SQ;ek%HITy3?8cN?u`O!HpMv_o2Or2PaS3ClQa*rdkF zw$s@7hKEphy%AKkC2-pUNiB&fbxg=tJdde7-DM@3*g0#VmjapgG?*Mel2SXLTTksz zHS!N}-V!QOp5ng@{G|&y>tN>rmzXOY$t4R5*q%q(-h5WR6=*S-;F23$^^tA^J^v7$ zDJwr%XKYXu0jhyL(KYoDE2i7d`apb)Rd5?#HQ7R;$fl+O!GppWZX-a&*Ho&v-bbAU zS>dN~`k2!&O*uwD9O_f`c&mXhO-9knzS&|wEQyove2CtdG)T#BI?C*co4psd>TmpL zGme52IlK?EBz)vrX(~tjBwlF~oIQFf75C@JBNYf8-VA)yG)4DmZ+9i}5mt50_GRg~ zG1|?{zFj__{G9aiig0a)yw})j&`qszt)*lKheOd0Sw9^^C#+UC8#SE*b4;M(b{dj; zG~Cgi@i1k$Jp=Th5E_|4bsd=ujnw%3^I&Ii1mczh!zEIg>*G_3HhDdUYloU`S-!R& zL^k`?)z{7atQ-W?j7=Php4u(W)rJcT?5|3I4pzUY@qcndiPjM6Mq(_>I^;`2f_6-R z-10VVyNXX3wKvS^>OYIX!9M9%>3sNFXjc`wZ;4N=b-fN}VU+feRUuZ;qUmlsh1wE(L)xl^Cps2%K@YO>3#}?sj6W!ESSmT< zmy6Ew8y4Noc)_;v5x2;B=xB9!PS@C7=P2`#tJWed$K+cJ(j|9w_@I~;dpjsF8tmR7 zzl`@*nsp0Bkpe3fr;8{(+n`r~dAV)?0lJ1MxN&a!bL>Pn|Jz9v>{ixj`Mc_#wC_7w zFi;LLkzrx`+c!`ZjF_lwNA-TC6zq5l+4cI`Jz&60k^HL&3hi2r+{nF-A6EWq@OY5! z`vQg5jcB;9?^ieXb(3z+TWgeOMqKydgq9?>m7@Opc1Eh4WihQHahKh5@6!kO z4}pdmO+;*aYj2!a@Mo93fa}85brva2U;F2I%^KkKJ}z zKPwT-+)XmmtTL3`a26a{T^OskGuSJVLKVB=iwK$k42RTVgHksajHR~5!g<`LMwcf$ z`NIGdrCaTFkjBIP_JjB=Y{6Zl|Z#=yw;=I_B?<-g#EJ9 zbM4n_$ds!@cA2`wD6ZTQuSG_>2tYCt-N5ySk&PVZfrvx3(@WeejviG9rGC08XF~a` zldlHQjhH8rZruJilG-tKIcN!`!7=7!F({4H^=G#MfH$b3dO7NWnuyF4tMz0JhhIGD zx%K5r{~w6RYm4uYmI=Y*5p7=(vCe7b&+>wOk+g(n<~EhC;VOPy1xGKE z*%zRV)tSz3DFLI8h66%poeOUHSkOj94=HN8T+bl&#ZR261t}3#u=8GbkH+p3&C-L{@&w{Zh7{jQOOEa z6vu!7Hz{;~DOgV?)nAfxAuR$`t|wd`X3>trz`NnyvK3X=>XPS4R~u`)zsgLd=Xy2k4j@nLzJiC%PpkEYq9Bo}bZodD8Bsx3TvD`ou zZ^V%f*k|NHBQHWD870>TN+$WU5H60Q3kByz(4yf*>d z?<92Wr6kv~jR1Z1;knO$IfNcnx)i>O#f4sy%88%I^@Ob)fj9qdOUlV4l zUfG^lOALmTr7u%Y6ulPb8w@jfx7XF)c6%eHpg2xg(|YahpOLxiPV-DBVWgOeB-Unt zt{uQxWS19QB3`R$kH$9b{GLszJ|l%90~2)YmJ|#{H-&M`+RRk z1|u_3^ihEv(B7-z!xZEQcfk_4j3k!w~a-{Qfe;j^fg`6)dR& zEFD0Se^yrdob1m+P=$Ki0tKXV zcIhEM5l{cA<~E}8>C6%UvwcR00MKHxB_%ub+r;;--g~hm6I+&?#L=j=Za0T|2997 z63o28IM~PA$n@~`<0pVaR9{=L=@5#nbJ-fkBW>dGY-dLm&%!Unm2kZ(4RU>FKa;fb zf-*QIVORYlX$!XfBPVi++4P5@&+T+`Z+jOGoEiEHpyV*LTwk0?yU&iv2a`STO*~}n z-i;h7tLDRKTCv{K<|v-#S7r|1&0n8)>&2gBxI&OF(s7!%X#hm><2eu(Zby=4={36+ zpU&A4WxN-4_P!SUw99j@PXvIpfd*743=cO>>bTKcs6y`-J<>ST`_SS=#8jz{ zs4+l@@uAda;(O%Tc%g&sv_=orPMLFIP0vR_wkWqoE1$)KOcIK$VmB=@&df+A_bAYY6yaAiTY%t&U5;yeb%&ee*Wq|<;|7HI zZtq9ecp<6xM!$zYeYPAHmsXqcoGEqg*~fO4Rty-?n~_)Hv1Rj=PpyD96D3LcM_Py6 z#U^W<=R&L(D~cxi-_?}CdRJqjiG!;Sd#)Tq<`E@e(eZ8X__+|CjjeXdpA+$ig}A(qdGBsHdcRz0~fwv^{GkEB?Ug-*8}2x(G;7 zIa9X5^Bq8$8OoVkIw>x7=OF6B{-$Jb3QqaR7Pmp!_wctZ*)`DI->s{sm>IeoVhhy@ z%6ouTxf_T_UHllk;FouY_fa5j`C`jy=nEj~iuC7PN=ngX{l-N1}zSt^?0}Bz{(gRZZmiX(K3VORwg1 z>f0M|zJmMqVLr=ifhROs>V=|3+mq3PduOC218d$l#7{E ze;f^C#ht&!A%*YFH^c#?2KSZzQeWODQP~pyr7id2J?13_lS~os=>ck|l~B{j#Mpaa^$<3fft~?~6v?GuzH<8nm9!q5 zic80O1bk&BrFrmjb5~5yZ&hmv;`4bb$E+*&-p+#0Nb8(sqbxz(ygxwi@%+P|(c$&s z3L~-d&S2cqJ+Rw8cHdhkwI*_s5dIYKqB=2S<2Z};*mC9i%Jq0(Y=PWf_(N#Bd6T%M z!_F=S`W|9f3~mi`!p#&J7Fj0>jWeLk;$q5-{dFm>R~{Y7!Ce`=sC}muB)B`Z$Kxhl)MfREFbziE>XoD?Li! zXku<9CF0~G2HZ;=Qz}zH+k*%Nle$d^8Ua$SmQ$rB>QnQs`yF({l43U7CtF1h2EJR6bF6<9)hVok~RWI*NmD^q;vy0V|Qw)r^ zp7dFXo{AM};?f&u^ugujq&IsLUXe-71#<;m4yVi>397m^k?qm3m%_(7?LMf7)T zNG$g`cwi()cnbM9z1FJ@f3DB)1SBxhvLl8sQCKe_3;--S8{N2S5<~afG~|$ zq|c8P?mPofcn@I2%AT$EDtD^@B1)m)dXn2-M!(Hl73BP>PU9PJl{r4`3~bH*n|Q| z3et3k8QGcOdeQd)IWBAw!w5p&=2x}0(>ehzVV;1D!!LlhqTE_FQvhd9QsrQsw7-YM zm7?!aq7Ws(m_wa|7a7F^CEKngRI%b;Isf{6Bw{%Pc3!a712J=7ucnu{ zi04s~epeBUZOPY=h==ZgJ_GKF&-(Y6o@5hWoAWD*IXKI2>HD0?aa9c~@yq~m!IKWY zk8okzC6xuw?wCA4^??uaD2kY_ot(Gzq&k3781qZt{4_m)$j8)ij|7-6Y-)KLSK4#c zvvm9JlRV^rK$b=nkks72(xys(o!Iz4ux--=(j)0oCK+b6Am=m!yrk5|`)Ljq_)Na& zV|KoCz9R307+~l6!`cZ*HxRt(+N`MeTaO9l%X$E-0AZ|qng2W{@=8+3UJ9u3 zZGXgoX|ezD3Kf&yxUzo)=~NPRTBz##9Fs0IcN&y*&-|z`Si%3t0}%id^@dd*8JfPoBU(6AAnbo)GXt8U&NS)DXLRA?5f{%5{*CinZ>{s%L22c-ZzGuH1n0!MEccyMWC{5-3G}xCMbr!Pg5vr=LPCx`QNvn_h{`yhUwGcL@$zzBT+Lgm8y5R4FePANnD$=5OlGx+KF3H5*BP6*M7_gG%aK|ZZH3BI%ZP(U!KHwM2R`9Te)BuJfWvZ7`f^+Q@TNA&i2t&TjWLMd zU?B0!!!t3&3~}x9NEie+D-IOrmbo8srg!h&!<*OgGFsPzpEQc>B`_8b=isl3o{yr~ zLP??-IRGBI%-Na;>qS87p~SDt2K~&qS`U3vmL0KJ+x{u_rTe!9OpOc9P4$}gA812@ z3)5Tn4HzN5WHXv*m{Uooo{RYQd*?$s_qxPv84_F+4gC)ctAYu&Pxmvj1)Z`8Tua~y zuAb?%*np4PzId&8D`0Sazd!G~#PWpCSwv)?P_K!nq@?827ZBL>ryEcfYmQP)7oM$t zE>BNM=Jh5ZKgDloVHy_sd;~mE76g}kCQfFV|8jOZusd)F_fPs8^+2tsXNIZbR-I6E z@wjGl=8USVR8zR$qh);qvq0j4C!t|mz$boYJMXAp9yd){(oV2c|=E?4qvQeCrir-JKs1Ivldoqk6d!PKswi=QH{D(08 zMx*>~T0iyS5qHvBn^KLO1{-hxVt{b(*{R?h? z0owlEu`I*5a5U6Q=^KmV=arhvYwK-)`aomx8v8`rh6|8f6oGUEQ{S#jak!%Q!_G0? z+>xy!_)AekN5(2RSGWZsV@rgNXd0_P?qFqiGEc0f2?!6Ib1=N-!yn39PXI+;fl$MBI`ZlF^ETc|qu7qEjLD0d8~E(m$oLJjSJh?bH+j*;rY zQ&Z#eEfXGO3HQ1C{igHuf;Qyy6#uJ}L%Z%8tzEIx-42MIZWB$rQ_y-_@WOmi+VFVD z0%3izKA#7CUU!q@JkO5^HlS)c-D5uA_huP`&URg{L-OpkdDis41ql-Ur6&g-;O91C zpGT^L)So&gxz7G*Vq{}++gOIvvl6Qomcaq^rxpu;+5}u-N9;6palI< z55**dy~&?jpd`^j6F69+q@n-zqY2FnylYYY$*D?WJX5jO1>Rk9DO$SX@ja!wsWv%W zLVBDsF*x-3`V{(PLcM%gkujzu63+M%<6bY!pbwCcc&eWgEcUU9wySi|8{|G?Rza?y za_P#7v6XNzTUwOIvNLvoLq-D6A#b{8ljgdD6~zuxDO#1cIzRIDuN6a~u`OQ>=`oG}ah8tCBX zD0t|1z6g7Tl>zdFdz8>Ha4||PC9p9}>JWtKjRl>rT}^Fn4+rjUhCUZze%I=AiYUY) zdH#3#_U4J?TpbjMu-p8?H0=3KoU4-kM5G!Vvg=SyGsm#AzNi3h2dy|*mBn*jhy9;0 z)KVMrVa2#}I*gorgJvc1QT(t8y$n4lHG9{W_A{@^P1Y2B*F?)Pjp6m_j73cuj}Zm5 z!v=?LytDSXz(Ok>w-E>bvz4qD)LQa+Ku{3rJ5L+a~5cRfS z>aV=vbQr7u4s?t$7+n!py=)qeCVGs|W74+paY_7DJNtX?1_5!LEIlK8{sYitZ*eo$tN!RRd3ITggpvHQ zIqo>Euzf~oG5h9%jlD*F+j^|nByxR9|_4FT3;r)6o@h0nbzGx9fxH_!Er<&&1a$_@NKw4LXmm#oNhU3 zy`5D|tIIQYo8GAFEZITn8iygjjPPK}M^!A*t+6jZcyH(8`W<|F`1+S>ETXiCI=64r zZ+b7-T?&5AFhL|X#a^;tJGb{folOGFISTdOOw#STEDA;l+0jj-^U2+2@PnQ&)uUTC zb!w=G4Es!FmodERqFSIICooV=@1m#=T{~D0s`}77zSpPTqaM&Jy5+cE;-?IHB&=zHLgou5)4(SNQ( zs6_umh5>-$D?BZoLv2~R`Yo?N*Acz8j}Wm>KmY6+xa|9S>!=M@p`>Z8<2Vp9!?V*O zc`wmXy679dCmE)cbe`+v1psQO!(t^6{X)AUSpXM6Fbip@vYjljov8wqQsg#TvdSs5ug>5Nhe2;vE0DhGa4%!?^c5NgSKkW-*EV!uSx|lG zE4{z*zr*!X91P8)1*jk|LbU78>VBG!NQT>aa5=Pt60>(#5vtxo?Tx*uCM$gzE`ApZ zTD~d_prqLJg`k5BF%O=jO0DqM8zwXzxY)cm3Y*&Z3d{I{{n)iA9JH)hZUWdi~)=t z>O%VJ0lTW!i-ioiunsY%><8|91w}w2$_xuOlI=hY_IMNN!o0hdvP+)FeYy4%`>jKs zB!^~3s-4Pqutn#)u5^Dd3G20APlh2oGDn%Rt;J63@9})zvFj~@^c)DDIQZu5?W@_n zYBL!op?YhwWLD6fP#dqv{Wqe`io~0O33Xw@6OV+pKho^*#ZiyPziD=@l3Q)IO(N)-%7ZdSYWS_f%yaw((xp z=9l2@o3t(XYvwI&gXO@cAHPODf(Ah!%j|WbAB&_;-tfikGsn*^{GU#>9-$YZ4==@sgh+0NO;)K0V6OYcdY1^V&0<00n>{t5Sh@| zsp15ya>J�b`7Ff8Wv1mA%`rDl-JOg(i!Z?eSA1WKz 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 z^#~?miden-client
Core Rust library
accounts · notes · transactions
proving · state sync"] + end + + subgraph wasm-bridge["wasm-bridge"] + bridge["@miden-sdk/wasm-bridge
WASM compilation + JS glue
Web Worker orchestration
IndexedDB store + keystore
type marshalling"] + end + + subgraph ts-sdk["ts-sdk"] + ts["@miden-sdk/ts-sdk
Idiomatic TypeScript wrapper
async/await API · type definitions"] + end + + subgraph react-sdk["react-sdk"] + react["@miden-sdk/react-sdk
React hooks + providers
Zustand state · signer integrations"] + end + + core -- "crates.io" --> bridge + bridge -- "npm" --> ts + bridge -- "npm" --> react +``` + +| Layer | Published as | Language | Purpose | +|-------|-------------|----------|---------| +| **[Rust SDK](./rust-client/index.md)** | `miden-client` (crates.io) | Rust | Core client library — account management, transaction building/execution/proving, state sync, node communication. `#![no_std]` compatible with trait-based DI for storage, RPC, proving, and key management | +| **WASM bridge** | `@miden-sdk/wasm-bridge` (npm) | Rust → WASM + JS | Compiles the Rust core to WebAssembly via `wasm-bindgen`. Manages Web Worker offloading, IndexedDB persistence, sync locking, and external signer support | +| **[TypeScript SDK](./web-client/index.md)** | `@miden-sdk/ts-sdk` (npm) | TypeScript | Pure TypeScript wrapper over the WASM bridge. Primary entry point for Node.js backends and non-React browser apps | +| **[React SDK](./react-client/index.md)** | `@miden-sdk/react-sdk` (npm) | TypeScript | React integration — hooks, context providers, Zustand state management, and wallet signer integrations | + +The TypeScript and React SDKs are siblings — both consume the WASM bridge directly, neither depends on the other. diff --git a/docs/builder/client/react-client/_category_.yml b/docs/builder/client/react-client/_category_.yml new file mode 100644 index 00000000..54db8066 --- /dev/null +++ b/docs/builder/client/react-client/_category_.yml @@ -0,0 +1,3 @@ +label: React +position: 3 +collapsed: true diff --git a/docs/builder/client/react-client/design.md b/docs/builder/client/react-client/design.md new file mode 100644 index 00000000..220645dd --- /dev/null +++ b/docs/builder/client/react-client/design.md @@ -0,0 +1,177 @@ +--- +title: Design +sidebar_position: 4 +--- + +# Design + +This page explains how the React SDK is structured and how its pieces fit together at runtime. + +## How the SDK reaches the browser + +The React SDK is a pure TypeScript/React package that wraps the [WASM bridge](../index.md). It consumes `@miden-sdk/wasm-bridge` as a peer dependency and adds React-specific patterns — hooks, context providers, and Zustand state management — on top. + +```mermaid +flowchart LR + A["Rust core
(miden-client)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] + B -->|"peer dependency"| C["React SDK
(@miden-sdk/react-sdk)"] + C --> D["Your React app"] +``` + +The React SDK contains no Rust or WASM code of its own. From your perspective, `npm install @miden-sdk/react-sdk @miden-sdk/wasm-bridge` is all you need. + +## Runtime architecture + +At runtime, the SDK introduces three layers between your components and the WASM bridge: + +```mermaid +flowchart TB + subgraph App["Your React app"] + Components["React components"] + end + + subgraph ReactSDK["@miden-sdk/react-sdk"] + Hooks["Hooks layer
query + mutation hooks"] + Store["Zustand store
accounts · notes · sync
asset metadata · loading states"] + Provider["MidenProvider
client lifecycle · auto-sync
exclusive WASM access"] + end + + subgraph Worker["Web Worker thread"] + WASM["Rust client core
(WASM bridge)"] + WASM --> IDB["IndexedDB
store + keystore"] + WASM --> RPC["gRPC-web"] + end + + Components --> Hooks + Hooks --> Store + Hooks --> Provider + Provider -->|"runExclusive()
postMessage"| WASM + Store -.->|"re-renders on
state change"| Components + RPC --> Node["Miden node"] + RPC --> NT["Note transport"] +``` + +### Provider + +`MidenProvider` is the root of the SDK. It: + +1. **Initializes the WASM client** — loads the WebAssembly binary, creates the Web Worker, and connects to the configured RPC endpoint +2. **Manages auto-sync** — polls the Miden node at a configurable interval (default: 15s), updating the Zustand store after each sync +3. **Serializes WASM access** — all operations go through `runExclusive()`, which uses an `AsyncLock` to prevent concurrent WASM calls +4. **Detects external signers** — if a `SignerContext` is present above the provider, it creates the client with an external keystore instead of the default local one + +### Zustand store + +The SDK uses [Zustand](https://zustand.docs.pmnd.rs/) for centralized state: + +```mermaid +flowchart LR + subgraph Hooks["Selector hooks"] + direction TB + H1["useAccounts()"] + H2["useAccount(id)"] + H3["useNotes()"] + H4["useSyncState()"] + H5["useNoteStream()"] + end + + subgraph Store["MidenStore"] + direction TB + Accounts["Account cache"] + Notes["Note cache"] + Sync["Sync state"] + Assets["Asset metadata"] + Client["Client state"] + end + + H1 --> Accounts + H2 --> Accounts + H2 --> Assets + H3 --> Notes + H4 --> Sync + H5 --> Notes +``` + +| Store slice | Contents | +|-------------|----------| +| **Account cache** | `accountHeaders`, `accountDetails` | +| **Note cache** | `inputNotes`, `consumableNotes`, `noteFirstSeen` | +| **Sync state** | `syncHeight`, `isSyncing`, `lastSyncTime` | +| **Asset metadata** | `symbol`, `decimals` per faucet ID | +| **Client state** | `isReady`, `isInitializing`, `config` | + +Components subscribe to specific slices of the store via selector hooks, so they only re-render when their data changes — not on every sync cycle. + +### Hooks layer + +Hooks follow two patterns: + +**Query hooks** (`useAccounts`, `useAccount`, `useNotes`, `useNoteStream`, `useSyncState`, `useTransactionHistory`, `useAssetMetadata`) read from the Zustand store, auto-fetch on mount if the cache is empty, and re-fetch after each sync. + +**Mutation hooks** (`useSend`, `useConsume`, `useMint`, `useSwap`, `useCreateWallet`, `useCreateFaucet`, `useTransaction`) execute transactions through the provider's `runExclusive()`, track progress through stages, and refresh the store on completion. + +```mermaid +sequenceDiagram + participant C as Component + participant H as useSend() + participant P as MidenProvider + participant W as Web Worker (WASM) + participant N as Miden node + + C->>H: send({ from, to, amount }) + H->>H: stage = "executing" + H->>P: runExclusive(send) + P->>W: postMessage + W->>W: Build request + execute in VM + H->>H: stage = "proving" + W->>W: Generate ZK proof + H->>H: stage = "submitting" + W->>N: Submit proven transaction + N-->>W: Transaction ID + H->>H: stage = "complete" + H->>P: trigger sync + store refresh + P-->>C: re-render with updated state +``` + +## WASM concurrency safety + +The SDK is fully concurrency-safe out of the box. Multiple React components can issue queries and mutations simultaneously — the SDK serializes all WASM operations internally, so you never need to coordinate access yourself. Hooks can be called freely from any component without worrying about race conditions or conflicting operations. The SDK also handles deduplication of rapid user interactions (e.g., double-clicking a button), ensuring each action is processed exactly once. + +## External signer integration + +The SDK supports third-party wallet providers through a layered context pattern. A single signer provider can sit directly above `MidenProvider`, or multiple signers can be registered via `MultiSignerProvider`: + +```mermaid +flowchart TB + Para["ParaSignerProvider"] --> Multi["MultiSignerProvider
(optional)"] + Turnkey["TurnkeySignerProvider"] --> Multi + MidenFi["MidenFiSignerProvider"] --> Multi + + Multi -->|"forwards active SignerContext"| MP["MidenProvider"] + MP --> App["Your components"] + MP -.->|"creates client with external keystore"| WASM["Web Worker"] +``` + +When an external signer is present, `MidenProvider` automatically adapts its behavior: + +1. **Delegates signing** — transaction signing is handled by the external wallet provider instead of the local keystore +2. **Isolates storage** — each signer gets its own IndexedDB database, so accounts and state from different wallets never collide +3. **Configures account creation** — new accounts are created with the signer's key material and storage preferences + +For multi-signer apps, `MultiSignerProvider` maintains a registry of all `SignerSlot` children and forwards the active signer's context to `MidenProvider`. Users switch signers at runtime via `useMultiSigner().connectSigner(name)`. Single-signer apps can skip `MultiSignerProvider` entirely — a signer provider directly above `MidenProvider` still works. + +Built-in signer packages: `@miden-sdk/use-miden-para-react`, `@miden-sdk/miden-turnkey-react`, `@miden-sdk/miden-wallet-adapter-react`. + +## Configuration + +```tsx + +``` + +The provider also accepts `loadingComponent` and `errorComponent` props for customizing the WASM initialization UI. diff --git a/docs/builder/client/react-client/examples.md b/docs/builder/client/react-client/examples.md new file mode 100644 index 00000000..1feb84f8 --- /dev/null +++ b/docs/builder/client/react-client/examples.md @@ -0,0 +1,49 @@ +--- +title: Examples +sidebar_position: 6 +--- + +# Examples + +Code examples for common React SDK patterns, organized by topic. + +## Tutorials + +For guided walkthroughs, see the [Getting started](./get-started/index.md) tutorials: + +- [Set up the provider](./get-started/setup-provider.md) +- [Create a wallet](./get-started/create-wallet.md) +- [Send and receive tokens](./get-started/send-receive.md) +- [External signer](./get-started/external-signer.md) + +## Library reference examples + +Each library reference page contains code examples for its topic: + +### Provider and configuration + +- [MidenProvider setup and useMiden()](./library/provider.md) + +### Account operations + +- [Listing accounts, getting details, creating wallets and faucets](./library/accounts.md) + +### Transaction operations + +- [Sending, consuming, minting, swapping, and custom transactions](./library/transactions.md) + +### Note operations + +- [Listing notes, filtering, and real-time note streaming](./library/notes.md) + +### Sync and waiting + +- [Sync state, waiting for commits and notes, session accounts](./library/sync.md) + +### Signer integration + +- [External signer setup, useSigner, custom signer providers](./library/signers.md) + +### Utilities + +- [Amount formatting, note summaries, attachments, error handling](./library/utilities.md) diff --git a/docs/builder/client/react-client/features.md b/docs/builder/client/react-client/features.md new file mode 100644 index 00000000..2d236fe6 --- /dev/null +++ b/docs/builder/client/react-client/features.md @@ -0,0 +1,36 @@ +--- +title: Features +sidebar_position: 2 +--- + +# Features + +The Miden React SDK provides a complete toolkit for building React applications on the Miden rollup. + +### Query hooks + +Read blockchain state with auto-refreshing hooks that update after every sync: `useAccounts`, `useAccount`, `useNotes`, `useNoteStream`, `useSyncState`, `useTransactionHistory`, and `useAssetMetadata`. + +### Mutation hooks + +Build and submit transactions through hooks that manage the full execute → prove → submit lifecycle with built-in loading stages and error handling: `useSend`, `useMultiSend`, `useConsume`, `useMint`, `useSwap`, `useCreateWallet`, `useCreateFaucet`, and `useTransaction`. + +### Automatic state management + +A Zustand store manages all client state — accounts, notes, sync progress, asset metadata — and re-renders components efficiently when data changes. Background auto-sync keeps state fresh (configurable interval, default 15 seconds). + +### Transaction staging + +Every mutation hook exposes a `stage` property that tracks progress through `"idle"` → `"executing"` → `"proving"` → `"submitting"` → `"complete"`, enabling fine-grained UI feedback during long-running operations. + +### External signer integration + +First-class support for third-party wallet providers (Para, Turnkey, MidenFi) through a `SignerContext` that plugs into the provider tree. The SDK handles keystore delegation, account binding, and IndexedDB isolation automatically. + +### WASM concurrency safety + +The SDK serializes all WASM operations through an `AsyncLock` and `runExclusive()` pattern, preventing "recursive use of an object detected" errors that occur when multiple React components access the WASM bridge concurrently. + +### Browser-native + +Like the [TypeScript SDK](../web-client/index.md), all computation (proving, syncing, compilation) runs in a Web Worker off the main thread, keeping the React render loop responsive. diff --git a/docs/builder/client/react-client/get-started/_category_.yml b/docs/builder/client/react-client/get-started/_category_.yml new file mode 100644 index 00000000..c8bcefa2 --- /dev/null +++ b/docs/builder/client/react-client/get-started/_category_.yml @@ -0,0 +1,3 @@ +label: Getting Started +position: 3 +collapsed: true diff --git a/docs/builder/client/react-client/get-started/create-wallet.md b/docs/builder/client/react-client/get-started/create-wallet.md new file mode 100644 index 00000000..851379a8 --- /dev/null +++ b/docs/builder/client/react-client/get-started/create-wallet.md @@ -0,0 +1,110 @@ +--- +title: Create a wallet +sidebar_position: 2 +--- + +# Create a wallet + +In this tutorial, you'll create a Miden wallet, request tokens from the public faucet, and display the balance — all through React hooks. + +:::info Prerequisites +Complete the [provider setup](./setup-provider.md) first. +::: + +## 1. Create an account + +Use the `useCreateWallet` hook: + +```tsx +import { useCreateWallet, useAccounts } from "@miden-sdk/react-sdk"; + +function CreateWallet() { + const { createWallet, wallet, isCreating, error } = useCreateWallet(); + const { wallets } = useAccounts(); + + if (wallets.length > 0) { + return

; + } + + return ( +
+ + {wallet &&
Created: {wallet.id().toString()}
} + {error &&
Error: {error.message}
} +
+ ); +} +``` + +## 2. Request tokens from the faucet + +1. Copy the account ID displayed after creation. +2. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). +3. Paste the account ID and click **Send Public Note**. + +:::tip +Use **Send Public Note** — public notes are discoverable via sync, so no file download is needed. +::: + +## 3. Consume the tokens + +After the faucet sends the note, the next auto-sync cycle will discover it. Use `useNotes` and `useConsume` to claim the tokens: + +```tsx +import { useNotes, useConsume } from "@miden-sdk/react-sdk"; + +function ClaimNotes({ accountId }: { accountId: string }) { + const { consumableNoteSummaries } = useNotes({ accountId }); + const { consume, isLoading, stage } = useConsume(); + + if (consumableNoteSummaries.length === 0) { + return
No notes to claim. Waiting for sync...
; + } + + const handleClaim = () => { + const noteIds = consumableNoteSummaries.map((s) => s.id); + consume({ accountId, notes: noteIds }); + }; + + return ( +
+
{consumableNoteSummaries.length} note(s) available
+ +
+ ); +} +``` + +## 4. Display the balance + +Use `useAccount` to read the wallet's assets: + +```tsx +import { useAccount, formatAssetAmount } from "@miden-sdk/react-sdk"; + +function Balance({ accountId }: { accountId: string }) { + const { account, assets, isLoading } = useAccount(accountId); + + if (isLoading) return
Loading...
; + if (!account) return
Account not found
; + + return ( +
+
Account: {account.bech32id()}
+ {assets.map((asset) => ( +
+ {asset.symbol ?? asset.assetId}: {formatAssetAmount(asset.amount, asset.decimals)} +
+ ))} +
+ ); +} +``` + +## Next steps + +- [Send and receive tokens](./send-receive.md) — transfer tokens between accounts diff --git a/docs/builder/client/react-client/get-started/external-signer.md b/docs/builder/client/react-client/get-started/external-signer.md new file mode 100644 index 00000000..014f828e --- /dev/null +++ b/docs/builder/client/react-client/get-started/external-signer.md @@ -0,0 +1,100 @@ +--- +title: External signer +sidebar_position: 4 +--- + +# External signer + +The React SDK supports third-party wallet providers through a `SignerContext`. When a signer is present, the SDK delegates key management and transaction signing to the external provider instead of the local keystore. + +## Built-in signer packages + +| Package | Provider | Auth method | +|---------|----------|-------------| +| `@miden-sdk/para` | Para | EVM wallets | +| `@miden-sdk/miden-turnkey-react` | Turnkey | Passkey authentication | +| `@miden-sdk/wallet-adapter-react` | MidenFi | Native wallet adapter | + +## Using a built-in signer + +Wrap `MidenProvider` with the signer provider: + +```tsx +import { MidenProvider } from "@miden-sdk/react-sdk"; +import { ParaSignerProvider } from "@miden-sdk/para"; + +function App() { + return ( + + + + + + ); +} +``` + +Inside your components, use the `useSigner` hook to access connection state: + +```tsx +import { useSigner } from "@miden-sdk/react-sdk"; + +function ConnectButton() { + const { isConnected, connect, disconnect, name } = useSigner(); + + if (isConnected) { + return ; + } + + return ; +} +``` + +All other hooks (`useAccounts`, `useSend`, etc.) work the same way — the SDK routes signing through the signer automatically. + +## Custom signer + +To integrate a wallet provider that doesn't have a built-in package, provide a `SignerContext` directly: + +```tsx +import { MidenProvider, SignerContext } from "@miden-sdk/react-sdk"; + +function App() { + const signerValue = { + name: "MyWallet", + storeName: `mywallet_${userAddress}`, + isConnected: true, + accountConfig: { + publicKeyCommitment: userPublicKeyCommitment, + storageMode: "private", + accountType: "RegularAccountUpdatableCode", + }, + signCb: async (pubKey, signingInputs) => { + // Route to your signing backend + return signature; + }, + connect: async () => { /* auth flow */ }, + disconnect: async () => { /* logout */ }, + }; + + return ( + + + + + + ); +} +``` + +Key properties: + +| Property | Description | +|----------|-------------| +| `signCb` | Async function that receives a public key and signing inputs, returns a signature | +| `accountConfig` | Account creation parameters (storage mode, type, optional custom components) | +| `storeName` | IndexedDB isolation key — use a unique value per user/wallet to prevent data collisions | + +## Next steps + +- [Library reference](../library/index.md) — detailed hooks and API documentation diff --git a/docs/builder/client/react-client/get-started/index.md b/docs/builder/client/react-client/get-started/index.md new file mode 100644 index 00000000..683d4570 --- /dev/null +++ b/docs/builder/client/react-client/get-started/index.md @@ -0,0 +1,28 @@ +--- +title: Getting started +sidebar_position: 0 +--- + +# Getting started + +This section walks you through building a basic Miden wallet interface with the React SDK — from provider setup to sending tokens. + +By the end of these tutorials, you will have: + +- Set up `MidenProvider` and connected to the Miden testnet +- Created a wallet and displayed its balance +- Sent and received tokens between accounts +- Integrated an external wallet signer + +## Prerequisites + +- [Node.js](https://nodejs.org/) v18 or later +- React 18+ project (e.g., via `create-react-app`, Vite, or Next.js) +- The SDK installed — see [Installation](../install.md) + +## Tutorials + +1. [Set up the provider](./setup-provider.md) — configure `MidenProvider` and verify the connection +2. [Create a wallet](./create-wallet.md) — create an account, request testnet tokens, and display the balance +3. [Send and receive tokens](./send-receive.md) — transfer tokens between accounts using hooks +4. [External signer](./external-signer.md) — integrate a third-party wallet provider diff --git a/docs/builder/client/react-client/get-started/send-receive.md b/docs/builder/client/react-client/get-started/send-receive.md new file mode 100644 index 00000000..b8ba2b9b --- /dev/null +++ b/docs/builder/client/react-client/get-started/send-receive.md @@ -0,0 +1,117 @@ +--- +title: Send and receive tokens +sidebar_position: 3 +--- + +# Send and receive tokens + +In this tutorial, you'll send tokens between two accounts using the `useSend` and `useConsume` hooks. + +:::info Prerequisites +- Complete the [Create a wallet](./create-wallet.md) tutorial first. +- You should have a funded wallet. +::: + +## 1. Create a second account + +```tsx +import { useCreateWallet } from "@miden-sdk/react-sdk"; + +function CreateRecipient() { + const { createWallet, wallet, isCreating } = useCreateWallet(); + + return ( +
+ + {wallet &&
Recipient: {wallet.id().toString()}
} +
+ ); +} +``` + +## 2. Send tokens + +Use the `useSend` hook. The `stage` property gives real-time feedback on the transaction lifecycle: + +```tsx +import { useSend } from "@miden-sdk/react-sdk"; + +function SendForm({ from, faucetId }: { from: string; faucetId: string }) { + const { send, isLoading, stage, error, result } = useSend(); + const [to, setTo] = useState(""); + const [amount, setAmount] = useState(""); + + const handleSend = () => { + send({ + from, + to, + assetId: faucetId, + amount: BigInt(amount), + noteType: "public", + }); + }; + + return ( +
+ setTo(e.target.value)} /> + setAmount(e.target.value)} /> + + {result &&
Transaction: {result.txId.toString()}
} + {error &&
Error: {error.message}
} +
+ ); +} +``` + +## 3. Receive and consume on the recipient + +After the next sync cycle, the public note appears for the recipient. Consume it: + +```tsx +import { useNotes, useConsume, formatNoteSummary } from "@miden-sdk/react-sdk"; + +function ReceiveNotes({ accountId }: { accountId: string }) { + const { consumableNoteSummaries } = useNotes({ accountId }); + const { consume, isLoading, stage } = useConsume(); + + return ( +
+ {consumableNoteSummaries.map((note) => ( +
+ {formatNoteSummary(note)} + +
+ ))} +
+ ); +} +``` + +## Private transfers + +To send a private note instead, set `noteType: "private"`: + +```tsx +await send({ + from: senderAccountId, + to: recipientAccountId, + assetId: faucetId, + amount: 50n, + noteType: "private", +}); +``` + +For cross-client private transfers, the note transport network delivers the note to the recipient. See the [TypeScript private transfer tutorial](../../web-client/get-started/p2p-private.md) for details on the underlying flow. + +## Next steps + +- [External signer](./external-signer.md) — integrate a third-party wallet provider diff --git a/docs/builder/client/react-client/get-started/setup-provider.md b/docs/builder/client/react-client/get-started/setup-provider.md new file mode 100644 index 00000000..8990b33e --- /dev/null +++ b/docs/builder/client/react-client/get-started/setup-provider.md @@ -0,0 +1,63 @@ +--- +title: Set up the provider +sidebar_position: 1 +--- + +# Set up the provider + +Every React app using the Miden SDK needs a `MidenProvider` at the root. It initializes the WASM client, manages background sync, and provides context to all hooks. + +## 1. Wrap your app + +```tsx +import { MidenProvider } from "@miden-sdk/react-sdk"; + +function App() { + return ( + Loading Miden SDK...} + errorComponent={(error) =>
Failed to initialize: {error.message}
} + > + +
+ ); +} +``` + +The provider initializes the WASM binary, creates a Web Worker, and connects to the Miden testnet. Until initialization completes, `loadingComponent` is shown. + +## 2. Check the connection + +Use `useMiden()` inside any child component to access the client state: + +```tsx +import { useMiden, useSyncState } from "@miden-sdk/react-sdk"; + +function Status() { + const { isReady } = useMiden(); + const { syncHeight } = useSyncState(); + + if (!isReady) return null; + + return
Connected — synced to block {syncHeight}
; +} +``` + +## 3. Configuration options + +```tsx + +``` + +:::tip +Auto-sync runs in the background at the configured interval. You can also trigger a manual sync with the `sync()` function from `useSyncState()` or `useMiden()`. +::: + +## Next steps + +- [Create a wallet](./create-wallet.md) — create an account and request testnet tokens diff --git a/docs/builder/client/react-client/index.md b/docs/builder/client/react-client/index.md new file mode 100644 index 00000000..ee3be5fa --- /dev/null +++ b/docs/builder/client/react-client/index.md @@ -0,0 +1,14 @@ +--- +title: React +--- + +# Overview + +The Miden React SDK (`@miden-sdk/react-sdk`) provides React hooks, context providers, and Zustand-based state management for building Miden-powered applications. It follows conventions established by libraries like TanStack Query and wagmi — query hooks for reading data, mutation hooks for transactions, and a provider for client lifecycle. + +- [Installation](./install.md) — install the SDK and peer dependencies +- [Features](./features.md) — what the SDK provides +- [Getting started](./get-started/index.md) — step-by-step tutorials +- [Design](./design.md) — architecture and patterns +- [Library reference](./library/index.md) — detailed hooks and API documentation +- [Examples](./examples.md) — practical code examples diff --git a/docs/builder/client/react-client/install.md b/docs/builder/client/react-client/install.md new file mode 100644 index 00000000..089bc040 --- /dev/null +++ b/docs/builder/client/react-client/install.md @@ -0,0 +1,49 @@ +--- +title: Installation +sidebar_position: 1 +--- + +# Installation + +## Prerequisites + +- [Node.js](https://nodejs.org/) v18 or later +- React 18+ (`react` and `react-dom`) +- A WASM-capable browser (Chrome, Firefox, Safari, Edge) + +## Install the SDK + +```bash +npm install @miden-sdk/react-sdk @miden-sdk/wasm-bridge +# or +yarn add @miden-sdk/react-sdk @miden-sdk/wasm-bridge +``` + +`@miden-sdk/wasm-bridge` is a peer dependency that provides the WASM bridge and core bindings. + +## Verify the installation + +Wrap your app in `MidenProvider` and check that initialization succeeds: + +```tsx +import { MidenProvider, useMiden } from "@miden-sdk/react-sdk"; + +function Status() { + const { isReady, isInitializing, error } = useMiden(); + + if (isInitializing) return
Initializing WASM...
; + if (error) return
Error: {error.message}
; + if (isReady) return
Miden SDK ready
; + return null; +} + +function App() { + return ( + + + + ); +} +``` + +If you see "Miden SDK ready", you're good to go. diff --git a/docs/builder/client/react-client/library/_category_.yml b/docs/builder/client/react-client/library/_category_.yml new file mode 100644 index 00000000..57175926 --- /dev/null +++ b/docs/builder/client/react-client/library/_category_.yml @@ -0,0 +1,3 @@ +label: Library +position: 5 +collapsed: true diff --git a/docs/builder/client/react-client/library/accounts.md b/docs/builder/client/react-client/library/accounts.md new file mode 100644 index 00000000..1e8f8465 --- /dev/null +++ b/docs/builder/client/react-client/library/accounts.md @@ -0,0 +1,145 @@ +--- +title: Accounts +sidebar_position: 2 +--- + +# Accounts + +## useAccounts() + +List all tracked accounts, automatically categorized into wallets and faucets. + +```tsx +import { useAccounts } from "@miden-sdk/react-sdk"; + +function AccountList() { + const { accounts, wallets, faucets, isLoading, error, refetch } = useAccounts(); + + return ( +
+

Wallets ({wallets.length})

+ {wallets.map((w) => ( +
{w.id().toString()}
+ ))} +

Faucets ({faucets.length})

+ {faucets.map((f) => ( +
{f.id().toString()}
+ ))} +
+ ); +} +``` + +Auto-fetches on mount and refreshes after each sync cycle. + +## useAccount(accountId) + +Get full account details including vault assets enriched with metadata (symbol, decimals). + +```tsx +import { useAccount, formatAssetAmount } from "@miden-sdk/react-sdk"; + +function AccountDetails({ accountId }: { accountId: string }) { + const { account, assets, isLoading, getBalance } = useAccount(accountId); + + if (isLoading) return
Loading...
; + if (!account) return
Not found
; + + return ( +
+
Address: {account.bech32id()}
+
Nonce: {account.nonce().toString()}
+ {assets.map((asset) => ( +
+ {asset.symbol ?? asset.assetId}: {formatAssetAmount(asset.amount, asset.decimals)} +
+ ))} +
+ ); +} +``` + +### Return value + +| Property | Type | Description | +|----------|------|-------------| +| `account` | `Account \| null` | Full account object | +| `assets` | `AssetWithMetadata[]` | Vault assets with symbol and decimals | +| `isLoading` | `boolean` | Loading state | +| `error` | `Error \| null` | Error state | +| `refetch` | `() => void` | Manual refresh | +| `getBalance` | `(assetId: string) => bigint` | Get balance for a specific asset | + +## useCreateWallet() + +Create a new wallet account. + +```tsx +import { useCreateWallet } from "@miden-sdk/react-sdk"; + +const { createWallet, wallet, isCreating, error, reset } = useCreateWallet(); + +const account = await createWallet({ + storageMode: "private", // "private" | "public" (default: "private") + mutable: true, // Code updatable (default: true) + authScheme: AuthScheme.AuthRpoFalcon512, // default + initSeed: new Uint8Array(32), // Optional deterministic seed +}); +``` + +## useCreateFaucet() + +Create a new faucet account for minting tokens. + +```tsx +import { useCreateFaucet } from "@miden-sdk/react-sdk"; + +const { createFaucet, faucet, isCreating, error, reset } = useCreateFaucet(); + +const account = await createFaucet({ + tokenSymbol: "TEST", + decimals: 8, // default: 8 + maxSupply: 10_000_000n, + storageMode: "public", // default for faucets +}); +``` + +## useImportAccount() + +Import an account by file, ID, or seed. + +```tsx +import { useImportAccount } from "@miden-sdk/react-sdk"; + +const { importAccount, account, isImporting, error, reset } = useImportAccount(); + +// Import by file +await importAccount({ type: "file", file: accountFile }); + +// Import by ID (public accounts only) +await importAccount({ type: "id", accountId: "0x1234..." }); + +// Import by seed (public accounts only) +await importAccount({ type: "seed", seed: initSeed, mutable: true }); +``` + +## useAssetMetadata(assetIds) + +Fetch token metadata (symbol, decimals) for a list of faucet IDs. Results are cached globally. + +```tsx +import { useAssetMetadata } from "@miden-sdk/react-sdk"; + +function TokenInfo({ assetIds }: { assetIds: string[] }) { + const { assetMetadata } = useAssetMetadata(assetIds); + + return ( +
+ {assetIds.map((id) => { + const meta = assetMetadata.get(id); + return
{meta?.symbol ?? id} ({meta?.decimals ?? "?"} decimals)
; + })} +
+ ); +} +``` diff --git a/docs/builder/client/react-client/library/index.md b/docs/builder/client/react-client/library/index.md new file mode 100644 index 00000000..18019827 --- /dev/null +++ b/docs/builder/client/react-client/library/index.md @@ -0,0 +1,59 @@ +--- +title: Library +sidebar_position: 0 +--- + +# Library + +The React SDK provides hooks organized into two categories: **query hooks** that read state, and **mutation hooks** that execute transactions. Both integrate with the Zustand store for automatic re-rendering. + +## Query hooks + +| Hook | Purpose | Reference | +|------|---------|-----------| +| `useAccounts()` | List all accounts, categorized into wallets and faucets | [Accounts](./accounts.md) | +| `useAccount(id)` | Get full account details, assets, and balance | [Accounts](./accounts.md) | +| `useNotes(filter?)` | List and filter notes with consumability info | [Notes](./notes.md) | +| `useNoteStream(options?)` | Temporal note tracking with built-in filtering | [Notes](./notes.md) | +| `useSyncState()` | Sync progress, block height, manual sync trigger | [Sync](./sync.md) | +| `useTransactionHistory(options?)` | Transaction history with status tracking | [Transactions](./transactions.md) | +| `useAssetMetadata(assetIds)` | Token metadata (symbol, decimals) by faucet ID | [Accounts](./accounts.md) | + +## Mutation hooks + +| Hook | Purpose | Reference | +|------|---------|-----------| +| `useCreateWallet()` | Create a new wallet account | [Accounts](./accounts.md) | +| `useCreateFaucet()` | Create a new faucet account | [Accounts](./accounts.md) | +| `useImportAccount()` | Import an account by file, ID, or seed | [Accounts](./accounts.md) | +| `useSend()` | Send tokens to another account | [Transactions](./transactions.md) | +| `useMultiSend()` | Send tokens to multiple recipients | [Transactions](./transactions.md) | +| `useInternalTransfer()` | Transfer between accounts in the same client | [Transactions](./transactions.md) | +| `useConsume()` | Consume specific notes | [Transactions](./transactions.md) | +| `useMint()` | Mint tokens from a faucet | [Transactions](./transactions.md) | +| `useSwap()` | Swap tokens between two faucets | [Transactions](./transactions.md) | +| `useTransaction()` | Execute an arbitrary transaction request | [Transactions](./transactions.md) | +| `useWaitForCommit()` | Wait for a transaction to be committed | [Sync](./sync.md) | +| `useWaitForNotes()` | Wait for notes to arrive for an account | [Sync](./sync.md) | + +## Provider and context + +| Hook/Component | Purpose | Reference | +|----------------|---------|-----------| +| `MidenProvider` | Root provider — client lifecycle, auto-sync, WASM access | [Provider](./provider.md) | +| `useMiden()` | Access client, sync function, `runExclusive()` | [Provider](./provider.md) | +| `useSigner()` | Access external signer connection state | [Signers](./signers.md) | +| `useMultiSigner()` | List, connect, and switch between multiple signers | [Signers](./signers.md) | +| `MultiSignerProvider` | Registry for multiple signer providers | [Signers](./signers.md) | +| `SignerSlot` | Registers a signer into the multi-signer registry | [Signers](./signers.md) | +| `SignerContext` | Context for custom signer integration | [Signers](./signers.md) | + +## Utilities + +| Utility | Purpose | Reference | +|---------|---------|-----------| +| `formatAssetAmount()` / `parseAssetAmount()` | Amount formatting and parsing | [Utilities](./utilities.md) | +| `getNoteSummary()` / `formatNoteSummary()` | Note summary extraction and display | [Utilities](./utilities.md) | +| `readNoteAttachment()` / `createNoteAttachment()` | Note attachment encoding/decoding | [Utilities](./utilities.md) | +| `normalizeAccountId()` / `accountIdsEqual()` | Account ID normalization and comparison | [Utilities](./utilities.md) | +| `MidenError` / `wrapWasmError()` | Typed error handling | [Utilities](./utilities.md) | diff --git a/docs/builder/client/react-client/library/notes.md b/docs/builder/client/react-client/library/notes.md new file mode 100644 index 00000000..9a403358 --- /dev/null +++ b/docs/builder/client/react-client/library/notes.md @@ -0,0 +1,102 @@ +--- +title: Notes +sidebar_position: 4 +--- + +# Notes + +## useNotes(options?) + +List and filter notes with consumability information. + +```tsx +import { useNotes, formatNoteSummary } from "@miden-sdk/react-sdk"; + +function NoteList({ accountId }: { accountId: string }) { + const { + notes, // All input notes + consumableNotes, // Notes ready to consume + noteSummaries, // Enriched with sender + assets + consumableNoteSummaries, // Consumable notes with summaries + isLoading, + error, + refetch, + } = useNotes({ accountId }); + + return ( +
+ {consumableNoteSummaries.map((summary) => ( +
{formatNoteSummary(summary)}
+ ))} +
+ ); +} +``` + +### Filter options + +| Property | Type | Description | +|----------|------|-------------| +| `status` | `string` | `"all"` \| `"committed"` \| `"consumed"` \| `"expected"` \| `"processing"` | +| `accountId` | `string` | Filter consumable notes for a specific account | +| `sender` | `string` | Filter by sender account | +| `excludeIds` | `Set` | Exclude specific note IDs | + +Smart refetch: the hook only updates the Zustand store if note IDs actually changed, preventing unnecessary re-renders. + +## useNoteStream(options?) + +Temporal note tracking with built-in filtering. Designed for real-time UIs (e.g., payment notifications, trading interfaces) where you need to track when notes arrive and handle them progressively. + +```tsx +import { useNoteStream } from "@miden-sdk/react-sdk"; + +function NotificationFeed({ accountId }: { accountId: string }) { + const { + notes, // StreamedNote[] matching all filters + latest, // Most recent note + markHandled, // Exclude noteId from future renders + markAllHandled, // Mark all current notes as handled + snapshot, // Get { ids: Set, timestamp } for phase transitions + isLoading, + } = useNoteStream({ + status: "committed", + sender: faucetId, + since: Date.now() - 60_000, // Last minute only + amountFilter: (amount) => amount > 0n, + }); + + return ( +
+ {notes.map((note) => ( +
+ {note.amount.toString()} from {note.sender} + +
+ ))} +
+ ); +} +``` + +### StreamedNote + +| Property | Type | Description | +|----------|------|-------------| +| `id` | `string` | Note ID | +| `sender` | `string` | Sender address (bech32) | +| `amount` | `bigint` | Primary fungible asset amount | +| `assets` | `NoteAsset[]` | All assets in the note | +| `record` | `InputNoteRecord` | Full note record | +| `firstSeenAt` | `number` | When the SDK first observed this note (ms) | +| `attachment` | `bigint[] \| null` | Pre-decoded note attachment | + +### Options + +| Property | Type | Description | +|----------|------|-------------| +| `status` | `string` | Filter by note status | +| `sender` | `string` | Filter by sender account | +| `since` | `number` | Only notes seen after this timestamp (ms) | +| `excludeIds` | `Set` | Exclude specific note IDs | +| `amountFilter` | `(amount: bigint) => boolean` | Custom amount filter | diff --git a/docs/builder/client/react-client/library/provider.md b/docs/builder/client/react-client/library/provider.md new file mode 100644 index 00000000..d67e86c5 --- /dev/null +++ b/docs/builder/client/react-client/library/provider.md @@ -0,0 +1,90 @@ +--- +title: Provider +sidebar_position: 1 +--- + +# Provider + +## MidenProvider + +The root provider that initializes the WASM client and provides context to all hooks. + +```tsx +import { MidenProvider } from "@miden-sdk/react-sdk"; + +Loading...} + errorComponent={(error) =>
Error: {error.message}
} +> + +
+``` + +### Props + +| Prop | Type | Description | +|------|------|-------------| +| `config` | `MidenConfig` | Client configuration (see below) | +| `loadingComponent` | `ReactNode` | Shown during WASM initialization | +| `errorComponent` | `ReactNode \| (error: Error) => ReactNode` | Shown if initialization fails | +| `children` | `ReactNode` | Your application | + +### MidenConfig + +| Property | Type | Default | Description | +|----------|------|---------|-------------| +| `rpcUrl` | `string` | — | `"devnet"` \| `"testnet"` \| `"localhost"` \| custom URL | +| `autoSyncInterval` | `number` | `15000` | Sync interval in ms. Set `0` to disable. | +| `prover` | `string` | `"local"` | `"local"` \| `"devnet"` \| `"testnet"` \| custom URL | +| `proverTimeoutMs` | `number` | — | Timeout for remote prover requests | +| `noteTransportUrl` | `string` | — | Note transport network endpoint | +| `seed` | `Uint8Array` | — | 32-byte seed for deterministic RNG | + +## useMiden() + +Access the client instance and core utilities. + +```tsx +import { useMiden } from "@miden-sdk/react-sdk"; + +function MyComponent() { + const { + client, // WebClient instance (null until ready) + isReady, // Client fully initialized + isInitializing, // Initialization in progress + error, // Initialization error + sync, // Manual sync function + runExclusive, // Execute WASM operations exclusively + } = useMiden(); + + // Use runExclusive for direct WASM access + const doSomething = async () => { + await runExclusive(async () => { + const account = await client.getAccount(accountId); + // WASM pointers only valid inside this callback + }); + }; +} +``` + +### `runExclusive(fn)` + +Queues a function to run with exclusive WASM access. Prevents concurrent WASM calls that would cause errors. All mutation hooks use this internally. + +```tsx +const { runExclusive } = useMiden(); + +// Safe — operations are serialized +await runExclusive(async () => { + await client.someWasmOperation(); +}); +``` + +:::warning +WASM object pointers (like `AccountId`, `NoteId`) are only valid within the `runExclusive` callback. Convert them to strings or numbers before returning. +::: diff --git a/docs/builder/client/react-client/library/signers.md b/docs/builder/client/react-client/library/signers.md new file mode 100644 index 00000000..f6ddf4af --- /dev/null +++ b/docs/builder/client/react-client/library/signers.md @@ -0,0 +1,169 @@ +--- +title: Signers +sidebar_position: 6 +--- + +# Signers + +The SDK supports external wallet providers through a `SignerContext` that plugs into the provider tree above `MidenProvider`. + +## useSigner() + +Access the current signer's connection state. + +```tsx +import { useSigner } from "@miden-sdk/react-sdk"; + +function WalletButton() { + const { isConnected, connect, disconnect, name } = useSigner(); + + if (isConnected) { + return ; + } + + return ; +} +``` + +### Return value + +| Property | Type | Description | +|----------|------|-------------| +| `isConnected` | `boolean` | Whether the signer is connected | +| `connect` | `() => Promise` | Trigger the signer's auth flow | +| `disconnect` | `() => Promise` | Disconnect the signer | +| `name` | `string` | Display name (e.g., "Para", "Turnkey") | + +## SignerContext + +The context interface that signer providers must implement. + +```tsx +interface SignerContextValue { + signCb: (pubKey: Uint8Array, signingInputs: Uint8Array) => Promise; + accountConfig: SignerAccountConfig; + storeName: string; + name: string; + isConnected: boolean; + connect: () => Promise; + disconnect: () => Promise; +} +``` + +| Property | Description | +|----------|-------------| +| `signCb` | Signing function — receives public key and signing inputs, returns signature bytes | +| `accountConfig` | Account creation params: `publicKeyCommitment`, `storageMode`, `accountType`, optional `customComponents` | +| `storeName` | IndexedDB isolation key — must be unique per user/wallet to prevent data collisions | +| `name` | Display name shown in UI | + +## Built-in signer packages + +| Package | Provider | Usage | +|---------|----------|-------| +| `@miden-sdk/use-miden-para-react` | Para (EVM wallets) | `` | +| `@miden-sdk/miden-turnkey-react` | Turnkey (passkeys) | `` | +| `@miden-sdk/miden-wallet-adapter-react` | MidenFi (native) | `` | + +## How it works + +When `MidenProvider` detects a `SignerContext` above it: + +1. Creates the client with `WebClient.createClientWithExternalKeystore()` instead of the default constructor +2. Routes all signing operations to the signer's `signCb` +3. Isolates IndexedDB storage using the signer's `storeName` +4. Binds account creation to the signer's `accountConfig` + +All hooks (`useCreateWallet`, `useSend`, etc.) work identically regardless of whether a local or external keystore is used. + +## Multi-signer support + +For dapps that support multiple wallet providers, wrap them with `MultiSignerProvider` and place a `SignerSlot` inside each one. Users can then switch between signers at runtime. + +### Setup + +```tsx +import { + MidenProvider, + MultiSignerProvider, + SignerSlot, +} from "@miden-sdk/react-sdk"; +import { ParaSignerProvider } from "@miden-sdk/use-miden-para-react"; +import { TurnkeySignerProvider } from "@miden-sdk/miden-turnkey-react"; +import { MidenFiSignerProvider } from "@miden-sdk/miden-wallet-adapter-react"; + +function App() { + return ( + + + + + + + + + + + + + + + ); +} +``` + +`MultiSignerProvider` is optional — single-signer apps continue to work with a signer provider directly above `MidenProvider`. + +### useMultiSigner() + +List registered signers and switch between them. + +```tsx +import { useMultiSigner } from "@miden-sdk/react-sdk"; + +function SignerSelector() { + const multiSigner = useMultiSigner(); + + return ( +
+ {multiSigner?.signers.map((s) => ( + + ))} + +
+ ); +} +``` + +### Return value + +`useMultiSigner()` returns `null` when used outside a `MultiSignerProvider`. + +| Property | Type | Description | +|----------|------|-------------| +| `signers` | `SignerContextValue[]` | All registered signer providers | +| `activeSigner` | `SignerContextValue \| null` | The currently connected signer, or `null` for local keystore mode | +| `connectSigner` | `(name: string) => Promise` | Switch to a signer by name — disconnects the previous signer and calls `connect()` on the new one | +| `disconnectSigner` | `() => Promise` | Disconnect the active signer and revert to local keystore mode | + +### SignerSlot + +A render-less component that registers its nearest ancestor's `SignerContext` into the `MultiSignerProvider` registry. Place one inside each signer provider: + +```tsx + + + +``` + +### How it works + +1. Each `SignerSlot` registers its parent signer into a shared registry +2. `MultiSignerProvider` forwards the active signer's `SignerContext` down to `MidenProvider` +3. When `connectSigner(name)` is called, the previous signer is disconnected and the new one is connected +4. When `disconnectSigner()` is called, `MidenProvider` sees `null` and reverts to local keystore mode +5. `MidenProvider` reinitializes the client with the appropriate keystore whenever the active signer changes diff --git a/docs/builder/client/react-client/library/sync.md b/docs/builder/client/react-client/library/sync.md new file mode 100644 index 00000000..052cb3c4 --- /dev/null +++ b/docs/builder/client/react-client/library/sync.md @@ -0,0 +1,95 @@ +--- +title: Sync +sidebar_position: 5 +--- + +# Sync + +## useSyncState() + +Access sync progress and trigger manual synchronization. + +```tsx +import { useSyncState } from "@miden-sdk/react-sdk"; + +function SyncStatus() { + const { syncHeight, isSyncing, lastSyncTime, error, sync } = useSyncState(); + + return ( +
+
Block: {syncHeight}
+
Last sync: {lastSyncTime ? new Date(lastSyncTime).toLocaleTimeString() : "never"}
+ + {error &&
Sync error: {error.message}
} +
+ ); +} +``` + +:::tip +Auto-sync runs in the background at the interval configured in `MidenProvider` (default: 15 seconds). Use `sync()` for manual triggers. +::: + +## useWaitForCommit() + +Wait for a transaction to be committed on chain. Polls until the transaction status changes or times out. + +```tsx +import { useWaitForCommit } from "@miden-sdk/react-sdk"; + +const { mutate: waitForCommit, isLoading, error } = useWaitForCommit(); + +await waitForCommit({ + transactionId: txId, + timeoutMs: 10000, // default: 10000 + intervalMs: 1000, // default: 1000 +}); +``` + +## useWaitForNotes() + +Wait for a minimum number of consumable notes to arrive for an account. Useful after requesting faucet tokens or receiving a transfer. + +```tsx +import { useWaitForNotes } from "@miden-sdk/react-sdk"; + +const { mutate: waitForNotes, isLoading, error } = useWaitForNotes(); + +await waitForNotes({ + accountId: walletId, + minCount: 1, // default: 1 + timeoutMs: 10000, // default: 10000 + intervalMs: 1000, // default: 1000 +}); +``` + +## useSessionAccount() + +Manage a temporary session wallet lifecycle: create → fund → consume → ready. Persists state in localStorage for recovery across page reloads. + +```tsx +import { useSessionAccount } from "@miden-sdk/react-sdk"; + +const { + initialize, // Start the create → fund → consume flow + sessionAccountId, // bech32 ID when ready, null otherwise + isReady, // true when funded and ready to use + step, // "idle" | "creating" | "funding" | "consuming" | "ready" + error, + reset, +} = useSessionAccount({ + fund: async (sessionAccountId) => { + // Your funding logic — e.g., send from main wallet + await send({ from: mainWalletId, to: sessionAccountId, assetId, amount: 100n }); + }, + assetId: faucetId, + pollIntervalMs: 3000, // default: 3000 + maxWaitMs: 60000, // default: 60000 + storagePrefix: "miden-session", // localStorage key prefix +}); + +// Start the session +await initialize(); +``` diff --git a/docs/builder/client/react-client/library/transactions.md b/docs/builder/client/react-client/library/transactions.md new file mode 100644 index 00000000..d81a003e --- /dev/null +++ b/docs/builder/client/react-client/library/transactions.md @@ -0,0 +1,185 @@ +--- +title: Transactions +sidebar_position: 3 +--- + +# Transactions + +All transaction hooks follow the same pattern: they return a mutation function, a `result`, loading state, a `stage` for progress tracking, and an `error`. Transactions auto-sync before executing (unless `skipSync: true`) and refresh the store on completion. + +### Transaction stages + +Every mutation hook exposes a `stage` property: + +`"idle"` → `"executing"` → `"proving"` → `"submitting"` → `"complete"` + +## useSend() + +Send tokens to another account. + +```tsx +import { useSend } from "@miden-sdk/react-sdk"; + +const { send, result, isLoading, stage, error, reset } = useSend(); + +await send({ + from: senderAccountId, + to: recipientAccountId, + assetId: faucetId, + amount: 100n, + noteType: "private", // "private" | "public" (default: "private") + recallHeight: 100, // Optional: block height for reclaim + timelockHeight: 90, // Optional: block height for timelock + attachment: [1n, 2n, 3n], // Optional: arbitrary data payload + skipSync: false, // Skip pre-sync (default: false) + sendAll: false, // Send entire balance (default: false) +}); +``` + +`result` contains `{ txId, note }` on success. + +## useMultiSend() + +Send tokens to multiple recipients in a single transaction. + +```tsx +import { useMultiSend } from "@miden-sdk/react-sdk"; + +const { mutate: multiSend, isLoading, stage, error } = useMultiSend(); + +await multiSend({ + from: senderAccountId, + assetId: faucetId, + recipients: [ + { to: "0xrecipient1...", amount: 50n }, + { to: "0xrecipient2...", amount: 30n, noteType: "public" }, + ], +}); +``` + +## useInternalTransfer() + +Transfer tokens between accounts managed by the same client. + +```tsx +import { useInternalTransfer } from "@miden-sdk/react-sdk"; + +const { mutate: transfer, isLoading, stage, error } = useInternalTransfer(); + +const { createTransactionId, consumeTransactionId, noteId } = await transfer({ + from: senderAccountId, + to: recipientAccountId, + assetId: faucetId, + amount: 100n, +}); +``` + +Also supports chained transfers through multiple accounts: + +```tsx +await transfer({ + from: senderAccountId, + recipients: [account1, account2, account3], // Pass-through chain + assetId: faucetId, + amount: 100n, +}); +``` + +## useConsume() + +Consume specific notes to receive their assets. + +```tsx +import { useConsume } from "@miden-sdk/react-sdk"; + +const { consume, result, isLoading, stage, error, reset } = useConsume(); + +await consume({ + accountId: walletId, + notes: [noteId1, noteId2], // Hex strings, NoteId objects, or InputNoteRecords +}); +``` + +## useMint() + +Mint tokens from a faucet. + +```tsx +import { useMint } from "@miden-sdk/react-sdk"; + +const { mint, result, isLoading, stage, error, reset } = useMint(); + +await mint({ + targetAccountId: recipientId, + faucetId: faucetId, + amount: 1000n, + noteType: "public", // default: "public" +}); +``` + +## useSwap() + +Swap tokens between two faucets. + +```tsx +import { useSwap } from "@miden-sdk/react-sdk"; + +const { swap, result, isLoading, stage, error, reset } = useSwap(); + +await swap({ + accountId: walletId, + offeredFaucetId: faucetA, + offeredAmount: 100n, + requestedFaucetId: faucetB, + requestedAmount: 200n, + noteType: "public", +}); +``` + +## useTransaction() + +Execute an arbitrary `TransactionRequest` — the escape hatch for custom transactions. + +```tsx +import { useTransaction } from "@miden-sdk/react-sdk"; + +const { execute, result, isLoading, stage, error, reset } = useTransaction(); + +// With a static request +await execute({ + accountId: walletId, + request: transactionRequest, +}); + +// With a factory function (receives the client for dynamic building) +await execute({ + accountId: walletId, + request: async (client) => { + // Build request dynamically + return new TransactionRequestBuilder() + .withCustomScript(script) + .build(); + }, +}); +``` + +## useTransactionHistory() + +Query transaction history with optional filtering. + +```tsx +import { useTransactionHistory } from "@miden-sdk/react-sdk"; + +// All transactions +const { records, isLoading } = useTransactionHistory(); + +// Single transaction by ID +const { record, status } = useTransactionHistory({ id: txId }); +// status: "pending" | "committed" | "discarded" + +// Filtered +const { records } = useTransactionHistory({ + filter: TransactionFilter.Uncommitted, + refreshOnSync: true, +}); +``` diff --git a/docs/builder/client/react-client/library/utilities.md b/docs/builder/client/react-client/library/utilities.md new file mode 100644 index 00000000..6e109fc7 --- /dev/null +++ b/docs/builder/client/react-client/library/utilities.md @@ -0,0 +1,114 @@ +--- +title: Utilities +sidebar_position: 7 +--- + +# Utilities + +## Amount formatting + +```tsx +import { formatAssetAmount, parseAssetAmount } from "@miden-sdk/react-sdk"; + +// bigint + decimals → display string +formatAssetAmount(1000000n, 8); // "0.01" +formatAssetAmount(100000000n, 8); // "1" + +// display string + decimals → bigint +parseAssetAmount("0.01", 8); // 1000000n +parseAssetAmount("1.5", 8); // 150000000n +``` + +## Note summaries + +```tsx +import { getNoteSummary, formatNoteSummary } from "@miden-sdk/react-sdk"; + +// Extract summary from an InputNoteRecord +const summary = getNoteSummary(note); +// { id, assets: NoteAsset[], sender?: string } + +// Format for display +formatNoteSummary(summary); // "1.5 TOKEN" or "1.5 TOKEN from miden1qy35..." +``` + +## Note attachments + +```tsx +import { readNoteAttachment, createNoteAttachment } from "@miden-sdk/react-sdk"; + +// Read pre-decoded attachment from a note +const attachment = readNoteAttachment(note); +// { values: bigint[], kind: "word" | "array" } | null + +// Create attachment for sending (≤4 values → word, >4 → array) +const data = createNoteAttachment([100n, 200n, 300n]); + +// Use in useSend: +await send({ from, to, assetId, amount: 50n, attachment: [100n, 200n] }); +``` + +## Account ID utilities + +```tsx +import { normalizeAccountId, accountIdsEqual, toBech32AccountId } from "@miden-sdk/react-sdk"; + +// Normalize hex or bech32 to consistent format +normalizeAccountId("0x1234..."); // normalized bech32 + +// Compare account IDs regardless of format +accountIdsEqual("0x1234...", "miden1qy35..."); // true + +// Convert to bech32 +toBech32AccountId("0x1234..."); // "miden1qy35..." +``` + +## Error handling + +The SDK wraps WASM errors into typed `MidenError` objects with actionable error codes. + +```tsx +import { MidenError, wrapWasmError } from "@miden-sdk/react-sdk"; + +try { + await send({ from, to, assetId, amount: 50n }); +} catch (err) { + if (err instanceof MidenError) { + switch (err.code) { + case "SEND_BUSY": + // Transaction already in progress + break; + case "WASM_SYNC_REQUIRED": + // Client needs to sync first + break; + case "WASM_NOT_INITIALIZED": + // Client not ready yet + break; + } + } +} +``` + +### Error codes + +| Code | Meaning | +|------|---------| +| `WASM_CLASS_MISMATCH` | WASM object type mismatch | +| `WASM_POINTER_CONSUMED` | WASM pointer already freed | +| `WASM_NOT_INITIALIZED` | Client not initialized | +| `WASM_SYNC_REQUIRED` | Client needs to sync | +| `SEND_BUSY` | A send operation is already in progress | +| `OPERATION_BUSY` | Another mutation is in progress | +| `UNKNOWN` | Unrecognized error | + +## Storage management + +```tsx +import { clearMidenStorage, migrateStorage } from "@miden-sdk/react-sdk"; + +// Clear all Miden IndexedDB data +await clearMidenStorage(); + +// Migrate storage between versions +await migrateStorage({ fromVersion: 1, toVersion: 2 }); +``` diff --git a/docs/builder/client/rust-client/_category_.yml b/docs/builder/client/rust-client/_category_.yml new file mode 100644 index 00000000..ff26d637 --- /dev/null +++ b/docs/builder/client/rust-client/_category_.yml @@ -0,0 +1,4 @@ +label: Rust +# Determines where this documentation section appears relative to other sections in the parent folder +position: 1 +collapsed: true diff --git a/docs/builder/client/rust-client/api-docs.md b/docs/builder/client/rust-client/api-docs.md new file mode 100644 index 00000000..b13e6901 --- /dev/null +++ b/docs/builder/client/rust-client/api-docs.md @@ -0,0 +1,8 @@ +--- +title: API +sidebar_position: 7 +--- + +:::note +The latest and complete reference for the Miden client API can be found at [`Miden client docs.rs`](https://docs.rs/miden-client/latest/miden_client/). +::: diff --git a/docs/builder/client/rust-client/design.md b/docs/builder/client/rust-client/design.md new file mode 100644 index 00000000..a9c783b9 --- /dev/null +++ b/docs/builder/client/rust-client/design.md @@ -0,0 +1,80 @@ +--- +title: Design +sidebar_position: 4 +--- + +The Miden client has the following architectural components: + +- [Store](#store) +- [RPC client](#rpc-client) +- [Transaction executor](#transaction-executor) +- [Keystore](#keystore) +- [Note screener](#note-screener) +- [Note transport](#note-transport) + +:::tip + +- The RPC client and the store are Rust traits. +- This allow developers and users to easily customize their implementations. + +::: + +## Store + +The store is central to the client's design. + +It manages the persistence of the following entities: + +- Accounts; including their state history and related information such as vault assets and account code. +- Transactions and their scripts. +- Notes. +- Note tags. +- Block headers and chain information that the client needs to execute transactions and consume notes. + +Because Miden allows off-chain executing and proving, the client needs to know about the state of the blockchain at the moment of execution. To avoid state bloat, however, the client does not need to see the whole blockchain history, just the chain history intervals that are relevant to the user. + +The store can track any number of accounts, and any number of notes that those accounts might have created or may want to consume. + +## RPC client + +The RPC client communicates with the node through a defined set of gRPC methods. The provided client works both in `std` and `wasm` environments. + +The available gRPC methods are documented in the [Node gRPC Reference](https://docs.miden.xyz/miden-node/rpc). + +## Transaction executor + +The transaction executor uses the [Miden VM](https://0xmiden.github.io/miden-docs/imported/miden-vm/src/intro/main.html) to execute transactions. All transactions run within the [transaction kernel](https://0xmiden.github.io/miden-docs/imported/miden-base/src/transaction.html). + +When executing, the executor needs access to relevant blockchain history. The executor uses a `DataStore` interface for accessing this data. This means that there may be some coupling between the executor and the store. + +## Keystore + +The keystore is responsible for storing and managing the private keys of the accounts tracked by the client. + +These private keys are used by the executor to sign and authenticate transactions. Implementations for both rust and web keystores are provided. + +## Note Screener + +The note screener is used to check the consumability of notes by tracked accounts. It performs fast static checks (e.g. checking the inputs for well known notes) and also dry runs of consumption transactions. + +It can find the tracked accounts that can consume a note, and whether the note can be consumed at the moment or in the future. + +## State Sync component + +The state sync component encapsulates the logic for dealing with synchronization of the client state with the network. It repeatedly queries the node with sync state requests until the chain tip is reached. On every requests it updates the provided tracked elements (accounts, notes, transactions, etc.) and returns an updated state at the end which can be used to update the store (this component does not modify the store directly). + +The component also exposes a specific customizable callback which can be used to react to new note arrivals. + +## Note transport + +Access to the note transport network to exchange private notes is also provided. +The provided client uses gRPC methods to communicate with the note transport network, working both in `std` and `wasm` environments. + +Targeting privacy, notes are primarily exchanged using their tags as identifiers. By default, when notes are created the tag is derived from the recipient account ID, however the tag can also be random. + +The system is also prepared for end-to-end encryption (to be implemented). + +gRPC methods include: + +- `SendNote`: Sends a note to the note transport network. The recipient address is employed to encrypt the outgoing note (to be implemented). +- `FetchNotes`: Fetch notes from the network by note tag. A pagination mechanism using a monotonic-increasing cursor is also employed. The cursor is created by the network and used by the client to reduce the number of fetched notes (to avoid downloading already fetched notes). diff --git a/docs/builder/client/rust-client/examples.md b/docs/builder/client/rust-client/examples.md new file mode 100644 index 00000000..4fb75011 --- /dev/null +++ b/docs/builder/client/rust-client/examples.md @@ -0,0 +1,52 @@ +--- +title: Examples +sidebar_position: 6 +--- + +:::note +For a complete example on how to run the client and submit transactions to the Miden node, refer to the [Getting started documentation](./get-started/index.md). +::: + +## Prover Fallback Pattern + +When using a remote prover, network issues or server errors may cause proving to fail. A common pattern is to configure the client with a remote prover by default and fall back to local proving when remote proving fails. + +```rust +use std::sync::Arc; +use miden_client::{ + ClientError, + RemoteTransactionProver, + builder::ClientBuilder, + transaction::{LocalTransactionProver, ProvingOptions}, +}; + +// Create provers +let remote_prover = Arc::new(RemoteTransactionProver::new("https://prover.example.com")); +let local_prover = Arc::new(LocalTransactionProver::new(ProvingOptions::default())); + +// Build client with remote prover as default +let mut client = ClientBuilder::new() + .prover(remote_prover.clone()) + .store(store) + .rpc(rpc) + .authenticator(authenticator) + .build() + .await?; + +// Build transaction request +let tx_request = /* ... build your transaction request ... */; + +// Submit with fallback: try remote prover first, fall back to local on proving error +let tx_id = match client.submit_new_transaction(account_id, tx_request.clone()).await { + Ok(id) => id, + Err(ClientError::TransactionProvingError(_)) => { + println!("Remote proving failed, falling back to local prover..."); + client + .submit_new_transaction_with_prover(account_id, tx_request, local_prover.clone()) + .await? + } + Err(e) => return Err(e.into()), +}; + +println!("Transaction submitted: {}", tx_id); +``` diff --git a/docs/builder/client/rust-client/features.md b/docs/builder/client/rust-client/features.md new file mode 100644 index 00000000..63dd2df6 --- /dev/null +++ b/docs/builder/client/rust-client/features.md @@ -0,0 +1,56 @@ +--- +title: Features +sidebar_position: 3 +--- + +The `miden-client` library provides a comprehensive Rust API for interacting with the Miden rollup. + +### Transaction execution + +Build and execute transactions programmatically using `TransactionRequestBuilder`. The library supports standard transaction types (pay-to-id, swap, mint) through convenience builders, and custom transactions via arbitrary note scripts and arguments. + +```rust +let tx_request = TransactionRequestBuilder::new() + .build_pay_to_id(payment_description, None, NoteType::Private, client.rng())?; + +let result = client.new_transaction(sender_id, tx_request).await?; +client.submit_transaction(result).await?; +``` + +### Proof generation + +Generate client-side zero-knowledge proofs that validate transactions without revealing private data. The library supports: + +- **Local proving** — Generate proofs on the client machine using `LocalTransactionProver` +- **Remote proving** — Delegate proof generation to a remote prover via `RemoteTransactionProver` +- **Prover fallback** — Configure a remote prover as default with automatic fallback to local proving on failure + +The prover is a pluggable trait, allowing custom implementations. + +### Network interactivity + +Communicate with the Miden network through a gRPC-based RPC client: + +- **State sync** — `client.sync_state().await` fetches the latest blockchain state, updating accounts, notes, and transactions +- **Note transport** — Exchange private notes via the note transport network using `SendNote` and `FetchNotes` gRPC methods +- **Configurable endpoints** — Connect to testnet, devnet, localhost, or custom network endpoints + +### Account management + +Create and manage accounts using `AccountBuilder`: + +- **Account types** — `RegularAccountImmutableCode`, `RegularAccountUpdatableCode`, fungible/non-fungible faucets +- **Storage modes** — `Private` (state tracked locally, only commitments on-chain) or `Public` (state stored on-chain) +- **Key management** — Trait-based keystore for signing and authentication (filesystem keystore provided) +- **Components** — Attach `BasicWallet`, `AuthRpoFalcon512`, and custom components to accounts + +### Extensibility + +The library is designed around trait-based dependency injection: + +- **Store** — Pluggable persistence (SQLite implementation provided) +- **RPC client** — Pluggable network communication +- **Prover** — Pluggable proof generation +- **Keystore** — Pluggable key management + +This makes every component replaceable for testing, custom backends, or alternative environments. diff --git a/docs/builder/client/rust-client/get-started/_category_.yml b/docs/builder/client/rust-client/get-started/_category_.yml new file mode 100644 index 00000000..496c8c7b --- /dev/null +++ b/docs/builder/client/rust-client/get-started/_category_.yml @@ -0,0 +1,3 @@ +label: Getting Started +position: 2 +collapsed: true diff --git a/docs/builder/client/rust-client/get-started/create-account-use-faucet.md b/docs/builder/client/rust-client/get-started/create-account-use-faucet.md new file mode 100644 index 00000000..450ac13a --- /dev/null +++ b/docs/builder/client/rust-client/get-started/create-account-use-faucet.md @@ -0,0 +1,166 @@ +--- +title: Create account +sidebar_position: 2 +--- + +In this tutorial, you'll create a Miden client, generate a new account, request tokens from the public faucet, and consume the resulting note — all using the Rust library API. + +## Set up the project + +1. Create a new Rust project: + + ```sh + cargo new miden-getting-started + cd miden-getting-started + ``` + +2. Add dependencies to `Cargo.toml`: + + ```toml + [dependencies] + miden-client = { version = "0.14", features = ["tonic"] } + miden-client-sqlite-store = { version = "0.14" } + tokio = { version = "1", features = ["full"] } + rand = "0.8" + ``` + +## Create the client + +Instantiate a client connected to the Miden testnet: + +```rust +use std::sync::Arc; +use miden_client::builder::ClientBuilder; +use miden_client_sqlite_store::SqliteStore; + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Create a SQLite store for local state persistence + let sqlite_store = SqliteStore::new("store.sqlite3".try_into()?).await?; + let store = Arc::new(sqlite_store); + + // Build a client pre-configured for testnet + let mut client = ClientBuilder::for_testnet() + .store(store) + .filesystem_keystore("keystore")? + .build() + .await?; + + Ok(()) +} +``` + +## Create a new account + +Use `AccountBuilder` to create a private wallet account: + +```rust +use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; +use miden_client::auth::AuthSecretKey; +use miden_client::crypto::SecretKey; +use miden_objects::account::auth::AuthRpoFalcon512; +use miden_objects::account::component::BasicWallet; + +// Generate a key pair for the account +let key_pair = SecretKey::with_rng(client.rng()); + +// Generate a random seed for the account +let init_seed: [u8; 32] = rand::random(); + +// Build the account +let new_account = AccountBuilder::new(init_seed) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Private) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; + +// Store the key and register the account with the client +let keystore = client.keystore(); +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; +client.add_account(&new_account, false).await?; + +println!("Account created: {:?}", new_account.id()); +``` + +Save the printed account ID — you'll need it for the faucet step. + +## Request tokens from the public faucet + +1. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). +2. Paste your account ID into the **Request test tokens** field. +3. Choose an amount and click **Send Private Note**. +4. Download the `note.mno` file. + +:::tip +You can also click **Send Public Note**. If you do, the note details will be public and you can skip the import step — just sync the client directly. +::: + +## Import and sync + +If you received a private note file, import it: + +```rust +use std::path::Path; + +// Import the note from the downloaded file +client.import_note_from_file(Path::new("path/to/note.mno")).await?; +``` + +Sync the client to confirm the note exists on-chain: + +```rust +let sync_summary = client.sync_state().await?; +println!("Synced to block {}", sync_summary.block_num); +``` + +After syncing, the note's status changes from `Expected` to `Committed`, confirming it is the result of a valid on-chain transaction. + +## Consume the note + +Consume all available notes for your account to receive the faucet tokens: + +```rust +use miden_client::transaction::TransactionRequestBuilder; + +// Get consumable notes for the account +let consumable_notes = client.get_consumable_notes(Some(new_account.id())).await?; +let note_ids: Vec<_> = consumable_notes.iter().map(|n| n.note.id()).collect(); + +if !note_ids.is_empty() { + // Build a consume-notes transaction + let tx_request = TransactionRequestBuilder::new() + .build_consume_notes(new_account.id(), note_ids)?; + + // Execute and submit the transaction (this generates a ZK proof) + let tx_result = client.new_transaction(new_account.id(), tx_request).await?; + client.submit_transaction(tx_result).await?; + + println!("Notes consumed — ZK proof generated and submitted!"); +} +``` + +## Verify the balance + +Sync again to confirm the transaction, then check your account balance: + +```rust +client.sync_state().await?; + +let (account, _) = client.get_account(new_account.id()).await?; +println!("Account vault: {:?}", account.vault()); +``` + +You should see the faucet tokens in your account's vault. + +## Congratulations! + +You've created a Miden client, generated an account, and executed your first client-side zero-knowledge proof using the Rust library. Next, try transferring assets between accounts: + +- [Public peer-to-peer transfer](./p2p-public.md) +- [Private peer-to-peer transfer](./p2p-private.md) + +## Debugging tips + +- All local state is stored in the SQLite database (the path you passed to `SqliteStore::new`). Delete the file for a fresh start. +- Enable debug mode when building the client: `.in_debug_mode(DebugMode::Enabled)` on `ClientBuilder`. diff --git a/docs/builder/client/rust-client/get-started/index.md b/docs/builder/client/rust-client/get-started/index.md new file mode 100644 index 00000000..d9c8c6eb --- /dev/null +++ b/docs/builder/client/rust-client/get-started/index.md @@ -0,0 +1,17 @@ +--- +title: Getting started +sidebar_position: 1 +--- + +This section shows you how to build a Rust application that interacts with the Miden rollup using the `miden-client` library. + +By the end of these tutorials, you will have: + +- Created a Miden client instance connected to testnet. +- Created an account and requested funds from the faucet. +- Transferred assets between accounts using the Rust API — both public and private notes. + +## Prerequisites + +- [Rust](https://www.rust-lang.org/learn/get-started) version 1.88 or later +- `miden-client` and `miden-client-sqlite-store` added to your `Cargo.toml` (see [Installation](../install-and-run.md)) diff --git a/docs/builder/client/rust-client/get-started/p2p-private.md b/docs/builder/client/rust-client/get-started/p2p-private.md new file mode 100644 index 00000000..46f69734 --- /dev/null +++ b/docs/builder/client/rust-client/get-started/p2p-private.md @@ -0,0 +1,144 @@ +--- +title: Private peer-to-peer transfer +sidebar_position: 4 +--- + +In this tutorial, you'll transfer assets between two accounts using private notes and the Rust library API. + +:::info Prerequisite +Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account (Account A) and a working client. +::: + +## Create a second account + +Create a private account (Account B) within the same client: + +```rust +use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; +use miden_client::auth::AuthSecretKey; +use miden_client::crypto::SecretKey; +use miden_objects::account::auth::AuthRpoFalcon512; +use miden_objects::account::component::BasicWallet; + +let key_pair = SecretKey::with_rng(client.rng()); +let init_seed: [u8; 32] = rand::random(); + +let account_b = AccountBuilder::new(init_seed) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Private) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; + +let keystore = client.keystore(); +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), account_b.id()).await?; +client.add_account(&account_b, false).await?; + +println!("Account B created: {:?}", account_b.id()); +``` + +## Send assets with a private note + +Build and submit a pay-to-id transaction from Account A to Account B using a private note: + +```rust +use miden_client::transaction::{TransactionRequestBuilder, PaymentNoteDescription}; +use miden_objects::note::NoteType; +use miden_objects::asset::FungibleAsset; +use miden_objects::account::AccountId; + +// Define the asset to send +let faucet_id = AccountId::from_hex("0x")?; +let asset = FungibleAsset::new(faucet_id, 50)?.into(); + +// Build the payment request +let payment = PaymentNoteDescription::new( + vec![asset], + account_a_id, // sender + account_b.id(), // target +); + +let tx_request = TransactionRequestBuilder::new().build_pay_to_id( + payment, + None, + NoteType::Private, // Private note — details not publicly visible + client.rng(), +)?; + +// Execute and submit +let tx_result = client.new_transaction(account_a_id, tx_request).await?; +client.submit_transaction(tx_result).await?; + +println!("Private P2ID note sent!"); +``` + +## Consume the private note + +Since both accounts are in the same client, Account B can discover the note by syncing: + +```rust +// Sync to update note state +client.sync_state().await?; + +// Get consumable notes for Account B +let consumable = client.get_consumable_notes(Some(account_b.id())).await?; +let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); + +if !note_ids.is_empty() { + let tx_request = TransactionRequestBuilder::new() + .build_consume_notes(account_b.id(), note_ids)?; + + let tx_result = client.new_transaction(account_b.id(), tx_request).await?; + client.submit_transaction(tx_result).await?; + + println!("Notes consumed by Account B!"); +} +``` + +## Verify + +Sync and check both accounts: + +```rust +client.sync_state().await?; + +let (acct_a, _) = client.get_account(account_a_id).await?; +let (acct_b, _) = client.get_account(account_b.id()).await?; + +println!("Account A vault: {:?}", acct_a.vault()); +println!("Account B vault: {:?}", acct_b.vault()); +``` + +## Using the note transport network + +When accounts belong to different users (separate clients), use the note transport network to exchange private notes: + +```rust +// Sender: after creating the note, get the output note ID +let output_notes = client.get_output_notes().await?; +let note_id = output_notes.last().unwrap().id(); + +// Send the note via the transport network (requires recipient's bech32 address) +client.send_note_via_transport(note_id, recipient_address).await?; + +// Recipient: fetch notes from the transport network +client.fetch_notes_from_transport().await?; + +// Then sync and consume as normal +client.sync_state().await?; +``` + +:::note +The client fetches notes for tracked note tags. By default, tags are derived from the recipient's account ID. For increased privacy, use random tags and track them explicitly. +::: + +## Congratulations! + +You've completed all the getting started tutorials. You can now: + +- Create accounts (private and public) +- Execute transactions with ZK proofs +- Transfer assets via public and private notes +- Use the note transport network for multi-user scenarios + +For more advanced patterns, see the [Library reference](../library.md) and [Examples](../examples.md). diff --git a/docs/builder/client/rust-client/get-started/p2p-public.md b/docs/builder/client/rust-client/get-started/p2p-public.md new file mode 100644 index 00000000..b7811d4a --- /dev/null +++ b/docs/builder/client/rust-client/get-started/p2p-public.md @@ -0,0 +1,111 @@ +--- +title: Peer-to-peer transfer +sidebar_position: 3 +--- + +In this tutorial, you'll transfer assets between two accounts using public notes and the Rust library API. + +:::info Prerequisite +Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account (Account A) and a working client. +::: + +## Create a second account + +Create a public account (Account C) so its state can be retrieved from the network: + +```rust +use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; +use miden_client::auth::AuthSecretKey; +use miden_client::crypto::SecretKey; +use miden_objects::account::auth::AuthRpoFalcon512; +use miden_objects::account::component::BasicWallet; + +let key_pair = SecretKey::with_rng(client.rng()); +let anchor_block = client.get_latest_epoch_block().await?; +let init_seed: [u8; 32] = rand::random(); + +let account_c = AccountBuilder::new(init_seed) + .anchor((&anchor_block).try_into()?) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Public) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; + +let keystore = client.keystore(); +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), account_c.id()).await?; +client.add_account(&account_c, false).await?; + +println!("Account C created: {:?}", account_c.id()); +``` + +## Send assets with a public note + +Build and submit a pay-to-id transaction from Account A to Account C using a public note: + +```rust +use miden_client::transaction::{TransactionRequestBuilder, PaymentNoteDescription}; +use miden_objects::note::NoteType; +use miden_objects::asset::FungibleAsset; +use miden_objects::account::AccountId; + +// Define the asset to send +let faucet_id = AccountId::from_hex("0x")?; +let asset = FungibleAsset::new(faucet_id, 50)?.into(); + +// Build the payment request +let payment = PaymentNoteDescription::new( + vec![asset], + account_a_id, // sender + account_c.id(), // target +); + +let tx_request = TransactionRequestBuilder::new().build_pay_to_id( + payment, + None, + NoteType::Public, // Public note — recipient can discover it by syncing + client.rng(), +)?; + +// Execute and submit +let tx_result = client.new_transaction(account_a_id, tx_request).await?; +client.submit_transaction(tx_result).await?; + +println!("Public P2ID note sent!"); +``` + +## Receive and consume the note + +Since the note is public, Account C can discover it by syncing with the network: + +```rust +// Sync to discover the public note +client.sync_state().await?; + +// Get consumable notes for Account C +let consumable = client.get_consumable_notes(Some(account_c.id())).await?; +let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); + +if !note_ids.is_empty() { + let tx_request = TransactionRequestBuilder::new() + .build_consume_notes(account_c.id(), note_ids)?; + + let tx_result = client.new_transaction(account_c.id(), tx_request).await?; + client.submit_transaction(tx_result).await?; + + println!("Notes consumed by Account C!"); +} +``` + +## Verify + +Sync and check Account C's balance: + +```rust +client.sync_state().await?; + +let (account, _) = client.get_account(account_c.id()).await?; +println!("Account C vault: {:?}", account.vault()); +``` + +Account C should now hold the transferred tokens. diff --git a/docs/builder/client/rust-client/index.md b/docs/builder/client/rust-client/index.md new file mode 100644 index 00000000..4d9776d0 --- /dev/null +++ b/docs/builder/client/rust-client/index.md @@ -0,0 +1,25 @@ +--- +title: Rust +sidebar_position: 1 +--- + +# Rust client library + +The `miden-client` crate is the core Rust library for interacting with the Miden rollup. It provides a programmatic API for building applications that execute transactions, generate zero-knowledge proofs, manage accounts, and sync state with the network. + +## Key capabilities + +- **Transaction execution** — Build and execute transactions using `TransactionRequestBuilder` +- **Proof generation** — Generate client-side ZK proofs locally or delegate to a remote prover +- **Account management** — Create and track accounts with `AccountBuilder`, supporting both private and public storage modes +- **State sync** — Keep local state in sync with the Miden network via gRPC + +The library uses trait-based dependency injection for storage, RPC, proving, and key management, making each component pluggable and testable. + +## Getting started + +1. [Install](./install-and-run.md) the library as a dependency +2. Follow the [getting started tutorials](./get-started/index.md) to build your first Miden application +3. Explore the [library reference](./library.md) for detailed API patterns +4. Review the [design](./design.md) for architectural details +5. See the full [API documentation on docs.rs](https://docs.rs/miden-client/latest/miden_client/) diff --git a/docs/builder/client/rust-client/install-and-run.md b/docs/builder/client/rust-client/install-and-run.md new file mode 100644 index 00000000..3929ca6c --- /dev/null +++ b/docs/builder/client/rust-client/install-and-run.md @@ -0,0 +1,53 @@ +--- +title: Installation +sidebar_position: 1 +--- + +## Prerequisites + +- [Rust](https://www.rust-lang.org/tools/install) version 1.88 or later. + +## Add the dependency + +Add `miden-client` to your project's `Cargo.toml`: + +```toml +[dependencies] +miden-client = { version = "0.14" } +``` + +### Feature flags + +The crate exposes several feature flags for optional functionality: + +- **`tonic`** — Enables gRPC-based RPC client (required for network communication) +- **`testing`** — Enables test utilities and mock implementations + +Enable features as needed: + +```toml +[dependencies] +miden-client = { version = "0.14", features = ["tonic", "testing"] } +``` + +### SQLite store + +For persistent storage, add the SQLite store crate: + +```toml +[dependencies] +miden-client = { version = "0.14" } +miden-client-sqlite-store = { version = "0.14" } +``` + +## Verify + +Confirm the dependency resolves correctly: + +```sh +cargo check +``` + +## Next steps + +Head to the [getting started tutorials](./get-started/index.md) to create your first account and execute a transaction using the Rust API. diff --git a/docs/builder/client/rust-client/library.md b/docs/builder/client/rust-client/library.md new file mode 100644 index 00000000..1b62fcd2 --- /dev/null +++ b/docs/builder/client/rust-client/library.md @@ -0,0 +1,139 @@ +--- +title: Library +sidebar_position: 5 +--- + +To use the Miden client library in a Rust project, include it as a dependency. + +In your project's `Cargo.toml`, add: + +```toml +miden-client = { version = "0.14" } +``` + +## Client instantiation + +The recommended way to create a client is using the `ClientBuilder`. For standard networks, use the pre-configured constructors: + +```rust +use std::sync::Arc; +use miden_client::builder::ClientBuilder; +use miden_client_sqlite_store::SqliteStore; + +// Create store +let sqlite_store = SqliteStore::new("path/to/store".try_into()?).await?; +let store = Arc::new(sqlite_store); + +// Build client for testnet (pre-configured RPC, prover, and note transport) +let client = ClientBuilder::for_testnet() + .store(store) + .filesystem_keystore("path/to/keys")? + .build() + .await?; +``` + +Other network constructors are available: +- `ClientBuilder::for_testnet()` - Pre-configured for Miden testnet +- `ClientBuilder::for_devnet()` - Pre-configured for Miden devnet +- `ClientBuilder::for_localhost()` - Pre-configured for local development + +For custom configurations, use `ClientBuilder::new()` and configure each component: + +```rust +use std::sync::Arc; +use miden_client::builder::ClientBuilder; +use miden_client::rpc::{Endpoint, GrpcClient}; +use miden_client_sqlite_store::SqliteStore; + +// Create store +let sqlite_store = SqliteStore::new("path/to/store".try_into()?).await?; +let store = Arc::new(sqlite_store); + +// Setup the gRPC endpoint +let endpoint = Endpoint::new("https".into(), "localhost".into(), Some(57291)); + +let client = ClientBuilder::new() + .grpc_client(&endpoint, None) + .store(store) + .filesystem_keystore("path/to/keys")? + // Optional: custom prover via .prover(Arc::new(prover)) + // Optional: note transport via .note_transport(Arc::new(nt_client)) + // Optional: debug mode via .in_debug_mode(DebugMode::Enabled) + .build() + .await?; +``` + +## Create local account + +With the Miden client, you can create and track any number of public and local accounts. For local accounts, the state is tracked locally, and the rollup only keeps commitments to the data, which in turn guarantees privacy. + +The `AccountBuilder` can be used to create a new account with the specified parameters and components. The following code creates a new local account: + +```rust +let key_pair = SecretKey::with_rng(client.rng()); + +let new_account = AccountBuilder::new(init_seed) // Seed should be random for each account + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Private) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; +client.add_account(&new_account, false).await?; +``` +Once an account is created, it is kept locally and its state is automatically tracked by the client. + +To create an public account, you can specify `AccountStorageMode::Public` like so: + +```Rust +let key_pair = SecretKey::with_rng(client.rng()); +let anchor_block = client.get_latest_epoch_block().await.unwrap(); + +let new_account = AccountBuilder::new(init_seed) // Seed should be random for each account + .anchor((&anchor_block).try_into().unwrap()) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Public) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; +client.add_account(&new_account, false).await?; +``` + +The account's state is also tracked locally, but during sync the client updates the account state by querying the node for the most recent account data. + +## Execute transaction + +In order to execute a transaction, you first need to define which type of transaction is to be executed. This may be done with the `TransactionRequest` which represents a general definition of a transaction. Some standardized constructors are available for common transaction types. + +Here is an example for a `pay-to-id` transaction type: + +```rust +// Define asset +let faucet_id = AccountId::from_hex(faucet_id)?; +let fungible_asset = FungibleAsset::new(faucet_id, *amount)?.into(); + +let sender_account_id = AccountId::from_hex(bob_account_id)?; +let target_account_id = AccountId::from_hex(alice_account_id)?; +let payment_description = PaymentNoteDescription::new( + vec![fungible_asset.into()], + sender_account_id, + target_account_id, +); + +let transaction_request = TransactionRequestBuilder::new().build_pay_to_id( + payment_description, + None, + NoteType::Private, + client.rng(), +)?; + +// Execute transaction. No information is tracked after this. +let transaction_execution_result = client.new_transaction(sender_account_id, transaction_request.clone()).await?; + +// Prove and submit the transaction, which is stored alongside created notes (if any) +client.submit_transaction(transaction_execution_result).await? +``` + +You can decide whether you want the note details to be public or private through the `note_type` parameter. +You may also customize the transaction request with the other `TransactionRequestBuilder` methods. This allows you to run custom code, with custom note arguments and additional output/input notes as well. diff --git a/docs/builder/client/theme/Admonition/Icon/Danger.tsx b/docs/builder/client/theme/Admonition/Icon/Danger.tsx new file mode 100644 index 00000000..ab14d7de --- /dev/null +++ b/docs/builder/client/theme/Admonition/Icon/Danger.tsx @@ -0,0 +1,19 @@ +import React, { type ReactNode } from "react"; +import type { Props } from "@theme/Admonition/Icon/Danger"; + +export default function AdmonitionIconDanger(props: Props): ReactNode { + return ( + + + + ); +} diff --git a/docs/builder/client/theme/Admonition/Icon/Info.tsx b/docs/builder/client/theme/Admonition/Icon/Info.tsx new file mode 100644 index 00000000..59e48a52 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Icon/Info.tsx @@ -0,0 +1,20 @@ +import React, { type ReactNode } from "react"; +import type { Props } from "@theme/Admonition/Icon/Info"; + +export default function AdmonitionIconInfo(props: Props): ReactNode { + return ( + + + + ); +} diff --git a/docs/builder/client/theme/Admonition/Icon/Note.tsx b/docs/builder/client/theme/Admonition/Icon/Note.tsx new file mode 100644 index 00000000..d7c524b3 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Icon/Note.tsx @@ -0,0 +1,20 @@ +import React, { type ReactNode } from "react"; +import type { Props } from "@theme/Admonition/Icon/Note"; + +export default function AdmonitionIconNote(props: Props): ReactNode { + return ( + + + + ); +} diff --git a/docs/builder/client/theme/Admonition/Icon/Tip.tsx b/docs/builder/client/theme/Admonition/Icon/Tip.tsx new file mode 100644 index 00000000..219bb8d0 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Icon/Tip.tsx @@ -0,0 +1,20 @@ +import React, { type ReactNode } from "react"; +import type { Props } from "@theme/Admonition/Icon/Tip"; + +export default function AdmonitionIconTip(props: Props): ReactNode { + return ( + + + + ); +} diff --git a/docs/builder/client/theme/Admonition/Icon/Warning.tsx b/docs/builder/client/theme/Admonition/Icon/Warning.tsx new file mode 100644 index 00000000..f96398d1 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Icon/Warning.tsx @@ -0,0 +1,20 @@ +import React, { type ReactNode } from "react"; +import type { Props } from "@theme/Admonition/Icon/Warning"; + +export default function AdmonitionIconCaution(props: Props): ReactNode { + return ( + + + + ); +} diff --git a/docs/builder/client/theme/Admonition/Layout/index.tsx b/docs/builder/client/theme/Admonition/Layout/index.tsx new file mode 100644 index 00000000..7b2c170d --- /dev/null +++ b/docs/builder/client/theme/Admonition/Layout/index.tsx @@ -0,0 +1,51 @@ +import React, { type ReactNode } from "react"; +import clsx from "clsx"; +import { ThemeClassNames } from "@docusaurus/theme-common"; + +import type { Props } from "@theme/Admonition/Layout"; + +import styles from "./styles.module.css"; + +function AdmonitionContainer({ + type, + className, + children, +}: Pick & { children: ReactNode }) { + return ( +
+ {children} +
+ ); +} + +function AdmonitionHeading({ icon, title }: Pick) { + return ( +
+ {icon} + {/* {title} */} +
+ ); +} + +function AdmonitionContent({ children }: Pick) { + return children ? ( +
{children}
+ ) : null; +} + +export default function AdmonitionLayout(props: Props): ReactNode { + const { type, icon, title, children, className } = props; + return ( + + {title || icon ? : null} + {children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Layout/styles.module.css b/docs/builder/client/theme/Admonition/Layout/styles.module.css new file mode 100644 index 00000000..88df7e63 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Layout/styles.module.css @@ -0,0 +1,35 @@ +.admonition { + margin-bottom: 1em; +} + +.admonitionHeading { + font: var(--ifm-heading-font-weight) var(--ifm-h5-font-size) / + var(--ifm-heading-line-height) var(--ifm-heading-font-family); + text-transform: uppercase; +} + +/* Heading alone without content (does not handle fragment content) */ +.admonitionHeading:not(:last-child) { + margin-bottom: 0.3rem; +} + +.admonitionHeading code { + text-transform: none; +} + +.admonitionIcon { + display: inline-block; + vertical-align: middle; + margin-right: 0.4em; +} + +.admonitionIcon svg { + display: inline-block; + height: 1.6em; + width: 1.6em; + fill: var(--ifm-alert-foreground-color); +} + +.admonitionContent > :last-child { + margin-bottom: 0; +} diff --git a/docs/builder/client/theme/Admonition/Type/Caution.tsx b/docs/builder/client/theme/Admonition/Type/Caution.tsx new file mode 100644 index 00000000..b570a37a --- /dev/null +++ b/docs/builder/client/theme/Admonition/Type/Caution.tsx @@ -0,0 +1,32 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import type {Props} from '@theme/Admonition/Type/Caution'; +import AdmonitionLayout from '@theme/Admonition/Layout'; +import IconWarning from '@theme/Admonition/Icon/Warning'; + +const infimaClassName = 'alert alert--warning'; + +const defaultProps = { + icon: , + title: ( + + caution + + ), +}; + +// TODO remove before v4: Caution replaced by Warning +// see https://github.com/facebook/docusaurus/issues/7558 +export default function AdmonitionTypeCaution(props: Props): ReactNode { + return ( + + {props.children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Type/Danger.tsx b/docs/builder/client/theme/Admonition/Type/Danger.tsx new file mode 100644 index 00000000..49901fa9 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Type/Danger.tsx @@ -0,0 +1,30 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import type {Props} from '@theme/Admonition/Type/Danger'; +import AdmonitionLayout from '@theme/Admonition/Layout'; +import IconDanger from '@theme/Admonition/Icon/Danger'; + +const infimaClassName = 'alert alert--danger'; + +const defaultProps = { + icon: , + title: ( + + danger + + ), +}; + +export default function AdmonitionTypeDanger(props: Props): ReactNode { + return ( + + {props.children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Type/Info.tsx b/docs/builder/client/theme/Admonition/Type/Info.tsx new file mode 100644 index 00000000..018e0a16 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Type/Info.tsx @@ -0,0 +1,30 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import type {Props} from '@theme/Admonition/Type/Info'; +import AdmonitionLayout from '@theme/Admonition/Layout'; +import IconInfo from '@theme/Admonition/Icon/Info'; + +const infimaClassName = 'alert alert--info'; + +const defaultProps = { + icon: , + title: ( + + info + + ), +}; + +export default function AdmonitionTypeInfo(props: Props): ReactNode { + return ( + + {props.children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Type/Note.tsx b/docs/builder/client/theme/Admonition/Type/Note.tsx new file mode 100644 index 00000000..c99e0385 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Type/Note.tsx @@ -0,0 +1,30 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import type {Props} from '@theme/Admonition/Type/Note'; +import AdmonitionLayout from '@theme/Admonition/Layout'; +import IconNote from '@theme/Admonition/Icon/Note'; + +const infimaClassName = 'alert alert--secondary'; + +const defaultProps = { + icon: , + title: ( + + note + + ), +}; + +export default function AdmonitionTypeNote(props: Props): ReactNode { + return ( + + {props.children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Type/Tip.tsx b/docs/builder/client/theme/Admonition/Type/Tip.tsx new file mode 100644 index 00000000..18604a5e --- /dev/null +++ b/docs/builder/client/theme/Admonition/Type/Tip.tsx @@ -0,0 +1,30 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import type {Props} from '@theme/Admonition/Type/Tip'; +import AdmonitionLayout from '@theme/Admonition/Layout'; +import IconTip from '@theme/Admonition/Icon/Tip'; + +const infimaClassName = 'alert alert--success'; + +const defaultProps = { + icon: , + title: ( + + tip + + ), +}; + +export default function AdmonitionTypeTip(props: Props): ReactNode { + return ( + + {props.children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Type/Warning.tsx b/docs/builder/client/theme/Admonition/Type/Warning.tsx new file mode 100644 index 00000000..61d9597b --- /dev/null +++ b/docs/builder/client/theme/Admonition/Type/Warning.tsx @@ -0,0 +1,30 @@ +import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import type {Props} from '@theme/Admonition/Type/Warning'; +import AdmonitionLayout from '@theme/Admonition/Layout'; +import IconWarning from '@theme/Admonition/Icon/Warning'; + +const infimaClassName = 'alert alert--warning'; + +const defaultProps = { + icon: , + title: ( + + warning + + ), +}; + +export default function AdmonitionTypeWarning(props: Props): ReactNode { + return ( + + {props.children} + + ); +} diff --git a/docs/builder/client/theme/Admonition/Types.tsx b/docs/builder/client/theme/Admonition/Types.tsx new file mode 100644 index 00000000..2a100190 --- /dev/null +++ b/docs/builder/client/theme/Admonition/Types.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import AdmonitionTypeNote from '@theme/Admonition/Type/Note'; +import AdmonitionTypeTip from '@theme/Admonition/Type/Tip'; +import AdmonitionTypeInfo from '@theme/Admonition/Type/Info'; +import AdmonitionTypeWarning from '@theme/Admonition/Type/Warning'; +import AdmonitionTypeDanger from '@theme/Admonition/Type/Danger'; +import AdmonitionTypeCaution from '@theme/Admonition/Type/Caution'; +import type AdmonitionTypes from '@theme/Admonition/Types'; + +const admonitionTypes: typeof AdmonitionTypes = { + note: AdmonitionTypeNote, + tip: AdmonitionTypeTip, + info: AdmonitionTypeInfo, + warning: AdmonitionTypeWarning, + danger: AdmonitionTypeDanger, +}; + +// Undocumented legacy admonition type aliases +// Provide hardcoded/untranslated retrocompatible label +// See also https://github.com/facebook/docusaurus/issues/7767 +const admonitionAliases: typeof AdmonitionTypes = { + secondary: (props) => , + important: (props) => , + success: (props) => , + caution: AdmonitionTypeCaution, +}; + +export default { + ...admonitionTypes, + ...admonitionAliases, +}; diff --git a/docs/builder/client/theme/Admonition/index.tsx b/docs/builder/client/theme/Admonition/index.tsx new file mode 100644 index 00000000..8f4225da --- /dev/null +++ b/docs/builder/client/theme/Admonition/index.tsx @@ -0,0 +1,21 @@ +import React, {type ComponentType, type ReactNode} from 'react'; +import {processAdmonitionProps} from '@docusaurus/theme-common'; +import type {Props} from '@theme/Admonition'; +import AdmonitionTypes from '@theme/Admonition/Types'; + +function getAdmonitionTypeComponent(type: string): ComponentType { + const component = AdmonitionTypes[type]; + if (component) { + return component; + } + console.warn( + `No admonition component found for admonition type "${type}". Using Info as fallback.`, + ); + return AdmonitionTypes.info!; +} + +export default function Admonition(unprocessedProps: Props): ReactNode { + const props = processAdmonitionProps(unprocessedProps); + const AdmonitionTypeComponent = getAdmonitionTypeComponent(props.type); + return ; +} diff --git a/docs/builder/client/web-client/_category_.yml b/docs/builder/client/web-client/_category_.yml new file mode 100644 index 00000000..629e9ef2 --- /dev/null +++ b/docs/builder/client/web-client/_category_.yml @@ -0,0 +1,4 @@ +label: TypeScript +# Determines where this documentation section appears relative to other sections in the parent folder +position: 2 +collapsed: true diff --git a/docs/builder/client/web-client/api-docs.md b/docs/builder/client/web-client/api-docs.md new file mode 100644 index 00000000..120e0590 --- /dev/null +++ b/docs/builder/client/web-client/api-docs.md @@ -0,0 +1,8 @@ +--- +title: API +sidebar_position: 7 +--- + +:::note +The latest and complete API reference for the Miden Web SDK can be found at the [TypeDoc API Reference](https://github.com/0xMiden/ts-sdk/blob/main/docs/typedoc/README.md). +::: diff --git a/docs/builder/client/web-client/design.md b/docs/builder/client/web-client/design.md new file mode 100644 index 00000000..a1de2ed8 --- /dev/null +++ b/docs/builder/client/web-client/design.md @@ -0,0 +1,149 @@ +--- +title: Design +sidebar_position: 4 +--- + +# Design + +This page explains how the TypeScript SDK is structured and how its pieces fit together at runtime. + +## How the SDK reaches the browser + +The TypeScript SDK is a pure TypeScript package that wraps the [WASM bridge](../index.md) — a separate layer that compiles the [Rust client core](../rust-client/design.md) to WebAssembly and bundles it with browser infrastructure (Web Workers, IndexedDB, JS glue). The SDK itself contains no Rust or WASM code; it consumes the bridge as an npm dependency and provides the idiomatic TypeScript API you interact with. + +```mermaid +flowchart LR + A["Rust core
(miden-client)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] + B -->|"npm dependency"| C["TypeScript SDK
(@miden-sdk/ts-sdk)"] + C --> D["Your application"] +``` + +From your perspective, `npm install` is all you need — the WASM binary, Web Worker script, and all bindings are bundled transitively. + +## Runtime architecture + +At runtime, the SDK splits work across two threads: + +```mermaid +flowchart TB + subgraph Main["Main thread (your app)"] + App["Application code"] --> API["MidenClient API
(thin proxy)"] + end + + subgraph Worker["Web Worker thread"] + Core["Rust client core
(WASM)"] + Core --> Store["IndexedDB
store"] + Core --> RPC["gRPC-web
RPC client"] + Core --> KS["IndexedDB
keystore"] + end + + API <-->|"postMessage"| Core + RPC <-->|"gRPC-web"| Node["Miden node"] + RPC <-->|"gRPC-web"| NT["Note transport
network"] +``` + +**Why a Web Worker?** Transaction proving and MASM compilation are CPU-intensive. Running them on the main thread would freeze the UI. The Web Worker keeps your application responsive while heavy operations run in the background. + +Every `MidenClient` instance owns one Web Worker. The TypeScript API you interact with is a thin proxy that serializes calls to the worker via `postMessage` and returns the results as promises. + +## Client API surface + +The `MidenClient` exposes a resource-based API — each domain area is grouped under a namespace: + +```mermaid +flowchart TB + Client["MidenClient"] + Client --> Accounts["client.accounts"] + Client --> Transactions["client.transactions"] + Client --> Notes["client.notes"] + Client --> Compile["client.compile"] + Client --> Tags["client.tags"] + Client --> Sync["client.sync()"] + + Accounts ~~~ A1["create · get · list
getDetails · getBalance
import · export
addAddress · removeAddress"] + Transactions ~~~ T1["mint · send · consume
consumeAll · swap · execute
submit · preview
list · waitFor"] + Notes ~~~ N1["get · list · listSent
listAvailable
import · export
sendPrivate · fetchPrivate"] + Compile ~~~ C1["component · txScript"] + Tags ~~~ TG1["add · remove · list"] +``` + +| Namespace | Responsibility | +|-----------|---------------| +| **`client.accounts`** | Account lifecycle: create wallets/faucets/contracts, retrieve state, check balances, import/export, manage addresses | +| **`client.transactions`** | Transaction lifecycle: build, execute, prove, submit, and track transactions. Supports mint, send, consume, swap, custom MASM scripts, and FPI | +| **`client.notes`** | Note management: list/filter input and output notes, import/export, send and fetch private notes via the note transport network | +| **`client.compile`** | MASM compilation: compile account components and transaction scripts in the browser, with library linking support | +| **`client.tags`** | Tag management: add/remove note tags that control which notes the client discovers during sync | +| **`client.sync()`** | State synchronization: pull the latest state from the Miden node and update local data | + +Top-level methods like `client.exportStore()`, `client.importStore()`, and `client.terminate()` handle store backup/restore and worker lifecycle. + +## Transaction lifecycle + +When you call a high-level method like `client.transactions.send()`, the SDK handles the full lifecycle automatically: + +```mermaid +sequenceDiagram + participant App as Your app + participant API as MidenClient + participant Worker as Web Worker (WASM) + participant Node as Miden node + + App->>API: transactions.send({ ... }) + API->>Worker: postMessage(send request) + Worker->>Worker: 1. Build TransactionRequest + Worker->>Worker: 2. Execute in Miden VM + Worker->>Worker: 3. Generate ZK proof + Worker->>Node: 4. Submit proven transaction + Node-->>Worker: Transaction ID + Worker->>Worker: 5. Store transaction + output notes + Worker-->>API: TransactionId + API-->>App: TransactionId +``` + +Steps 2–3 are the most expensive. For complex transactions, you can offload proving to a remote prover by passing `proverUrl` at client creation or a `prover` per-transaction. + +## Persistence + +The SDK uses [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) for all browser-side persistence — no server or filesystem needed. + +**Store** — persists the client's view of the blockchain: +- Account state (history, vault assets, code) +- Transactions and their scripts +- Input and output notes +- Note tags +- Block headers and chain data required for transaction execution + +Because Miden supports off-chain execution and proving, the client only stores the blockchain history intervals relevant to its tracked accounts — not the entire chain. + +**Keystore** — persists private keys for tracked accounts, stored separately from the main store. Keys are used to sign transactions during execution. + +Both databases are scoped to the browser origin, so different domains cannot access each other's data. + +## Network communication + +The SDK communicates with two external services: + +| Service | Protocol | Purpose | +|---------|----------|---------| +| **Miden node** | gRPC-web | Sync state, submit transactions, fetch public account data | +| **Note transport network** | gRPC-web | Exchange private notes between users | + +Standard gRPC uses HTTP/2 features that browsers don't expose directly. The SDK uses [gRPC-web](https://github.com/grpc/grpc-web), which works over HTTP/1.1 and HTTP/2, making it compatible with browser environments. A gRPC-web proxy (like Envoy) may be required in front of the Miden node depending on the deployment. + +## Resource management + +Each `MidenClient` holds a Web Worker thread and IndexedDB connections. In long-running applications (e.g., a wallet that switches between networks), it's important to release these resources: + +```typescript +// Explicit cleanup +client.terminate(); + +// Or automatic cleanup via TC39 Explicit Resource Management +{ + using client = await MidenClient.create(); + // client.terminate() called automatically at end of scope +} +``` + +After `terminate()`, all method calls throw `Error("Client terminated")`. diff --git a/docs/builder/client/web-client/examples.md b/docs/builder/client/web-client/examples.md new file mode 100644 index 00000000..ad73d691 --- /dev/null +++ b/docs/builder/client/web-client/examples.md @@ -0,0 +1,45 @@ +--- +title: Examples +sidebar_position: 6 +--- + +# Examples + +Code examples for common SDK operations, organized by topic. + +## Tutorials + +For guided, end-to-end walkthroughs, see the [Getting started](./get-started/index.md) tutorials: + +- [Create account and use faucet](./get-started/create-account-use-faucet.md) +- [Public peer-to-peer transfer](./get-started/p2p-public.md) +- [Private peer-to-peer transfer](./get-started/p2p-private.md) +- [Mock client](./get-started/mock-client.md) + +## Library reference examples + +Each library reference page contains code examples for its topic: + +### Account operations + +- [Creating wallets, contracts, and faucets](./library/new-accounts.md) +- [Retrieving accounts and checking balances](./library/accounts.md) +- [Importing accounts](./library/import.md) +- [Exporting accounts](./library/export.md) + +### Transaction operations + +- [Minting, sending, consuming, and swapping](./library/new-transactions.md) — includes remote prover, custom scripts, and FPI +- [Retrieving transaction history](./library/transactions.md) + +### Note operations + +- [Listing, filtering, importing, and exporting notes](./library/notes.md) +- [Sending and fetching private notes](./library/note-transport.md) + +### Other + +- [Compiling MASM components and transaction scripts](./library/compile.md) +- [Synchronizing state](./library/sync.md) +- [Managing note tags](./library/tags.md) +- [Working with the mock client](./get-started/mock-client.md) diff --git a/docs/builder/client/web-client/features.md b/docs/builder/client/web-client/features.md new file mode 100644 index 00000000..f118359e --- /dev/null +++ b/docs/builder/client/web-client/features.md @@ -0,0 +1,36 @@ +--- +title: Features +sidebar_position: 2 +--- + +# Features + +The Miden Web SDK offers a range of functionality for interacting with the Miden rollup directly from the browser. + +### Transaction execution + +The SDK facilitates the execution of transactions on the Miden rollup, allowing users to transfer assets, mint new tokens, swap tokens, and perform custom operations using Miden Assembly scripts. + +### Proof generation + +The Miden rollup supports user-generated proofs which are key to ensuring the validity of transactions. The SDK contains the functionality for executing, proving, and submitting transactions — all within the browser using WebAssembly. + +For better performance on complex transactions, proving can be offloaded to a remote prover. + +### Network interactivity + +The SDK enables users to interact with the Miden network. This includes syncing with the latest blockchain data and managing account information. + +The SDK also supports connectivity with the Miden Note Transport network for the exchange of private notes (end-to-end encryption coming soon). + +### Account generation + +The SDK provides features for generating and tracking accounts within the Miden rollup ecosystem. Users can create wallets, faucets, and custom contract accounts, and track their state and transaction history. + +### MASM compilation + +The SDK includes a built-in compiler for Miden Assembly (MASM), enabling developers to compile account components and transaction scripts directly in the browser without external tooling. + +### Browser-native architecture + +The SDK is compiled from Rust to WebAssembly and uses a dedicated Web Worker to offload computationally intensive operations (proving, syncing, wallet creation) off the main thread, keeping the UI responsive. diff --git a/docs/builder/client/web-client/get-started/_category_.yml b/docs/builder/client/web-client/get-started/_category_.yml new file mode 100644 index 00000000..c8bcefa2 --- /dev/null +++ b/docs/builder/client/web-client/get-started/_category_.yml @@ -0,0 +1,3 @@ +label: Getting Started +position: 3 +collapsed: true diff --git a/docs/builder/client/web-client/get-started/create-account-use-faucet.md b/docs/builder/client/web-client/get-started/create-account-use-faucet.md new file mode 100644 index 00000000..67a0b76d --- /dev/null +++ b/docs/builder/client/web-client/get-started/create-account-use-faucet.md @@ -0,0 +1,140 @@ +--- +title: Create account +sidebar_position: 1 +--- + +# Create account and use faucet + +In this tutorial, you'll create a new Miden wallet using the TypeScript SDK, request tokens from the public faucet, and consume them into your account. + +## Prerequisites + +- Completed [Installation](../install.md) +- Access to the [Miden faucet website](https://faucet.testnet.miden.io/) + +## 1. Initialize the client + +Create a client connected to the Miden testnet: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +// createTestnet() pre-configures the RPC endpoint and enables auto-sync +const client = await MidenClient.createTestnet(); +``` + +## 2. Create a new wallet + +Create a mutable wallet with private storage (the default): + +```typescript +const wallet = await client.accounts.create(); + +console.log("Account ID:", wallet.id().toString()); +console.log("Is private:", wallet.isPrivate()); // true +console.log("Is faucet:", wallet.isFaucet()); // false +``` + +Save the account ID — you'll need it when requesting tokens from the faucet. + +## 3. Request tokens from the faucet + +1. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). +2. Paste your account ID into the **Request test tokens** field. +3. Choose an amount and click **Send Public Note**. + +:::tip +Click **Send Public Note** rather than **Send Private Note**. Public notes are discoverable via sync, so you won't need to download and import a note file. +::: + +## 4. Sync the client + +After the faucet sends the note, sync your client to discover it: + +```typescript +const summary = await client.sync(); + +console.log("Synced to block:", summary.blockNum()); +console.log("Committed notes:", summary.committedNotes()); +``` + +The sync retrieves the public note created by the faucet. + +## 5. Consume the note + +Consume all available notes for your wallet to receive the tokens: + +```typescript +const result = await client.transactions.consumeAll({ account: wallet }); + +console.log(`Consumed ${result.consumed} notes`); +if (result.txId) { + console.log("Transaction ID:", result.txId.toString()); +} +``` + +Wait for the transaction to be confirmed: + +```typescript +if (result.txId) { + await client.transactions.waitFor(result.txId.toHex()); +} +``` + +## 6. Verify the balance + +Sync again to get the updated state, then check the balance: + +```typescript +await client.sync(); + +// Use the faucet account ID from the faucet website +const balance = await client.accounts.getBalance(wallet, "0xFAUCET_ID..."); +console.log(`Balance: ${balance}`); +``` + +## Complete example + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + // Initialize + const client = await MidenClient.createTestnet(); + + // Create wallet + const wallet = await client.accounts.create(); + console.log("Account ID:", wallet.id().toString()); + + // --- Request tokens from the faucet website using the account ID above --- + + // Sync to discover the faucet note + await client.sync(); + + // Consume notes + const result = await client.transactions.consumeAll({ account: wallet }); + console.log(`Consumed ${result.consumed} notes`); + + // Wait for confirmation + if (result.txId) { + await client.transactions.waitFor(result.txId.toHex()); + } + + // Verify balance + await client.sync(); + const balance = await client.accounts.getBalance(wallet, "0xFAUCET_ID..."); + console.log(`Balance: ${balance}`); + + // Clean up + client.terminate(); +} catch (error) { + console.error("Error:", error.message); +} +``` + +## Next steps + +Now that you have tokens, try transferring them: + +- [Public peer-to-peer transfer](./p2p-public.md) — send tokens using public notes +- [Private peer-to-peer transfer](./p2p-private.md) — send tokens using private notes diff --git a/docs/builder/client/web-client/get-started/index.md b/docs/builder/client/web-client/get-started/index.md new file mode 100644 index 00000000..d9f22890 --- /dev/null +++ b/docs/builder/client/web-client/get-started/index.md @@ -0,0 +1,28 @@ +--- +title: Getting started +sidebar_position: 0 +--- + +# Getting started + +This section shows you how to get started with the Miden Web SDK by creating accounts, requesting funds from a public faucet, and transferring assets between accounts — all from the browser using TypeScript. + +By the end of these tutorials, you will have: + +- Initialized the Miden client in a web application +- Created an account and requested funds from the faucet +- Transferred assets between accounts using public and private notes +- Tested SDK workflows locally using the mock client + +## Prerequisites + +- [Node.js](https://nodejs.org/) v18 or later +- A WASM-capable browser (Chrome, Firefox, Safari, Edge) +- The SDK installed in your project — see [Installation](../install.md) + +## Tutorials + +1. [Create account and use faucet](./create-account-use-faucet.md) — create a wallet, request testnet tokens, and consume them +2. [Public peer-to-peer transfer](./p2p-public.md) — send tokens between accounts using public notes +3. [Private peer-to-peer transfer](./p2p-private.md) — send tokens privately with note transport +4. [Mock client](./mock-client.md) — test the full workflow locally without a network connection diff --git a/docs/builder/client/web-client/get-started/mock-client.md b/docs/builder/client/web-client/get-started/mock-client.md new file mode 100644 index 00000000..8a9c869c --- /dev/null +++ b/docs/builder/client/web-client/get-started/mock-client.md @@ -0,0 +1,172 @@ +--- +title: Mock client +sidebar_position: 4 +--- + +# Mock client + +The mock client lets you test Miden SDK workflows entirely locally — no network connection or testnet access required. It simulates the Miden blockchain in-memory, making it ideal for development, testing, and experimentation. + +## How it differs from the real client + +The mock client provides the same resource-based API (`client.accounts.*`, `client.transactions.*`, etc.) with one key difference: the simulated environment does not create blocks automatically. You must call `client.proveBlock()` to advance the mock chain before syncing. + +## 1. Create the mock client + +```typescript +import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; + +const client = await MidenClient.createMock(); +``` + +## 2. Create a wallet and faucet + +Since there's no testnet faucet, you create your own faucet account: + +```typescript +const wallet = await client.accounts.create(); +const faucet = await client.accounts.create({ + type: AccountType.FungibleFaucet, + symbol: "TEST", + decimals: 8, + maxSupply: 10_000_000n +}); + +// Advance the chain so the accounts are committed +client.proveBlock(); +await client.sync(); +``` + +## 3. Mint tokens + +Mint tokens from your faucet to the wallet: + +```typescript +await client.transactions.mint({ + account: faucet, + to: wallet, + amount: 1000n +}); + +// Advance and sync +client.proveBlock(); +await client.sync(); +``` + +## 4. Consume notes + +Consume all available notes to receive the minted tokens: + +```typescript +const result = await client.transactions.consumeAll({ account: wallet }); +console.log(`Consumed ${result.consumed} notes`); + +// Advance and sync to confirm +client.proveBlock(); +await client.sync(); +``` + +## 5. Verify the balance + +```typescript +const balance = await client.accounts.getBalance(wallet, faucet); +console.log(`Balance: ${balance}`); // 1000 +``` + +## Complete example + +```typescript +import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.createMock(); + + // Create accounts + const wallet = await client.accounts.create(); + const faucet = await client.accounts.create({ + type: AccountType.FungibleFaucet, + symbol: "TEST", + decimals: 8, + maxSupply: 10_000_000n + }); + + client.proveBlock(); + await client.sync(); + + // Mint tokens + await client.transactions.mint({ + account: faucet, + to: wallet, + amount: 1000n + }); + + client.proveBlock(); + await client.sync(); + + // Consume notes + const result = await client.transactions.consumeAll({ account: wallet }); + console.log(`Consumed ${result.consumed} notes`); + + client.proveBlock(); + await client.sync(); + + // Verify balance + const balance = await client.accounts.getBalance(wallet, faucet); + console.log(`Balance: ${balance}`); + + client.terminate(); +} catch (error) { + console.error("Error:", error.message); +} +``` + +## Mock-only methods + +| Method | Description | +|--------|-------------| +| `client.proveBlock()` | Advance the mock chain by one block | +| `client.usesMockChain()` | Returns `true` for mock clients | +| `client.serializeMockChain()` | Serialize mock chain state for snapshot/restore | +| `client.serializeMockNoteTransportNode()` | Serialize mock note transport state | + +## Restoring from a snapshot + +You can save and restore mock chain state: + +```typescript +// Snapshot +const chainState = client.serializeMockChain(); +const transportState = client.serializeMockNoteTransportNode(); + +// Restore in a new client +const restored = await MidenClient.createMock({ + serializedMockChain: chainState, + serializedNoteTransport: transportState +}); +``` + +## Testing note transport + +The mock client includes a built-in note transport layer for testing private note delivery: + +```typescript +const client = await MidenClient.createMock(); + +// Send a private note +await client.notes.sendPrivate({ + noteId: "0xnote...", + to: "mtst1recipient..." +}); + +// Fetch private notes +await client.notes.fetchPrivate(); + +// List received notes +const notes = await client.notes.list(); +console.log(`Received ${notes.length} notes`); +``` + +## Next steps + +- [Library reference](../library/index.md) — detailed API documentation by topic +- [Examples](../examples.md) — practical code examples for common use cases diff --git a/docs/builder/client/web-client/get-started/p2p-private.md b/docs/builder/client/web-client/get-started/p2p-private.md new file mode 100644 index 00000000..6b771d47 --- /dev/null +++ b/docs/builder/client/web-client/get-started/p2p-private.md @@ -0,0 +1,162 @@ +--- +title: Private peer-to-peer transfer +sidebar_position: 3 +--- + +# Private peer-to-peer transfer + +In this tutorial, you'll send tokens between two accounts using private notes. Unlike public notes, private notes are not visible on-chain — only the note's commitment is recorded. This provides privacy for both the sender and recipient. + +:::info Prerequisites +- Complete the [Create account and use faucet](./create-account-use-faucet.md) tutorial first. +- You should have a funded wallet from that tutorial. +::: + +## 1. Set up sender and recipient + +Use the funded wallet from the previous tutorial as the sender, and create a new recipient wallet: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +const client = await MidenClient.createTestnet(); + +// Sender wallet (already funded) +const sender = await client.accounts.get("0xSENDER_ID..."); + +// Create a new recipient wallet (private storage by default) +const recipient = await client.accounts.create(); + +console.log("Sender:", sender.id().toString()); +console.log("Recipient:", recipient.id().toString()); +``` + +## 2. Send tokens with a private note + +Transfer tokens from the sender to the recipient using a private note: + +```typescript +const faucetId = "0xFAUCET_ID..."; + +const txId = await client.transactions.send({ + account: sender, + to: recipient, + token: faucetId, + amount: 50n, + type: "private" +}); + +console.log("Send transaction:", txId.toString()); +await client.transactions.waitFor(txId.toHex()); +``` + +## 3. Sync and consume + +Since both accounts are managed by the same client in this example, the private note details are already available locally. Sync and consume: + +```typescript +await client.sync(); + +const result = await client.transactions.consumeAll({ account: recipient }); +console.log(`Consumed ${result.consumed} notes`); + +if (result.txId) { + await client.transactions.waitFor(result.txId.toHex()); +} +``` + +## 4. Verify balances + +```typescript +await client.sync(); + +const senderBalance = await client.accounts.getBalance(sender, faucetId); +const recipientBalance = await client.accounts.getBalance(recipient, faucetId); + +console.log(`Sender balance: ${senderBalance}`); +console.log(`Recipient balance: ${recipientBalance}`); +``` + +## Using note transport for cross-client transfers + +When the sender and recipient use different clients (e.g., different users), the note transport network is needed to deliver the private note to the recipient. + +### Sender side + +After creating the private transaction, send the note through the note transport network: + +```typescript +// Get the note ID from the transaction's output notes +const sentNotes = await client.notes.listSent({ status: "committed" }); +const noteId = sentNotes[0].id().toString(); + +// Send via note transport — requires the recipient's bech32 address +await client.notes.sendPrivate({ + noteId: noteId, + to: "mtst1recipient..." +}); +``` + +### Recipient side + +The recipient fetches private notes and consumes them: + +```typescript +// Fetch private notes from the note transport network +await client.notes.fetchPrivate(); + +// Sync to update local state +await client.sync(); + +// Consume the received note +const result = await client.transactions.consumeAll({ account: recipient }); +console.log(`Consumed ${result.consumed} notes`); +``` + +:::note +The client fetches notes for tracked note tags. By default, note tags are derived from the recipient's account ID. For increased privacy, random tags can be used — track a specific tag with `client.tags.add(tag)`. +::: + +## Complete example + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.createTestnet(); + + const sender = await client.accounts.get("0xSENDER_ID..."); + const recipient = await client.accounts.create(); + const faucetId = "0xFAUCET_ID..."; + + // Send tokens via private note + const txId = await client.transactions.send({ + account: sender, + to: recipient, + token: faucetId, + amount: 50n, + type: "private" + }); + await client.transactions.waitFor(txId.toHex()); + + // Sync and consume + await client.sync(); + const result = await client.transactions.consumeAll({ account: recipient }); + if (result.txId) { + await client.transactions.waitFor(result.txId.toHex()); + } + + // Verify + await client.sync(); + const balance = await client.accounts.getBalance(recipient, faucetId); + console.log(`Recipient balance: ${balance}`); + + client.terminate(); +} catch (error) { + console.error("Error:", error.message); +} +``` + +## Next steps + +- [Mock client](./mock-client.md) — test the full workflow locally without a network connection diff --git a/docs/builder/client/web-client/get-started/p2p-public.md b/docs/builder/client/web-client/get-started/p2p-public.md new file mode 100644 index 00000000..004075c5 --- /dev/null +++ b/docs/builder/client/web-client/get-started/p2p-public.md @@ -0,0 +1,128 @@ +--- +title: Public peer-to-peer transfer +sidebar_position: 2 +--- + +# Public peer-to-peer transfer + +In this tutorial, you'll send tokens between two accounts using public notes. Public notes are discoverable by any client that syncs with the network, so the recipient doesn't need any out-of-band coordination. + +:::info Prerequisites +- Complete the [Create account and use faucet](./create-account-use-faucet.md) tutorial first. +- You should have a funded wallet from that tutorial. +::: + +## 1. Set up sender and recipient + +Use the funded wallet from the previous tutorial as the sender, and create a new wallet as the recipient: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +const client = await MidenClient.createTestnet(); + +// Sender wallet (already funded from faucet tutorial) +const sender = await client.accounts.get("0xSENDER_ID..."); + +// Create a new recipient wallet with public storage +const recipient = await client.accounts.create({ storage: "public" }); + +console.log("Sender:", sender.id().toString()); +console.log("Recipient:", recipient.id().toString()); +``` + +## 2. Send tokens with a public note + +Transfer tokens from the sender to the recipient using a public note: + +```typescript +const faucetId = "0xFAUCET_ID..."; + +const txId = await client.transactions.send({ + account: sender, + to: recipient, + token: faucetId, + amount: 50n, + type: "public" +}); + +console.log("Send transaction:", txId.toString()); +``` + +Wait for confirmation: + +```typescript +await client.transactions.waitFor(txId.toHex()); +``` + +## 3. Sync and consume on the recipient + +Sync the client to discover the public note, then consume it on the recipient account: + +```typescript +await client.sync(); + +const result = await client.transactions.consumeAll({ account: recipient }); +console.log(`Consumed ${result.consumed} notes`); + +if (result.txId) { + await client.transactions.waitFor(result.txId.toHex()); +} +``` + +## 4. Verify balances + +```typescript +await client.sync(); + +const senderBalance = await client.accounts.getBalance(sender, faucetId); +const recipientBalance = await client.accounts.getBalance(recipient, faucetId); + +console.log(`Sender balance: ${senderBalance}`); +console.log(`Recipient balance: ${recipientBalance}`); +``` + +## Complete example + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.createTestnet(); + + // Assume sender is already created and funded + const sender = await client.accounts.get("0xSENDER_ID..."); + const recipient = await client.accounts.create({ storage: "public" }); + const faucetId = "0xFAUCET_ID..."; + + // Send tokens via public note + const txId = await client.transactions.send({ + account: sender, + to: recipient, + token: faucetId, + amount: 50n, + type: "public" + }); + await client.transactions.waitFor(txId.toHex()); + + // Recipient syncs and consumes + await client.sync(); + const result = await client.transactions.consumeAll({ account: recipient }); + if (result.txId) { + await client.transactions.waitFor(result.txId.toHex()); + } + + // Verify + await client.sync(); + const balance = await client.accounts.getBalance(recipient, faucetId); + console.log(`Recipient balance: ${balance}`); + + client.terminate(); +} catch (error) { + console.error("Error:", error.message); +} +``` + +## Next steps + +- [Private peer-to-peer transfer](./p2p-private.md) — send tokens privately using note transport diff --git a/docs/builder/client/web-client/index.md b/docs/builder/client/web-client/index.md new file mode 100644 index 00000000..9e0e326a --- /dev/null +++ b/docs/builder/client/web-client/index.md @@ -0,0 +1,15 @@ +--- +title: TypeScript +--- + +# Overview + +The Miden Web SDK (`@miden-sdk/ts-sdk`) is a browser-focused toolkit for interacting with the Miden blockchain from web applications. It wraps core functionality from the Miden Rust client and compiles to WebAssembly with TypeScript bindings, making it ideal for wallets, dApps, and browser-based developer tools. + +- [Installation](./install.md) — install the SDK via NPM +- [Getting started](./get-started/index.md) — step-by-step tutorials +- [Features](./features.md) — what the SDK can do +- [Design](./design.md) — architecture and components +- [Library reference](./library/index.md) — detailed API usage by topic +- [Examples](./examples.md) — practical code examples +- [API reference](./api-docs.md) — TypeDoc API documentation diff --git a/docs/builder/client/web-client/install.md b/docs/builder/client/web-client/install.md new file mode 100644 index 00000000..be7da618 --- /dev/null +++ b/docs/builder/client/web-client/install.md @@ -0,0 +1,37 @@ +--- +title: Installation +sidebar_position: 1 +--- + +# Installation + +## Prerequisites + +- [Node.js](https://nodejs.org/) v18 or later +- A WASM-capable browser (Chrome, Firefox, Safari, Edge) + +## Install the SDK + +```bash +npm install @miden-sdk/ts-sdk +# or +yarn add @miden-sdk/ts-sdk +``` + +## Verify the installation + +Create a quick test to confirm everything works: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +const client = await MidenClient.create(); +console.log("Miden SDK initialized successfully"); +client.terminate(); +``` + +If the client initializes without errors, you're ready to go. + +:::tip +Use `MidenClient.createTestnet()` to connect to the Miden testnet with sensible defaults (auto-sync enabled, testnet RPC endpoint pre-configured). +::: diff --git a/docs/builder/client/web-client/library/_category_.yml b/docs/builder/client/web-client/library/_category_.yml new file mode 100644 index 00000000..57175926 --- /dev/null +++ b/docs/builder/client/web-client/library/_category_.yml @@ -0,0 +1,3 @@ +label: Library +position: 5 +collapsed: true diff --git a/docs/builder/client/web-client/library/accounts.md b/docs/builder/client/web-client/library/accounts.md new file mode 100644 index 00000000..db6e6aef --- /dev/null +++ b/docs/builder/client/web-client/library/accounts.md @@ -0,0 +1,105 @@ +--- +title: Accounts +sidebar_position: 1 +--- + +# Retrieving Accounts with the Miden SDK + +This guide demonstrates how to retrieve and work with existing accounts using the Miden SDK. + +## Retrieving a Single Account + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Get account by hex string, bech32 string, or AccountId object + const account = await client.accounts.get("0x1234..."); + + if (!account) { + console.log("Account not found"); + return; + } + + console.log(account.id().toString()); + console.log(account.nonce().toString()); + console.log(account.isPublic()); + console.log(account.isFaucet()); +} catch (error) { + console.error("Failed to retrieve account:", error.message); +} +``` + +## Listing All Accounts + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + const accounts = await client.accounts.list(); + + for (const header of accounts) { + console.log(header.id().toString()); + console.log(header.nonce().toString()); + } +} catch (error) { + console.error("Failed to retrieve accounts:", error.message); +} +``` + +## Getting Account Details + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Returns { account, vault, storage, code, keys } in a single call + const details = await client.accounts.getDetails("0x1234..."); + + console.log(details.account.id().toString()); + console.log(details.vault); + console.log(details.storage); + console.log(details.code); + console.log(details.keys); +} catch (error) { + console.error("Failed to get account details:", error.message); +} +``` + +## Checking Account Balance + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Quick balance check (wraps accountReader) + const balance = await client.accounts.getBalance("0xACCOUNT...", "0xFAUCET..."); + console.log(`Balance: ${balance}`); +} catch (error) { + console.error("Failed to get balance:", error.message); +} +``` + +## Address Management + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + await client.accounts.addAddress("0xACCOUNT...", "mtst1address..."); + await client.accounts.removeAddress("0xACCOUNT...", "mtst1address..."); +} catch (error) { + console.error("Failed to manage address:", error.message); +} +``` + +> **Note:** `get()` returns `null` when an account is not found. All other methods (`getDetails()`, `getBalance()`, `export()`) throw `"Account not found: 0x..."` if the account doesn't exist. diff --git a/docs/builder/client/web-client/library/compile.md b/docs/builder/client/web-client/library/compile.md new file mode 100644 index 00000000..dd4eff44 --- /dev/null +++ b/docs/builder/client/web-client/library/compile.md @@ -0,0 +1,212 @@ +--- +title: Compile +sidebar_position: 3 +--- + +# Compiling MASM with the Miden SDK + +`client.compile` exposes two methods for compiling Miden Assembly (MASM) code directly from the browser without needing a direct reference to the low-level `WasmWebClient`: + +| Method | Purpose | +|--------|---------| +| `compile.component({ code, slots })` | Compile MASM + storage slots into an `AccountComponent` for contract creation | +| `compile.txScript({ code, libraries? })` | Compile a transaction script, optionally linking inline libraries | + +Each call creates a **fresh `CodeBuilder`**, so libraries linked in one call never leak into another. + +## Compiling an Account Component + +```typescript +import { MidenClient, StorageSlot } from "@miden-sdk/ts-sdk"; + +const contractCode = ` + use miden::protocol::active_account + use miden::protocol::native_account + use miden::core::word + use miden::core::sys + + const COUNTER_SLOT = word("miden::tutorials::counter") + + pub proc get_count + push.COUNTER_SLOT[0..2] exec.active_account::get_item + exec.sys::truncate_stack + end + + pub proc increment_count + push.COUNTER_SLOT[0..2] exec.active_account::get_item + add.1 + push.COUNTER_SLOT[0..2] exec.native_account::set_item + exec.sys::truncate_stack + end +`; + +try { + const client = await MidenClient.create(); + + const component = await client.compile.component({ + code: contractCode, + slots: [StorageSlot.emptyValue("miden::tutorials::counter")] + }); + + // component is ready to pass to client.accounts.create() + console.log("Component compiled"); + + // Extract the hash of a specific procedure (needed for FPI) + const getCountHash = component.getProcedureHash("get_count"); + console.log("get_count hash:", getCountHash); +} catch (error) { + console.error("Compilation failed:", error.message); +} +``` + +## Compiling a Transaction Script + +### Without libraries + +```typescript +try { + const client = await MidenClient.create(); + + const script = await client.compile.txScript({ + code: ` + use external_contract::counter_contract + begin + call.counter_contract::increment_count + end + ` + }); + + // script is ready to pass to client.transactions.execute() +} catch (error) { + console.error("Script compilation failed:", error.message); +} +``` + +### With inline libraries + +Pass an array of `{ namespace, code, linking? }` objects. The compiler builds each library and links it automatically: + +```typescript +try { + const client = await MidenClient.create(); + + const script = await client.compile.txScript({ + code: ` + use external_contract::my_contract + use miden::core::sys + begin + call.my_contract::do_something + exec.sys::truncate_stack + end + `, + libraries: [ + { + namespace: "external_contract::my_contract", + code: myContractCode, + // linking: "dynamic" (default) | "static" + } + ] + }); +} catch (error) { + console.error("Script compilation failed:", error.message); +} +``` + +#### `linking` modes + +| Value | Behaviour | When to use | +|-------|-----------|-------------| +| `"dynamic"` (default) | Links without copying the library code into the script | FPI — the foreign contract lives on-chain; the prover fetches its code at prove time | +| `"static"` | Copies library code into the script | Off-chain libraries that must be self-contained | + +## Getting a Procedure Hash (for FPI) + +Foreign procedure invocation (FPI) requires knowing the **hash** of the target procedure. Compile the foreign contract's component and call `getProcedureHash()`: + +```typescript +try { + const client = await MidenClient.create(); + + const counterComponent = await client.compile.component({ + code: counterContractCode, + slots: [StorageSlot.emptyValue("miden::tutorials::counter")] + }); + + const getCountHash = counterComponent.getProcedureHash("get_count"); + + // Use the hash in the transaction script + const script = await client.compile.txScript({ + code: ` + use external_contract::count_reader_contract + use miden::core::sys + begin + push.${getCountHash} + push.${counterAccountId.suffix()} + push.${counterAccountId.prefix()} + call.count_reader_contract::copy_count + exec.sys::truncate_stack + end + `, + libraries: [ + { namespace: "external_contract::count_reader_contract", code: countReaderCode } + ] + }); +} catch (error) { + console.error("FPI script compilation failed:", error.message); +} +``` + +## Full Example: Compile → Create Contract → Execute Script + +```typescript +import { MidenClient, AccountType, AuthSecretKey, StorageSlot } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + await client.sync(); + + // 1. Compile the contract component + const component = await client.compile.component({ + code: counterCode, + slots: [StorageSlot.emptyValue("miden::tutorials::counter")] + }); + + // 2. Create the contract account + const seed = crypto.getRandomValues(new Uint8Array(32)); + const auth = AuthSecretKey.rpoFalconWithRNG(seed); + + const contract = await client.accounts.create({ + type: AccountType.ImmutableContract, + seed, + auth, + components: [component] + }); + + await client.sync(); + + // 3. Compile the transaction script + const script = await client.compile.txScript({ + code: ` + use external_contract::counter_contract + begin + call.counter_contract::increment_count + end + `, + libraries: [ + { namespace: "external_contract::counter_contract", code: counterCode } + ] + }); + + // 4. Execute the transaction + const txId = await client.transactions.execute({ + account: contract.id(), + script + }); + + console.log("Transaction ID:", txId.toHex()); +} catch (error) { + console.error("Failed:", error.message); +} +``` + +See [Creating transactions](./new-transactions.md) for full details on `transactions.execute()`. diff --git a/docs/builder/client/web-client/library/export.md b/docs/builder/client/web-client/library/export.md new file mode 100644 index 00000000..8274b5a0 --- /dev/null +++ b/docs/builder/client/web-client/library/export.md @@ -0,0 +1,74 @@ +--- +title: Export +sidebar_position: 5 +--- + +# Exporting Data with the Miden SDK + +This guide demonstrates how to export accounts, notes, and store data using the Miden SDK. + +## Exporting Notes + +Export a note with different levels of detail: + +```typescript +import { MidenClient, NoteExportFormat } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Export with just the note ID + const idExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Id }); + + // Export with full details including inclusion proof + const fullExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Full }); + + // Export with note details including metadata and creation block + const detailsExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Details }); +} catch (error) { + console.error("Failed to export note:", error.message); +} +``` + +Export formats: + +- `NoteExportFormat.Id` — Exports only the note ID (only works for public notes) +- `NoteExportFormat.Full` — Exports the complete note with its inclusion proof (requires the note to have an inclusion proof) +- `NoteExportFormat.Details` — Exports note details including metadata and the creation block number + +## Exporting Accounts + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const accountFile = await client.accounts.export("0x1234..."); + console.log("Account exported:", accountFile); +} catch (error) { + console.error("Failed to export account:", error.message); +} +``` + +Account files include the full account state, code, seed (if new), and tracked secret keys. + +## Exporting the Store + +Export the entire client store for backup or migration: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const snapshot = await client.exportStore(); + console.log("Store exported:", snapshot); + + // The snapshot has the shape { version: 1, data: ... } + // You can save this and later restore with client.importStore(snapshot) +} catch (error) { + console.error("Failed to export store:", error.message); +} +``` diff --git a/docs/builder/client/web-client/library/import.md b/docs/builder/client/web-client/library/import.md new file mode 100644 index 00000000..60f8efec --- /dev/null +++ b/docs/builder/client/web-client/library/import.md @@ -0,0 +1,116 @@ +--- +title: Import +sidebar_position: 4 +--- + +# Importing Data with the Miden SDK + +This guide demonstrates how to import accounts, notes, and store data using the Miden SDK. + +## Importing Accounts + +### Importing by Account ID + +Import a public account by its ID (fetches state from the network): + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const account = await client.accounts.import("0x1234..."); + console.log("Imported account:", account.id().toString()); +} catch (error) { + console.error("Failed to import account:", error.message); +} +``` + +### Importing from an Account File + +Import an account that was previously exported: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // accountFile should be the result of a previous client.accounts.export() + const account = await client.accounts.import({ file: accountFile }); + console.log("Imported account:", account.id().toString()); +} catch (error) { + console.error("Failed to import account:", error.message); +} +``` + +### Importing a Public Account from Seed + +:::warning[Public accounts only] +Import-by-seed **only works for public accounts** — those originally created with `storage: "public"`. Private account state is not available on-chain, so it cannot be reconstructed from a seed alone. To transfer a private account between clients, use the [account file export/import](#importing-from-an-account-file) workflow instead. +::: + +Import a public account using an initialization seed: + +```typescript +import { MidenClient, AccountType, AuthScheme } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const account = await client.accounts.import({ + seed: initSeed, // Uint8Array + type: AccountType.MutableWallet, // AccountType.MutableWallet (default) or AccountType.ImmutableWallet + auth: AuthScheme.Falcon // Optional auth scheme + }); + console.log("Imported account:", account.id().toString()); +} catch (error) { + console.error("Failed to import public account:", error.message); +} +``` + +## Importing Notes + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // noteFile should be the result of a previous client.notes.export() + const noteId = await client.notes.import(noteFile); + console.log("Imported note:", noteId); +} catch (error) { + console.error("Failed to import note:", error.message); +} +``` + +### Note File Types + +There are three types of note files: + +1. **ID Note File** — Contains only the note ID and metadata +2. **Full Note File** — Contains complete note data including content and inclusion proof +3. **Details Note File** — Contains the note ID, metadata, and note details + +## Importing Store Data + +To import an entire store snapshot (overwrites current store): + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // snapshot should be the result of a previous client.exportStore() + await client.importStore(snapshot); + console.log("Store imported successfully"); +} catch (error) { + console.error("Failed to import store:", error.message); +} +``` + +:::warning +`importStore` is a destructive operation that completely overwrites the current store. Ensure you have a backup if needed. +::: diff --git a/docs/builder/client/web-client/library/index.md b/docs/builder/client/web-client/library/index.md new file mode 100644 index 00000000..9874e910 --- /dev/null +++ b/docs/builder/client/web-client/library/index.md @@ -0,0 +1,80 @@ +--- +title: Library +sidebar_position: 0 +--- + +# Library + +The `@miden-sdk/ts-sdk` package provides a resource-based TypeScript API for interacting with the Miden rollup from the browser. + +## Client initialization + +The SDK provides several factory methods to create a client: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +// Default client (connects to localhost) +const client = await MidenClient.create(); + +// Testnet client (pre-configured RPC, auto-sync enabled) +const client = await MidenClient.createTestnet(); + +// Mock client (no network, for testing) +const client = await MidenClient.createMock(); + +// With custom options +const client = await MidenClient.create({ + rpcUrl: "http://localhost:57291", + autoSync: true, + proverUrl: "https://prover.example.com" +}); +``` + +## Resource-based API + +The client organizes functionality into resource namespaces: + +| Namespace | Purpose | Reference | +|-----------|---------|-----------| +| `client.accounts.*` | Create, retrieve, import, export accounts | [Accounts](./accounts.md), [New accounts](./new-accounts.md) | +| `client.transactions.*` | Mint, send, consume, swap, execute transactions | [New transactions](./new-transactions.md), [Transactions](./transactions.md) | +| `client.notes.*` | List, import, export, send/fetch private notes | [Notes](./notes.md), [Note transport](./note-transport.md) | +| `client.compile.*` | Compile MASM components and transaction scripts | [Compile](./compile.md) | +| `client.tags.*` | Manage note tags for sync filtering | [Tags](./tags.md) | +| `client.sync()` | Synchronize local state with the network | [Sync](./sync.md) | + +Additional top-level methods: + +| Method | Purpose | +|--------|---------| +| `client.importStore(snapshot)` | Import a store snapshot ([Import](./import.md)) | +| `client.exportStore()` | Export the store for backup ([Export](./export.md)) | +| `client.getSyncHeight()` | Get the current sync block height | +| `client.terminate()` | Release the Web Worker thread | + +## Resource management + +Each `MidenClient` holds a dedicated Web Worker thread. When you're done with a client instance, call `terminate()` to release the worker: + +```typescript +const client = await MidenClient.create({ rpcUrl }); + +// ... use the client ... + +// Clean up when done +client.terminate(); +``` + +Or use explicit resource management (TC39 proposal): + +```typescript +{ + using client = await MidenClient.create(); + // client.terminate() called automatically at end of scope +} +``` + +:::warning +After calling `terminate()`, all subsequent method calls will throw `Error("Client terminated")`. +::: diff --git a/docs/builder/client/web-client/library/mock.md b/docs/builder/client/web-client/library/mock.md new file mode 100644 index 00000000..2372bce7 --- /dev/null +++ b/docs/builder/client/web-client/library/mock.md @@ -0,0 +1,110 @@ +--- +title: Working with the mock client +draft: true +sidebar_position: 12 +--- + +# Working with the Mock Client + +The mock client is useful for testing and development, as it simulates interactions with the Miden blockchain without requiring a live network connection. + +The mock client provides the same resource-based API as the real client (`client.accounts.*`, `client.transactions.*`, etc.) plus mock-specific methods like `proveBlock()`. The simulated environment does not create blocks automatically, so `proveBlock()` must be called manually. + +## Basic Usage + +```typescript +import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; + +try { + // Create a mock client + const client = await MidenClient.createMock(); + + // Create accounts (same API as the real client) + const wallet = await client.accounts.create(); + const faucet = await client.accounts.create({ + type: AccountType.FungibleFaucet, + symbol: "TEST", + decimals: 8, + maxSupply: 10_000_000n + }); + + // Advance the mock chain + client.proveBlock(); + await client.sync(); + + // Mint tokens + await client.transactions.mint({ + account: faucet, + to: wallet, + amount: 1000n + }); + + // Advance and sync again + client.proveBlock(); + await client.sync(); + + // Consume all available notes + const result = await client.transactions.consumeAll({ account: wallet }); + console.log(`Consumed ${result.consumed} notes`); + + // Advance and sync to confirm + client.proveBlock(); + await client.sync(); + + // Check balance + const balance = await client.accounts.getBalance(wallet, faucet); + console.log(`Balance: ${balance}`); +} catch (error) { + console.error("Error:", error.message); +} +``` + +## Mock-Only Methods + +- `client.proveBlock()` — Advances the mock chain by one block +- `client.usesMockChain()` — Returns `true` for mock clients +- `client.serializeMockChain()` — Serializes mock chain state for snapshot/restore +- `client.serializeMockNoteTransportNode()` — Serializes mock note transport state + +## Restoring from Snapshot + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +// Create and use a mock client +const client = await MidenClient.createMock(); +// ... do some operations ... + +// Snapshot the state +const chainState = client.serializeMockChain(); +const transportState = client.serializeMockNoteTransportNode(); + +// Restore in a new client +const restored = await MidenClient.createMock({ + serializedMockChain: chainState, + serializedNoteTransport: transportState +}); +``` + +## Working with Note Transport + +The mock client includes a built-in note transport layer for testing private note delivery: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +const client = await MidenClient.createMock(); + +// Send a private note +await client.notes.sendPrivate({ + noteId: "0xnote...", + to: "mtst1recipient..." +}); + +// Fetch private notes +await client.notes.fetchPrivate(); + +// List received notes +const notes = await client.notes.list(); +console.log(`Received ${notes.length} notes`); +``` diff --git a/docs/builder/client/web-client/library/new-accounts.md b/docs/builder/client/web-client/library/new-accounts.md new file mode 100644 index 00000000..2b0e7cbd --- /dev/null +++ b/docs/builder/client/web-client/library/new-accounts.md @@ -0,0 +1,143 @@ +--- +title: New Accounts +sidebar_position: 2 +--- + +# Creating Accounts with the Miden SDK + +This guide demonstrates how to create and work with different types of accounts using the Miden SDK. + +## Creating a Regular Wallet Account + +```typescript +import { MidenClient, AccountType, AuthScheme } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Default wallet (private storage, mutable, Falcon auth) + const wallet = await client.accounts.create(); + + // Wallet with custom options + const wallet2 = await client.accounts.create({ + storage: "public", // "private" or "public" + type: AccountType.ImmutableWallet, // AccountType.MutableWallet (default) or AccountType.ImmutableWallet + auth: AuthScheme.ECDSA, // AuthScheme.Falcon (default) or AuthScheme.ECDSA + seed: "my-seed" // Optional deterministic seed (auto-hashed) + }); + + // Access account properties + console.log(wallet.id().toString()); // Unique identifier (hex) + console.log(wallet.nonce().toString()); // Current nonce (starts at 0) + console.log(wallet.isPublic()); // false + console.log(wallet.isPrivate()); // true + console.log(wallet.isFaucet()); // false + console.log(wallet.isRegularAccount()); // true +} catch (error) { + console.error("Failed to create wallet:", error.message); +} +``` + +## Creating a Custom Contract Account + +Custom contracts are regular accounts whose code is provided by the caller. Use `AccountType.ImmutableContract` (code cannot be updated after deployment) or `AccountType.MutableContract` (code can be updated). + +### Compiling the contract component + +Use `client.compile.component()` to compile Miden Assembly (MASM) code into an `AccountComponent`. See the [Compiler resource guide](./compile.md) for full details. + +```typescript +import { MidenClient, AccountType, AuthSecretKey, StorageSlot } from "@miden-sdk/ts-sdk"; + +const counterCode = ` + use miden::protocol::active_account + use miden::protocol::native_account + use miden::core::word + use miden::core::sys + + const COUNTER_SLOT = word("miden::tutorials::counter") + + pub proc get_count + push.COUNTER_SLOT[0..2] exec.active_account::get_item + exec.sys::truncate_stack + end + + pub proc increment_count + push.COUNTER_SLOT[0..2] exec.active_account::get_item + add.1 + push.COUNTER_SLOT[0..2] exec.native_account::set_item + exec.sys::truncate_stack + end +`; + +try { + const client = await MidenClient.create(); + + // Compile the MASM component (fresh CodeBuilder per call) + const component = await client.compile.component({ + code: counterCode, + slots: [StorageSlot.emptyValue("miden::tutorials::counter")] + }); + + // Generate a seed for deterministic account ID derivation + const seed = crypto.getRandomValues(new Uint8Array(32)); + + // auth must be kept by the caller for signing + const auth = AuthSecretKey.rpoFalconWithRNG(seed); + + // Create the contract — storage defaults to "public" for contracts + const contract = await client.accounts.create({ + type: AccountType.ImmutableContract, + seed, + auth, + components: [component] + }); + + console.log("Contract ID:", contract.id().toString()); + console.log("Is public:", contract.isPublic()); // true +} catch (error) { + console.error("Failed to create contract:", error.message); +} +``` + +### Storage mode + +Unlike wallets (which default to `"private"`), contracts default to `"public"` so other accounts can read their state for foreign procedure invocation (FPI). Pass `storage: "private"` to override. + +### Auth key + +`auth` must be a concrete `AuthSecretKey` object (not a string scheme). The caller must retain it — the client uses it for signing during `transactions.execute()`. + +## Creating a Faucet Account + +```typescript +import { MidenClient, AccountType, AuthScheme } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Create faucet — only required fields + const faucet = await client.accounts.create({ + type: AccountType.FungibleFaucet, + symbol: "TEST", + decimals: 8, + maxSupply: 10_000_000n // Accepts number or bigint + }); + + // With custom options + const faucet2 = await client.accounts.create({ + type: AccountType.FungibleFaucet, + symbol: "DAG", + decimals: 8, + maxSupply: 10_000_000n, + storage: "public", + auth: AuthScheme.Falcon + }); + + console.log(faucet.id().toString()); + console.log(faucet.isFaucet()); // true + console.log(faucet.isRegularAccount()); // false +} catch (error) { + console.error("Failed to create faucet:", error.message); +} +``` diff --git a/docs/builder/client/web-client/library/new-transactions.md b/docs/builder/client/web-client/library/new-transactions.md new file mode 100644 index 00000000..3ec07631 --- /dev/null +++ b/docs/builder/client/web-client/library/new-transactions.md @@ -0,0 +1,333 @@ +--- +title: New Transactions +sidebar_position: 9 +--- + +# Creating Transactions with the Miden SDK + +This guide demonstrates how to create and submit different types of transactions using the Miden SDK. We'll cover minting, sending, consuming, and swapping. + +## Basic Transaction Flow + +The simplified API handles the full transaction lifecycle automatically (execute, prove, submit). Each transaction method returns a transaction ID. + +```typescript +import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const faucet = await client.accounts.create({ + type: AccountType.FungibleFaucet, symbol: "TEST", decimals: 8, maxSupply: 10_000_000n + }); + const wallet = await client.accounts.create(); + + // Mint tokens — all steps handled automatically + const mintTxId = await client.transactions.mint({ + account: faucet, + to: wallet, + amount: 1000n + }); + console.log("Mint transaction:", mintTxId.toString()); + + // Wait for confirmation + await client.transactions.waitFor(mintTxId.toHex()); +} catch (error) { + console.error("Transaction failed:", error.message); +} +``` + +## Sending Tokens + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const txId = await client.transactions.send({ + account: senderWallet, + to: recipientWallet, + token: faucet, + amount: 100n, + type: "private", // "public" or "private" (default: "public") + reclaimAfter: 100, // Optional: block height for reclaim + timelockUntil: 90 // Optional: block height for timelock + }); + console.log("Send transaction:", txId.toString()); +} catch (error) { + console.error("Send failed:", error.message); +} +``` + +## Minting Tokens + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const txId = await client.transactions.mint({ + account: faucet, // The faucet account + to: wallet, // Recipient account + amount: 1000n, // Amount to mint + type: "private" // Optional (default: "public") + }); + console.log("Mint transaction:", txId.toString()); +} catch (error) { + console.error("Mint failed:", error.message); +} +``` + +## Consuming Notes + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Consume specific notes + const txId = await client.transactions.consume({ + account: wallet, + notes: [noteId1, noteId2] // Note IDs, InputNoteRecords, or Note objects + }); + + // Consume all available notes for an account + const result = await client.transactions.consumeAll({ account: wallet }); + console.log(`Consumed ${result.consumed} notes, ${result.remaining} remaining`); + if (result.txId) { + console.log("Transaction:", result.txId.toString()); + } + + // Limit the number of notes consumed + const limited = await client.transactions.consumeAll({ + account: wallet, + maxNotes: 5 + }); +} catch (error) { + console.error("Consume failed:", error.message); +} +``` + +## Swap Transactions + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const txId = await client.transactions.swap({ + account: wallet, + offer: { token: faucetA, amount: 100n }, + request: { token: faucetB, amount: 200n }, + type: "public" + }); + console.log("Swap transaction:", txId.toString()); +} catch (error) { + console.error("Swap failed:", error.message); +} +``` + +## Using a Remote Prover + +For better performance, offload proving to a remote prover: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + // Set a default prover URL for all transactions + const client = await MidenClient.create({ + proverUrl: "https://prover.example.com" + }); + + // All transactions automatically use the remote prover + const txId = await client.transactions.mint({ + account: faucet, + to: wallet, + amount: 1000n + }); + + // Or override per-transaction + const txId2 = await client.transactions.send({ + account: wallet, + to: recipient, + token: faucet, + amount: 100n, + prover: customProver // TransactionProver instance + }); +} catch (error) { + console.error("Transaction failed:", error.message); +} +``` + +:::note +Using a remote prover can significantly improve performance for complex transactions by offloading the computationally intensive proving work to a dedicated server. +::: + +## Waiting for Confirmation + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const txId = await client.transactions.mint({ + account: faucet, to: wallet, amount: 1000n + }); + + // Wait with default settings (60s timeout, 5s interval) + await client.transactions.waitFor(txId.toHex()); + + // Wait with custom options + await client.transactions.waitFor(txId.toHex(), { + timeout: 120_000, // 2 minutes + interval: 3_000, // Check every 3 seconds + onProgress: (status) => { + console.log(`Status: ${status}`); // "pending", "submitted", or "committed" + } + }); +} catch (error) { + console.error("Wait failed:", error.message); +} +``` + +## Transaction Preview + +Preview a transaction without submitting it: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const summary = await client.transactions.preview({ + operation: "send", + account: wallet, + to: recipient, + token: faucet, + amount: 100n + }); + console.log("Preview result:", summary); +} catch (error) { + console.error("Preview failed:", error.message); +} +``` + +## Custom Script Transactions + +Use `transactions.execute()` to run a custom MASM transaction script against an account. Compile the script first with [`client.compile.txScript()`](./compile.md). + +```typescript +import { MidenClient, AccountType, AuthSecretKey, StorageSlot } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Compile the script (and any libraries it depends on) + const script = await client.compile.txScript({ + code: ` + use external_contract::counter_contract + begin + call.counter_contract::increment_count + end + `, + libraries: [ + { namespace: "external_contract::counter_contract", code: counterContractCode } + ] + }); + + // Execute the script against the contract account + const txId = await client.transactions.execute({ + account: contractAccount.id(), + script + }); + + console.log("Transaction ID:", txId.toHex()); +} catch (error) { + console.error("Custom transaction failed:", error.message); +} +``` + +### Foreign Procedure Invocation (FPI) + +Pass `foreignAccounts` to allow the transaction to read state from other contracts: + +```typescript +try { + const client = await MidenClient.create(); + + // Get the procedure hash of the foreign contract's function + const counterComponent = await client.compile.component({ + code: counterContractCode, + slots: [StorageSlot.emptyValue("miden::tutorials::counter")] + }); + const getCountHash = counterComponent.getProcedureHash("get_count"); + + // Compile the FPI script + const script = await client.compile.txScript({ + code: ` + use external_contract::count_reader_contract + use miden::core::sys + begin + push.${getCountHash} + push.${counterAccount.id().suffix()} + push.${counterAccount.id().prefix()} + call.count_reader_contract::copy_count + exec.sys::truncate_stack + end + `, + libraries: [ + // "dynamic" linking (default) — foreign contract code lives on-chain + { namespace: "external_contract::count_reader_contract", code: countReaderCode } + ] + }); + + const txId = await client.transactions.execute({ + account: countReaderAccount.id(), + script, + foreignAccounts: [ + // Bare AccountRef — client fetches storage requirements automatically + counterAccount.id(), + // Or with explicit storage requirements: + // { id: counterAccount.id(), storage: requirements } + ] + }); + + console.log("FPI transaction:", txId.toHex()); +} catch (error) { + console.error("FPI transaction failed:", error.message); +} +``` + +### Advanced: Manual Transaction Request + +For full control over note inputs/outputs, build a `TransactionRequest` manually and call `submit()`: + +```typescript +import { MidenClient, TransactionRequestBuilder } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const request = new TransactionRequestBuilder() + .withCustomScript(transactionScript) + .withOwnOutputNotes(outputNotes) + .withExpectedOutputNotes(expectedNotes) + .build(); + + const txId = await client.transactions.submit(wallet, request); + console.log("Custom transaction:", txId.toString()); +} catch (error) { + console.error("Custom transaction failed:", error.message); +} +``` + +:::note +Custom transactions require understanding of the Miden VM and its instruction set. See the integration tests in [`new_transactions.test.ts`](https://github.com/0xMiden/wasm-bridge/blob/main/test/new_transactions.test.ts) for examples. +::: diff --git a/docs/builder/client/web-client/library/note-transport.md b/docs/builder/client/web-client/library/note-transport.md new file mode 100644 index 00000000..3c1ddf73 --- /dev/null +++ b/docs/builder/client/web-client/library/note-transport.md @@ -0,0 +1,51 @@ +--- +title: Note Transport +sidebar_position: 11 +--- + +# Note Transport with the Miden SDK + +This guide demonstrates how to use the note transport features in the Miden SDK. Note transport allows you to send and receive private notes using the Miden Note Transport network. + +## Sending Private Notes + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Send a private note to a recipient address + await client.notes.sendPrivate({ + noteId: "0xnote...", // ID of the note to send + to: "mtst1recipient..." // Recipient bech32 address + }); + + console.log("Private note sent successfully"); +} catch (error) { + console.error("Failed to send private note:", error.message); +} +``` + +## Fetching Private Notes + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Fetch private notes using pagination (default) + await client.notes.fetchPrivate(); + + // Or fetch all private notes at once + // (reserve for special cases like initial setup) + await client.notes.fetchPrivate({ mode: "all" }); + + // List the fetched notes + const notes = await client.notes.list(); + console.log(`Fetched ${notes.length} notes`); +} catch (error) { + console.error("Failed to fetch private notes:", error.message); +} +``` diff --git a/docs/builder/client/web-client/library/notes.md b/docs/builder/client/web-client/library/notes.md new file mode 100644 index 00000000..17d75cbd --- /dev/null +++ b/docs/builder/client/web-client/library/notes.md @@ -0,0 +1,140 @@ +--- +title: Notes +sidebar_position: 6 +--- + +# Working with Notes in the Miden SDK + +This guide demonstrates how to work with notes in the Miden SDK. Notes are the primary way to transfer assets and data between accounts in the Miden network. + +## Listing Notes + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // List all input notes (received) + const allNotes = await client.notes.list(); + + // Filter by status + const committed = await client.notes.list({ status: "committed" }); + const consumed = await client.notes.list({ status: "consumed" }); + const expected = await client.notes.list({ status: "expected" }); + const processing = await client.notes.list({ status: "processing" }); + const unverified = await client.notes.list({ status: "unverified" }); + + // Filter by specific IDs + const specific = await client.notes.list({ ids: [noteId1, noteId2] }); + + for (const note of allNotes) { + console.log("Note ID:", note.id().toString()); + } +} catch (error) { + console.error("Failed to retrieve notes:", error.message); +} +``` + +## Retrieving a Single Note + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Get a single input note by ID (returns null if not found) + const note = await client.notes.get("0xnote..."); + if (note) { + console.log("Note ID:", note.id().toString()); + } +} catch (error) { + console.error("Failed to retrieve note:", error.message); +} +``` + +## Listing Sent Notes (Output Notes) + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // List all sent (output) notes + const sentNotes = await client.notes.listSent(); + + // Filter sent notes by status + const committedSent = await client.notes.listSent({ status: "committed" }); + + for (const note of sentNotes) { + console.log("Sent Note ID:", note.id().toString()); + } +} catch (error) { + console.error("Failed to retrieve sent notes:", error.message); +} +``` + +## Listing Consumable Notes + +Consumable notes are notes that can be spent by a specific account: + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + const wallet = await client.accounts.create(); + + // Get consumable notes for a specific account + const records = await client.notes.listAvailable({ account: wallet }); + + for (const record of records) { + console.log("Note ID:", record.inputNoteRecord().id().toString()); + for (const consumability of record.noteConsumability()) { + console.log("Account ID:", consumability.accountId().toString()); + } + } +} catch (error) { + console.error("Failed to retrieve consumable notes:", error.message); +} +``` + +## Importing and Exporting Notes + +```typescript +import { MidenClient, NoteExportFormat } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Import a note from a note file + const noteId = await client.notes.import(noteFile); + console.log("Imported note:", noteId); + + // Export a note - different formats available + const idExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Id }); + const fullExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Full }); + const detailsExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Details }); +} catch (error) { + console.error("Failed to import/export note:", error.message); +} +``` + +Export formats: +- `NoteExportFormat.Id` — Exports only the note ID (only works for public notes) +- `NoteExportFormat.Full` — Exports the complete note with its inclusion proof +- `NoteExportFormat.Details` — Exports note details including metadata and creation block + +## Available Note Filter Statuses + +When listing notes, you can filter by these statuses: + +- `"committed"` — Notes committed to the blockchain +- `"consumed"` — Notes that have been spent +- `"expected"` — Notes expected to arrive +- `"processing"` — Notes currently being processed +- `"unverified"` — Unverified notes + +Or filter by specific IDs using `{ ids: [noteId1, noteId2] }`. diff --git a/docs/builder/client/web-client/library/sync.md b/docs/builder/client/web-client/library/sync.md new file mode 100644 index 00000000..4657cd65 --- /dev/null +++ b/docs/builder/client/web-client/library/sync.md @@ -0,0 +1,72 @@ +--- +title: Sync +sidebar_position: 7 +--- + +# Synchronizing State with the Miden SDK + +This guide demonstrates how to synchronize your local state with the Miden network. + +## Basic Synchronization + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + const syncSummary = await client.sync(); + + console.log("Current block number:", syncSummary.blockNum()); + console.log("Committed notes:", syncSummary.committedNotes()); + console.log("Updated accounts:", syncSummary.updatedAccounts()); + console.log("Committed transactions:", syncSummary.committedTransactions()); +} catch (error) { + console.error("Failed to sync state:", error.message); +} +``` + +## Sync with Timeout + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Sync with a 30-second timeout + const syncSummary = await client.sync({ timeout: 30_000 }); + + console.log("Synced to block:", syncSummary.blockNum()); +} catch (error) { + console.error("Sync timed out or failed:", error.message); +} +``` + +## Auto-Sync on Creation + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +// Client syncs automatically before returning +const client = await MidenClient.create({ autoSync: true }); + +// Or use createTestnet() which defaults to autoSync: true +const testnetClient = await MidenClient.createTestnet(); +``` + +## Get Current Sync Height + +```typescript +const height = await client.getSyncHeight(); +console.log("Current sync height:", height); +``` + +## Understanding the Sync Summary + +The `SyncSummary` object returned by `sync()` contains: + +- `blockNum()`: The current block number of the network +- `committedNotes()`: Array of note IDs that have been committed +- `updatedAccounts()`: Array of account IDs that have been updated +- `committedTransactions()`: Array of transaction IDs that have been committed diff --git a/docs/builder/client/web-client/library/tags.md b/docs/builder/client/web-client/library/tags.md new file mode 100644 index 00000000..7a6e88ff --- /dev/null +++ b/docs/builder/client/web-client/library/tags.md @@ -0,0 +1,73 @@ +--- +title: Tags +sidebar_position: 8 +--- + +# Working with Note Tags in the Miden SDK + +Note tags are used to specify how notes should be executed and who can consume them. They also serve as a fuzzy filter mechanism for retrieving note updates during sync operations. + +## Basic Tag Operations + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Add a tag (accepts number) + await client.tags.add(12345); + + // Remove a tag + await client.tags.remove(12345); + + // List all tags (returns number[]) + const tags = await client.tags.list(); + console.log("Current tags:", tags); +} catch (error) { + console.error("Failed to manage tags:", error.message); +} +``` + +## Managing Multiple Tags + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Add multiple tags + const tagsToAdd = [123, 456, 789]; + for (const tag of tagsToAdd) { + await client.tags.add(tag); + } + + // List them + const allTags = await client.tags.list(); + console.log("All tags:", allTags); // [123, 456, 789] + + // Remove some + await client.tags.remove(123); + await client.tags.remove(456); +} catch (error) { + console.error("Failed to manage tags:", error.message); +} +``` + +## Tag Sources and Sync Behavior + +Tags can come from different sources: + +1. **Account Tags**: Automatically added for accounts being tracked by the client. +2. **Note Tags**: Automatically added for expected notes being tracked. +3. **User Tags**: Manually added by the user via `client.tags.add()`. + +During sync operations, the client uses these tags to retrieve note-related information for notes with matching tags. + +## Important Notes + +- Tags are `number` values (valid `u32` numbers) +- Tags for managed accounts are handled automatically by the client +- User-added tags can be removed, but system-generated tags cannot +- Use `NoteTag` helpers from WASM to compute tag values from faucet IDs diff --git a/docs/builder/client/web-client/library/transactions.md b/docs/builder/client/web-client/library/transactions.md new file mode 100644 index 00000000..fdb1d800 --- /dev/null +++ b/docs/builder/client/web-client/library/transactions.md @@ -0,0 +1,86 @@ +--- +title: Transactions +sidebar_position: 10 +--- + +# Retrieving Transaction History with the Miden SDK + +This guide demonstrates how to retrieve and work with transaction history using the Miden SDK. + +## Listing All Transactions + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // List all transactions + const allTransactions = await client.transactions.list(); + + for (const tx of allTransactions) { + console.log("Transaction ID:", tx.id().toString()); + console.log("Account ID:", tx.accountId().toString()); + console.log("Block Number:", tx.blockNum().toString()); + + // Check transaction status + const status = tx.transactionStatus(); + if (status.isPending()) { + console.log("Status: Pending"); + } else if (status.isCommitted()) { + console.log("Status: Committed in block", status.getBlockNum()); + console.log("Committed at:", status.getCommitTimestamp()); + } else if (status.isDiscarded()) { + console.log("Status: Discarded"); + } + + // Account state changes + console.log("Initial State:", tx.initAccountState().toHex()); + console.log("Final State:", tx.finalAccountState().toHex()); + + // Notes information + console.log("Input Note Nullifiers:", tx.inputNoteNullifiers().map(n => n.toHex())); + console.log("Output Notes:", tx.outputNotes().toString()); + } +} catch (error) { + console.error("Failed to retrieve transactions:", error.message); +} +``` + +## Filtering Transactions + +```typescript +import { MidenClient } from "@miden-sdk/ts-sdk"; + +try { + const client = await MidenClient.create(); + + // Get uncommitted transactions + const uncommitted = await client.transactions.list({ status: "uncommitted" }); + for (const tx of uncommitted) { + console.log("Uncommitted:", tx.id().toString()); + } + + // Get specific transactions by ID + const specific = await client.transactions.list({ ids: [txId1, txId2] }); + + // Get expired transactions + const expired = await client.transactions.list({ expiredBefore: 1000 }); +} catch (error) { + console.error("Failed to filter transactions:", error.message); +} +``` + +## Transaction Statuses + +Transactions can have the following statuses: +- **Pending** — Transaction is waiting to be processed +- **Committed** — Transaction has been successfully included in a block +- **Discarded** — Transaction was discarded and will not be processed + +Check status using methods on the `TransactionStatus` object: +- `isPending()` — Returns `true` if the transaction is pending +- `isCommitted()` — Returns `true` if the transaction is committed +- `isDiscarded()` — Returns `true` if the transaction is discarded +- `getBlockNum()` — Returns the block number if committed, otherwise `null` +- `getCommitTimestamp()` — Returns the commit timestamp if committed, otherwise `null` diff --git a/docs/builder/tools/cli/_category_.yml b/docs/builder/tools/cli/_category_.yml new file mode 100644 index 00000000..0e4536df --- /dev/null +++ b/docs/builder/tools/cli/_category_.yml @@ -0,0 +1,3 @@ +label: CLI +position: 2 +collapsed: true diff --git a/docs/builder/tools/cli/cli-config.md b/docs/builder/tools/cli/cli-config.md new file mode 100644 index 00000000..45a19730 --- /dev/null +++ b/docs/builder/tools/cli/cli-config.md @@ -0,0 +1,194 @@ +--- +title: Config +sidebar_position: 2 +--- + +After installing the CLI (`cargo install miden-client-cli --locked`), use the client by running the following and adding the [relevant commands](index.md#commands): + +```sh +miden-client +``` + +:::tip +Run `miden-client --help` for information on `miden` commands. +::: + +## Client Configuration + +We configure the client using a [TOML](https://en.wikipedia.org/wiki/TOML) file ([`miden-client.toml`]). The file gets created when running `miden-client init`, which creates a `.miden` directory structure to organize all client-related files. By default, this directory is located in the HOME path, i.e. at `~/.miden`. Running this command is optional, but can be done if you want to have more fine-grained control over the configuration of the `miden-client`. The TOML file can also be edited to use a different configuration for the client. + +```sh +store_filepath = ".miden/store.sqlite3" +secret_keys_directory = ".miden/keystore" +default_account_id = "0x012345678" +token_symbol_map_filepath = ".miden/token_symbol_map.toml" +remote_prover_endpoint = "http://localhost:8080" +package_directory = ".miden/packages" +max_block_number_delta = 256 + +[rpc] +endpoint = { protocol = "http", host = "localhost", port = 57291 } +timeout_ms = 10000 + +[note-transport] # optional +endpoint = "http://localhost:57292" +timeout_ms = 10000 +``` + +### Configuration Location and Priority + +The client supports both **global** and **local** configuration with intelligent priority handling: + +1. **Global Configuration** (default): Located at `~/.miden/miden-client.toml` in your home directory. The global directory location can be overridden with the `MIDEN_CLIENT_HOME` environment variable (see [Environment variables](#environment-variables)). +2. **Local Configuration** (project-specific): Located at `./.miden/miden-client.toml` in your current working directory + +**Priority Order**: Local configuration takes precedence over global configuration. If both exist, the client will use the local configuration and ignore the global one. + +### Initialization Options + +```bash +# Create global configuration (default behavior) +miden-client init + +# Create local configuration in current directory +miden-client init --local +``` + +The global configuration approach reduces per-project setup overhead while still allowing project-specific customization when needed. + +### Configuration Management + +#### Clear Command + +The `clear` command helps manage configuration by removing existing setups: + +```bash +# Remove local config if present, otherwise remove global config +miden-client clear + +# Force removal of global configuration only +miden-client clear --global +``` + +**Priority Behavior**: The clear command follows the same priority logic as config loading - it will remove the local configuration first if it exists, and only remove the global configuration if no local configuration is found. This ensures you don't accidentally lose both configurations at once. + +**Use Cases**: +- Resetting configuration between releases when changes require clean state +- Switching from local to global configuration (or vice versa) +- Troubleshooting configuration-related issues + +### RPC + +An `rpc` section is used to configure the connection to the Miden node. It contains the following fields: + +- `endpoint`: The endpoint of the Miden node. It can be a specific url (like `"https://rpc.devnet.miden.io"`) or a table with the following fields: + - `protocol`: The protocol used to connect to the node. It can be either `http` or `https`. + - `host`: The host of the node. It can be either an IP address or a domain name. + - `port`: The port of the node. It is an integer. + +This field can be set with the `--network` flag when running the `miden-client init` command. For example, to set the testnet endpoint, you can run: `miden-client init --network testnet`. + +:::note + +- Running the node locally for development is encouraged. +- However, the endpoint can point to any remote node. + ::: + +### Store and keystore + +The `store_filepath` field is used to configure the path to the SQLite database file used by the client. The `secret_keys_directory` field is used to configure the path to the directory where the keystore files are stored. The default values are `.miden/store.sqlite3` and `.miden/keystore`, respectively, organizing these files within the `.miden` directory structure. + +The store filepath can be set when running the `miden-client init` command with the `--store-path` flag. + +### Default account ID + +The `default_account_id` field contains the default account ID to be used by the client's command when no `account` is provided. It is a hexadecimal string that represents the account ID. The field is optional, and if not set, the client will set it once the first account is created. + +By default none is set, but you can set and unset it with: + +```sh +miden-client account --default #Sets default account +miden-client account --default none #Unsets default account +``` + +:::note +The account must be tracked by the client in order to be set as the default account. +::: + +You can also see the current default account ID with: + +```sh +miden-client account --default +``` + +### Token symbol map + +The `token_symbol_map_filepath` field is used to configure the path to the TOML file that contains the token symbol map. The token symbol map stores the faucet details for different token symbols. The default value is `.miden/token_symbol_map.toml`. + +This file must be updated manually with known token symbol mappings. A sample token symbol map file looks like this: + +```toml +# This addresses in this file are not real and are only for demonstration purposes. +ETH = { id = "0xa031cc137adecd54", decimals = 18 } +BTC = { id = "0x2f3c4b5e6a7b8c9d", decimals = 8 } +``` + +The `id` field is the faucet account ID and the `decimals` field is the number of decimals used by the token. + +When the client is configured with a token symbol map, any transaction command that specifies an asset can use the token symbol instead of the asset ID. For example, when specifying an asset normally you would use something like: +`1::0x2f3c4b5e6a7b8c9d` + +But if the faucet is included in the token symbol map (using the sample above as the mapping), you would use: +`0.00000001::BTC` + +Notice how the amount specified when using the token symbol takes into account the decimals of the token (`1` base unit of the token is `0.00000001` for BTC as it uses 8 decimals). + +### Remote prover endpoint + +The `remote_prover_endpoint` field is used to configure the usage of a remote prover. You can set a remote prover when calling the `miden-client prover` command with the `--remote-prover-endpoint` flag. The prover will be used for all transactions that are executed with the `miden` command. By default, no remote prover is used and all transactions are executed locally. + +### Package directory +`Packages` are Miden's native packaging format. +This structure contains the outputs of a compiled project, with all of its corresponding metadata. Specifically, a `Package` may contain the compiled MAST for an `Account Component` in the form of a `Library`. + +The `package_directory` field is used to configure the path to the directory where the account components are stored in package (`.masp`) form. The default value is `.miden/packages`. + +In this directory you can place the packages used to create the account components. These define the interface of the account that will be created. + +For more information on miden packages, see: +- [The mast-package crate](https://github.com/0xMiden/miden-vm/blob/next/crates/mast-package/README.md) +- [The Miden package's status article on the Miden compiler](https://0xmiden.github.io/compiler/appendix/known-limitations.html#packaging) + +### Block Delta + +The `max_block_number_delta` is an optional field that is used to configure the maximum number of blocks the client can be behind the network. + +If not set, the default behavior is to ignore the block difference between the client and the network. If set, the client will check this difference is within the specified maximum when validating a transaction. + +```sh +miden-client init --block-delta 256 +``` + +### Environment variables + +- `MIDEN_CLIENT_HOME`: Overrides the default global `.miden` directory (`~/.miden`). When set, all commands that reference the global directory will use the specified path instead. This is useful for keeping separate environments or storing the client data in a non-default location. For example: + + ```sh + export MIDEN_CLIENT_HOME=/path/to/custom/miden + miden-client init + ``` + + Note that this only affects the **global** directory. If a local `./.miden` directory exists, it still takes precedence over the global one (whether default or overridden). + +- `MIDEN_DEBUG`: When set to `true`, enables debug mode on the transaction executor and the script compiler. For any script that has been compiled and executed in this mode, debug logs will be output in order to facilitate MASM debugging ([these instructions](https://0xMiden.github.io/miden-vm/user_docs/assembly/debugging.html) can be used to do so). This variable can be overridden by the `--debug` CLI flag. + +### Note Transport + +A `note-transport` section is used to configure the connection to the Miden Note Transport node used in the exchange of private notes. It contains the following fields: +- `endpoint`: The endpoint of the Miden Note Transport node; +- `timeout-ms`: The timeout employed in client requests to the node. + +:::note +- Running the node locally for development is encouraged. +- However, the endpoint can point to any remote node. +::: diff --git a/docs/builder/tools/cli/cli-troubleshooting.md b/docs/builder/tools/cli/cli-troubleshooting.md new file mode 100644 index 00000000..2b090f62 --- /dev/null +++ b/docs/builder/tools/cli/cli-troubleshooting.md @@ -0,0 +1,147 @@ +--- +title: Troubleshooting +sidebar_position: 3 +--- + +## Troubleshooting and transaction lifecycle (CLI) + +This guide helps you troubleshoot common issues and understand the end-to-end lifecycle of transactions and notes in the Miden client. + +### TL;DR checklist + +> Note: This section applies to the Miden CLI client. Guidance for the Rust and Web clients may differ. + +- Ensure you have a proper configuration setup: either a global config at `~/.miden/miden-client.toml` or a local config at `./.miden/miden-client.toml`. Local config takes priority if both exist. +- If you need a clean local state, delete the SQLite store file referenced by `store_filepath` (default: `.miden/store.sqlite3`). It will be recreated automatically on the next command. +- Verify your node RPC endpoint is reachable and correct in your configuration file (local `.miden/miden-client.toml` or global `~/.miden/miden-client.toml`). +- Run with debug output when troubleshooting: add `--debug` or set `MIDEN_DEBUG=true`. +- Run `miden-client sync` to refresh local state after errors involving missing data or outdated heights. + +### Enable debug output + +- CLI flag: `miden-client --debug ...` (overrides `MIDEN_DEBUG`) +- Environment variable: `MIDEN_DEBUG=true` + +When enabled, the transaction executor and script compiler emit debug logs that help diagnose MASM-level issues (you can also consult the Miden VM debugging instructions). + +### Typical CLI outputs when debugging + +```sh +# Enable debug output for a command +miden-client --debug send --sender --target --asset 100:: + +# Force non-interactive submission (e.g., CI) +miden-client send --force ... + +# Refresh local state +miden-client sync +``` + +If you see a gRPC error, it may include a status-derived kind (e.g. `Unavailable`, `InvalidArgument`) which narrows possible causes. + +### Common errors and how to resolve + +Below are representative errors you may encounter, their likely causes, and suggested fixes. + +#### `RpcError.GrpcError: Unavailable` / `DeadlineExceeded` +- Cause: Node is down, unreachable, or behind a load balancer that blocked the request. +- Fix: Check `rpc.endpoint` in your configuration file (local `.miden/miden-client.toml` or global `~/.miden/miden-client.toml`), verify the node is running/accessible, and retry. + +#### `RpcError.InvalidArgument` / `ExpectedDataMissing` / `InvalidResponse` +- Cause: Malformed request parameters or unexpected server response. +- Fix: Re-check command flags/inputs. If using partial IDs, ensure they map to a single entity. Update to the latest client if the server API has changed. + +#### Client/network compatibility mismatch +- Cause: Client and network versions or the genesis header commitment are incompatible. +- Symptoms: CLI may report messages like: + + ``` + accept header validation failed: server rejected request - please check your version and network settings + ``` + + or requests being rejected due to a mismatched genesis header commitment. +- Details: These are validated by the node by verifying client headers on gRPC requests. +- Fix: Ensure your client version matches the target network. Switch to the correct network or upgrade/downgrade the client accordingly. Verify the configured genesis header commitment matches the network, then retry. + +#### `ClientError.AccountDataNotFound()` +- Cause: The account is not known to the local store yet. +- Fix: Create/import the account first, or run `miden-client sync` to fetch it if it exists on-chain. + +#### `ClientError.AccountLocked()` +- Cause: Attempting to modify a locked account. +- Fix: Unlock or use another account as appropriate. + +#### `ClientError.StoreError(AccountCommitmentAlreadyExists(...))` +- Cause: Trying to apply a transaction whose final account commitment is already present locally. +- Fix: Ensure you are not re-applying the same transaction. Sync and check transaction status. + +#### `ClientError.NoteNotFoundOnChain()` / `RpcError.NoteNotFound()` +- Cause: The note has not been published/committed yet or the ID is incorrect. +- Fix: Verify the note ID. If it should exist, run `miden-client sync` and retry. + +#### `ClientError.TransactionInputError` / `TransactionScriptError` +- Cause: Invalid transaction inputs, script logic errors, or failing constraints. +- Fix: Run with `--debug` to collect execution logs. Validate input notes, foreign accounts, and script assumptions. + +#### `ClientError.TransactionProvingError` +- Cause: Local proving failed or remote prover returned an error. +- Fix: If using remote proving, verify `remote_prover_endpoint` is reachable and add `--delegate-proving`. Check prover logs. + +#### Recency/block delta errors +- Cause: Client is too far behind the network and validation enforces a max delta. +- Fix: Run `miden-client sync` or increase `max_block_number_delta` via `miden-client init --block-delta ` and re-run. + +### Transaction lifecycle (CLI-oriented overview) + +For the full protocol-level lifecycle, see the Miden book: [Transaction lifecycle](https://0xmiden.github.io/miden-docs/imported/miden-base/src/transaction.html#transaction-lifecycle). + +```mermaid +flowchart LR + A[Build Request] --> B[Validate Request] + A -.->|optional| C[Collect/Insert Input Notes] + A -.->|optional| D[Load Foreign Accounts] + B -.->|optional| K[Insert Public Note Recipients] + B --> E[Execute Transaction] + E --> F[Prove Transaction] + F --> G[Submit to Node] + G --> H[Track Locally] + + subgraph Tracking + H --> I[Update Account State] + H --> J[Update Notes/Tags] + end +``` + +Key states the CLI surfaces: + +- Transaction status: `Pending` (after execution), `Committed` (after node inclusion), `Discarded` (not included). +- Input notes: `Expected` → `Processing` → `Consumed` (after sync) or `Committed` if fetched with inclusion. + +### Configuration troubleshooting + +#### Config priority confusion +- **Issue**: Unclear which configuration is being used (local vs global) +- **Check**: Run commands from different directories to see if behavior changes +- **Local priority**: If `./.miden/miden-client.toml` exists, it overrides `~/.miden/miden-client.toml` +- **Fix**: Use `miden-client clear-config` to remove unwanted configurations, or `miden-client clear-config --global` to remove only global config. Note: Running `miden-client clear-config` without flags follows priority: if a local .miden folder exists, it removes only that one; if no local folder exists, it removes the global one. Use `--global` to specifically target the global configuration regardless of local config presence. + +#### Clean configuration reset +- **Complete reset**: Use `miden-client clear-config` to remove the active configuration (follows priority: local first, then global) +- **Selective reset**: Use `miden-client clear-config --global` to remove only global configuration while preserving local +- **Fresh start**: After clearing, run `miden-client init` (global) or `miden-client init --local` (local) to recreate + +### Recovery flow + +1. Re-run with `--debug` or `MIDEN_DEBUG=true` for richer logs. +2. Verify `rpc.endpoint` connectivity and timeouts. +3. Run `miden-client sync` to refresh local headers/notes. +4. If local DB is inconsistent for development purposes, delete the store file (`.miden/store.sqlite3` in local config or `~/.miden/store.sqlite3` in global config) and retry. +5. For configuration issues, use `miden-client clear-config` to reset config and `miden-client init` to recreate. +6. Adjust `max_block_number_delta` if strict recency checks block validation. +7. If proving errors persist with a remote prover, confirm `remote_prover_endpoint` and consider running locally to isolate the issue. + +### References + +- CLI debug flag and environment variable are documented in `CLI` and `Config` docs. +- Common error enums originate from the client and RPC layers. +- Protocol lifecycle: [Miden book — Transaction lifecycle](https://0xmiden.github.io/miden-docs/imported/miden-base/src/transaction.html#transaction-lifecycle) diff --git a/docs/builder/tools/cli/index.md b/docs/builder/tools/cli/index.md new file mode 100644 index 00000000..2b5abd48 --- /dev/null +++ b/docs/builder/tools/cli/index.md @@ -0,0 +1,412 @@ +--- +title: CLI +sidebar_position: 1 +--- + +The following document lists the commands that the CLI currently supports. + +:::tip +Use `--help` as a flag on any command for more information. +::: + +## Usage + +Call a command on the `miden-client` like this: + +```sh +miden-client +``` + +Optionally, you can include the `--debug` flag to run the command with debug mode, which enables debug output logs from scripts that were compiled in this mode: + +```sh +miden-client --debug +``` + +Note that the debug flag overrides the `MIDEN_DEBUG` environment variable. + +## Commands + +### `init` + +Creates a configuration file for the client in the current directory. Running this command is optional, as the client will self-initialize by default. By default, the command uses the Testnet network. + +```sh +# This will create a config file named `miden-client.toml` using default values +# This file contains information useful for the CLI like the RPC provider and database path +miden-client init + +# You can set up the CLI for any of the default networks +miden-client init --network testnet +miden-client init --network devnet +miden-client init --network localhost + +# You can also specify a custom network +miden-client init --network 18.203.155.106 +# You can specify the port +miden-client init --network 18.203.155.106:8080 +# You can also specify the protocol (http/https) +miden-client init --network https://18.203.155.106 +# You can specify both +miden-client init --network https://18.203.155.106:1234 + +# You can use the --store-path flag to override the default store config +miden-client init --store-path db/store.sqlite3 + +# You can use the --block-delta flag to set maximum number of blocks the client can be behind +miden-client init --block-delta 250 + +# You can provide both flags +miden-client init --network 18.203.155.106 --store-path db/store.sqlite3 + +# You can set a remote prover to offload the proving process (along with the `--delegate-proving` flag in transaction commands) +miden-client init --remote-prover-endpoint + +# To enable the transport layer, specify the endpoint +miden-client init --note-transport-endpoint +``` + +More information on the configuration file can be found in the [configuration section](./cli-config.md). + +### `account` + +Inspect account details. + +#### Action Flags + +| Flags | Description | Short Flag | +| ---------------- | ------------------------------------------------ | ---------- | +| `--list` | List all accounts monitored by this client | `-l` | +| `--show ` | Show details of the account for the specified ID | `-s` | +| `--default ` | Manage the setting for the default account | `-d` | + +The `--show` flag also accepts a partial ID instead of the full ID. For example, instead of: + +```sh +miden-client account --show 0x8fd4b86a6387f8d8 +``` + +You can call: + +```sh +miden-client account --show 0x8fd4b86 +``` + +For the `--default` flag, if `` is "none" then the previous default account is cleared. If no `` is specified then the default account is shown. + +### `new-wallet` + +Creates a new wallet account. + +A basic wallet is comprised of a basic authentication component (for RPO Falcon signature verification), alongside a basic wallet component (for sending and receiving assets). + +This command has three optional flags: + +- `--storage-mode `: Used to select the storage mode of the account (private if not specified). It may receive "private" or "public". +- `--mutable`: Makes the account code mutable (it's immutable by default). +- `--extra-packages `: Specifies a list of file paths for packages holding account components to include in the account. If the packages contain placeholders, the CLI will prompt the user to enter the required data for instantiating storage appropriately. +- `--init-storage-data-path `: Specifies an optional file path to a TOML file containing key/value pairs used for initializing storage. Each key should map to a placeholder within the packages' component metadata. The CLI will prompt for any keys that are not present in the file. + +After creating an account with the `new-wallet` command, it is automatically stored and tracked by the client. This means the client can execute transactions that modify the state of accounts and track related changes by synchronizing with the Miden network. + +### `new-account` + +Creates a new account and saves it locally. + +An account may be composed of one or more components, each with its own storage and distinct functionality. This command lets you build a custom account by selecting an account type and optionally adding extra component packages. + +This command has four flags: + +- `--storage-mode `: Specifies the storage mode of the account. It accepts either "private" or "public", with "private" as the default. +- `--account-type `: Specifies the type of account to create. Accepted values are: + - `fungible-faucet` + - `non-fungible-faucet` + - `regular-account-immutable-code` + - `regular-account-updatable-code` +- `--packages `: Specifies a list of file paths for packages holding account components to include in the account. If the packages contain placeholders, the CLI will prompt the user to enter the required data for instantiating storage appropriately. +- `--init-storage-data-path `: Specifies an optional file path to a TOML file containing key/value pairs used for initializing storage. Each key should map to a placeholder within the packages' component metadata. The CLI will prompt for any keys that are not present in the file. + +After creating an account with the `new-account` command, the account is stored locally and tracked by the client, enabling it to execute transactions and synchronize state changes with the Miden network. + +#### Examples + +```bash +# Create a new wallet with default settings (private storage, immutable, no extra components) +miden-client new-wallet + +# Create a new wallet with public storage and a mutable code +miden-client new-wallet --storage-mode public --mutable + +# Create a new wallet that includes custom packages +miden-client new-wallet --extra-packages packages/custom-package.masp + +# Create a fungible faucet with interactive input +miden-client new-account --account-type fungible-faucet --packages packages/basic-fungible-faucet.masp + +# Create a fungible faucet with preset fields +miden-client new-account --account-type fungible-faucet --packages packages/basic-fungible-faucet.masp --init-storage-data-path init_data.toml +``` + +where `init_data.toml` is a TOML file with the following example content: +```toml +token_metadata.max_supply = 1000000000 +token_metadata.decimals = 6 +token_metadata.ticker = "TEST" +``` + +### `info` + +View a summary of the current client state. + +#### Action Flags + +| Flag | Description | Short Flag | +| -------------- | -------------------------------------------- | ---------- | +| `--rpc-status` | Display detailed RPC node status information | `-r` | + +When using the `--rpc-status` flag, the command displays additional information about the RPC node including: + +- Node version +- Genesis commitment +- Store connection status and chain tip +- Block producer status and chain tip + +### `notes` + +View and manage notes. Also, exchange private notes using the note transport network. + +#### Action Flags + +| Flags | Description | Short Flag | +| ----------------------- | -------------------------------------------------------- | ---------- | +| `--list []` | List input notes | `-l` | +| `--show ` | Show details of the input note for the specified note ID | `-s` | +| `--send
` | Send a note using the note transport network | | +| `--fetch` | Fetch notes from the note transport network | | + +The `--list` flag receives an optional filter: - expected: Only lists expected notes. - committed: Only lists committed notes. - consumed: Only lists consumed notes. - processing: Only lists processing notes. - consumable: Only lists consumable notes. An additional `--account-id ` flag may be added to only show notes consumable by the specified account. +If no filter is specified then all notes are listed. + +The `--show` flag also accepts a partial ID instead of the full ID. For example, instead of: + +```sh +miden-client notes --show 0x70b7ecba1db44c3aa75e87a3394de95463cc094d7794b706e02a9228342faeb0 +``` + +You can call: + +```sh +miden-client notes --show 0x70b7ec +``` + +To send a private note, the `--send` flag sends a note using the note transport network. +The note ID (hex, in full or a prefix) and recipient's address (bech32) must be provided. +The note is assumed to be stored in the store (e.g., imported using [`import`](#import)). + +You can call: + +```sh +miden-client notes --send 0xc1234567 mm1qpkdyek2c0ywwvzupakc7zlzty8qn2qnfc +``` + +To fetch private notes, the `--fetch` allows to download notes from the note transport network. +Only notes for tracked tags will be fetched (e.g. `miden-client tags --list`). +The downloaded notes will be added to the store. + +```sh +miden-client notes --fetch +``` + +### `sync` + +Sync the client with the latest state of the Miden network. Shows a brief summary at the end. + +### `tags` + +View and add tags. + +#### Action Flags + +| Flag | Description | Aliases | +| ---------------- | ----------------------------------------------------------- | ------- | +| `--list` | List all tags monitored by this client | `-l` | +| `--add ` | Add a new tag to the list of tags monitored by this client | `-a` | +| `--remove ` | Remove a tag from the list of tags monitored by this client | `-r` | + +### `tx` + +View transactions. + +#### Action Flags + +| Command | Description | Aliases | +| -------- | ------------------------- | ------- | +| `--list` | List tracked transactions | -l | + +After a transaction gets executed, two entities start being tracked: + +- The transaction itself: It follows a lifecycle from `Pending` (initial state) and `Committed` (after the node receives it). It may also be `Discarded` if the transaction was not included in a block. +- Output notes that might have been created as part of the transaction (for example, when executing a pay-to-id transaction). + +### Transaction creation commands + +#### `mint` + +Creates a note that contains a specific amount tokens minted by a faucet, that the target Account ID can consume. + +Usage: `miden-client mint --target --asset :: --note-type ` + +#### `consume-notes` + +Account ID consumes a list of notes, specified by their Note ID. + +Usage: `miden-client consume-notes --account [NOTES]` + +For this command, you can also provide a partial ID instead of the full ID for each note. So instead of + +```sh +miden-client consume-notes --account 0x70b7ecba1db44c3aa75e87a3394de95463cc094d7794b706e02a9228342faeb0 0x80b7ecba1db44c3aa75e87a3394de95463cc094d7794b706e02a9228342faeb0 +``` + +You can do: + +```sh +miden-client consume-notes --account 0x70b7ecb 0x80b7ecb +``` + +Additionally, you can optionally not specify note IDs, in which case any note that is known to be consumable by the executor account ID will be consumed. + +Either `Expected` or `Committed` notes may be consumed by this command, changing their state to `Processing`. It's state will be updated to `Consumed` after the next sync. + +#### `send` + +Sends assets to another account. Sender Account creates a note that a target Account ID can consume. The asset is identified by the tuple `(FAUCET ID, AMOUNT)`. The note can be configured to be recallable making the sender able to consume it after a height is reached. + +Usage: `miden-client send --sender --target --asset :: --note-type ` + +#### `swap` + +The source account creates a `SWAP` note that offers some asset in exchange for some other asset. When another account consumes that note, it will receive the offered asset amount and the requested asset will removed from its vault (and put into a new note which the first account can then consume). Consuming the note will fail if the account doesn't have enough of the requested asset. + +Usage: `miden-client swap --source --offered-asset :: --requested-asset :: --note-type ` + +### `address` + +View and manage addresses. + +#### Action Subcommands + +| Subcommand | Description | +| -------------------------------- | ---------------------------------------------------------------------------------------| +| `list ` | List all addresses or only for the specified account ID (default command) | +| `add ` | Bind an address for an interface for the specified account ID with optional tag length | +| `remove
` | Remove an address for the specified account ID | + +The `list` subcommand optionally takes an account ID to only show the addresses of that account, if it is not provided, it will show all addresses of all accounts. + +```sh +miden-client address list 0x17f13f4f83a8e8100c19d2961dfda2 +``` + +`add` and `remove` take the account ID as a mandatory argument, and also the interface of the address, this values can be: +- `BasicWallet`: The basic wallet interface. + +Note: the `Unspecified` denotes an address not bound to any interface, it's the default address for every account created. + +```sh +miden-client address add 0x17f13f4f83a8e8100c19d2961dfda2 BasicWallet 10 +``` + +```sh +miden-client address remove 0x17f13f4f83a8e8100c19d2961dfda2 mlcl1qple0ejnutx8zyp0cm0pme9wjfgqz0u9djq +``` + +#### Tips + +For `send` and `consume-notes`, you can omit the `--sender` and `--account` flags to use the default account defined in the [config](./cli-config.md). If you omit the flag but have no default account defined in the config, you'll get an error instead. + +For every command which needs an account ID (either wallet or faucet), you can also provide a partial ID instead of the full ID for each account. So instead of + +```sh +miden-client send --sender 0x80519a1c5e3680fc --target 0x8fd4b86a6387f8d8 --asset 100::0xa99c5c8764d4e011 +``` + +You can do: + +```sh +miden-client send --sender 0x80519 --target 0x8fd4b --asset 100::0xa99c5c8764d4e011 +``` + +:::note +The only exception is for using IDs as part of the asset, those should have the full faucet's account ID. +::: + +#### Transaction confirmation + +When creating a new transaction, a summary of the transaction updates will be shown and confirmation for those updates will be prompted: + +```sh +miden-client ... + +TX Summary: + +... + +Continue with proving and submission? Changes will be irreversible once the proof is finalized on the network (y/N) +``` + +This confirmation can be skipped in non-interactive environments by providing the `--force` flag (`miden-client send --force ...`). + +#### Delegated proving + +If a remote prover is configured, the CLI can offload the proving process to it. This is done by providing the `--delegate-proving` flag when creating a transaction. The CLI will then send the transaction to the remote prover for processing. + +### Importing and exporting + +#### `export` + +Export input note data to a binary file . + +| Flag | Description | Aliases | +| ----------------------------- | ------------------------------------- | ------- | +| `--filename ` | Desired filename for the binary file. | `-f` | +| `--export-type ` | Exported note type. | `-e` | + +##### Export type + +The user needs to specify how the note should be exported via the `--export-type` flag. The following options are available: + +- `id`: Only the note ID is exported. When importing, if the note ID is already tracked by the client, the note will be updated with missing information fetched from the node. This works for both public and private notes. If the note isn't tracked and the note is public, the whole note is fetched from the node and is stored for later use. +- `full`: The note is exported with all of its information (metadata and inclusion proof). When importing, the note is considered unverified. The note may not be consumed directly after importing as its block header will not be stored in the client. The block header will be fetched and be used to verify the note during the next sync. At this point the note will be committed and may be consumed. +- `partial`: The note is exported with minimal information and may be imported even if the note is not yet committed on chain. At the moment of importing the note, the client will check the state of the note by doing a note sync, using the note's tag. Depending on the response, the note will be either stored as "Expected" or "Committed". + +#### `import` + +Import entities managed by the client, such as accounts and notes. The type of entities is inferred. + +The `--overwrite` flag can be used when importing accounts. It allows the user to overwrite existing accounts with the same ID. This is useful when you want to update the account's information or replace it with a new version. + +### Executing scripts + +#### `exec` + +Execute the specified program against the specified account. + +| Flag | Description | Aliases | +| ----------------------------- | -------------------------------------------- | ------- | +| `--account ` | Account ID to use for the program execution. | `-a` | +| `--script-path ` | Path to script's source code to be executed. | `-s` | +| `--inputs-path ` | Path to the inputs file. | `-i` | +| `--hex-words` | Print the output stack grouped into words. | | + +The file referenced by `--inputs-path` should contain a TOML array of inline tables, where each table has two fields: - `key`: a 256-bit hexadecimal string representing a word to be used as a key for the input entry. The hexadecimal value must be prefixed with 0x. - `values`: an array of 64-bit unsigned integers representing field elements to be used as values for the input entry. Each integer must be written as a separate string, within double quotes. + +The input file should contain a TOML table called `inputs`, as in the following example: + +```toml +inputs = [ { key = "0x0000001000000000000000000000000000000000000000000000000000000000", values = ["13", "9"]}, { key = "0x0000000000000000000000000000000000000000000000000000000000000000" , values = ["1", "2"]}, ] +``` + +### `note-transport` + +Send and fetch private notes using the transport layer. diff --git a/docs/builder/tools/index.md b/docs/builder/tools/index.md index 194cafcd..4883402b 100644 --- a/docs/builder/tools/index.md +++ b/docs/builder/tools/index.md @@ -3,26 +3,11 @@ title: Tools sidebar_position: 1 --- - - # Tools -:::info Version Note -Full client documentation (Rust Client, Web Client, CLI reference) is available in **released versions only**. Please select a version from the dropdown (e.g., 0.12, 0.11) to access the complete client documentation. -::: - -## Miden Client - -The Miden client has three main components: +## CLI -1. **Miden client library** - A Rust library for integrating with the Miden rollup -2. **Miden client CLI** - Command-line interface for interacting with the network -3. **Miden web client** - Browser-based interface for managing accounts and transactions +The Miden CLI (`miden-client`) provides a command-line interface for interacting with the Miden network — creating accounts, executing transactions, syncing state, and managing notes. See the [CLI reference](./cli/index.md) for the full command list. ## Additional Tools diff --git a/sidebars.ts b/sidebars.ts index ba213719..19a979ed 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -5,7 +5,7 @@ import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; * * - builderSidebar: Usage-focused docs (tutorials, guides, reference) * Canonical source: docs/builder/ (get-started, smart-contracts, etc.) - * Ingested content: docs/builder/tutorials/, docs/builder/client/ + * Ingested content: docs/builder/tutorials/, docs/builder/client/, docs/builder/tools/cli/ * * - coreConceptsSidebar: Architecture/internals (protocol, VM, proving) * Canonical source: Landing page in docs/core-concepts/index.md @@ -54,6 +54,12 @@ const sidebars: SidebarsConfig = { link: { type: "doc", id: "builder/tools/index" }, items: [{ type: "autogenerated", dirName: "builder/tools" }], }, + { + type: "category", + label: "Client", + link: { type: "doc", id: "builder/client/index" }, + items: [{ type: "autogenerated", dirName: "builder/client" }], + }, // ── SOLUTIONS { From 8754025177f1b346cfe9a091d5db02a7ef8f3f8f Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 02:14:55 +0100 Subject: [PATCH 06/10] docs: remove Tools index page, add Playground/Explorer pages, capitalize Miden Client --- docs/builder/client/common-errors.md | 2 +- docs/builder/client/index.md | 6 +++--- docs/builder/client/rust-client/api-docs.md | 2 +- docs/builder/client/rust-client/design.md | 2 +- .../get-started/create-account-use-faucet.md | 4 ++-- .../client/rust-client/get-started/index.md | 2 +- docs/builder/client/rust-client/library.md | 4 ++-- .../client/web-client/get-started/index.md | 2 +- docs/builder/tools/cli/_category_.yml | 2 +- docs/builder/tools/explorer.md | 10 ++++++++++ docs/builder/tools/index.md | 16 ---------------- docs/builder/tools/playground.md | 12 ++++++++++++ sidebars.ts | 1 - 13 files changed, 35 insertions(+), 30 deletions(-) create mode 100644 docs/builder/tools/explorer.md delete mode 100644 docs/builder/tools/index.md create mode 100644 docs/builder/tools/playground.md diff --git a/docs/builder/client/common-errors.md b/docs/builder/client/common-errors.md index 38f80195..2dd8553d 100644 --- a/docs/builder/client/common-errors.md +++ b/docs/builder/client/common-errors.md @@ -4,7 +4,7 @@ title: Common Errors # Troubleshooting and common errors -This guide helps you troubleshoot common issues when using the Miden client. +This guide helps you troubleshoot common issues when using the Miden Client. ## Connection and sync errors diff --git a/docs/builder/client/index.md b/docs/builder/client/index.md index 08109ccb..cd6cb8ec 100644 --- a/docs/builder/client/index.md +++ b/docs/builder/client/index.md @@ -1,11 +1,11 @@ --- -title: Client +title: Design sidebar_position: 1 --- -# Miden client +# Miden Client -The Miden client SDK is organized as a layered stack. The Rust core is the single source of truth for all client logic. Browser-facing SDKs build on top of it through a WASM bridge layer, giving TypeScript and React developers native access to the full protocol without needing a Rust toolchain. +The Miden Client SDK is organized as a layered stack. The Rust core is the single source of truth for all client logic. Browser-facing SDKs build on top of it through a WASM bridge layer, giving TypeScript and React developers native access to the full protocol without needing a Rust toolchain. ```mermaid graph TB diff --git a/docs/builder/client/rust-client/api-docs.md b/docs/builder/client/rust-client/api-docs.md index b13e6901..3db2d261 100644 --- a/docs/builder/client/rust-client/api-docs.md +++ b/docs/builder/client/rust-client/api-docs.md @@ -4,5 +4,5 @@ sidebar_position: 7 --- :::note -The latest and complete reference for the Miden client API can be found at [`Miden client docs.rs`](https://docs.rs/miden-client/latest/miden_client/). +The latest and complete reference for the Miden Client API can be found at [`Miden Client docs.rs`](https://docs.rs/miden-client/latest/miden_client/). ::: diff --git a/docs/builder/client/rust-client/design.md b/docs/builder/client/rust-client/design.md index a9c783b9..34aa31d7 100644 --- a/docs/builder/client/rust-client/design.md +++ b/docs/builder/client/rust-client/design.md @@ -3,7 +3,7 @@ title: Design sidebar_position: 4 --- -The Miden client has the following architectural components: +The Miden Client has the following architectural components: - [Store](#store) - [RPC client](#rpc-client) diff --git a/docs/builder/client/rust-client/get-started/create-account-use-faucet.md b/docs/builder/client/rust-client/get-started/create-account-use-faucet.md index 450ac13a..4425db94 100644 --- a/docs/builder/client/rust-client/get-started/create-account-use-faucet.md +++ b/docs/builder/client/rust-client/get-started/create-account-use-faucet.md @@ -3,7 +3,7 @@ title: Create account sidebar_position: 2 --- -In this tutorial, you'll create a Miden client, generate a new account, request tokens from the public faucet, and consume the resulting note — all using the Rust library API. +In this tutorial, you'll create a Miden Client, generate a new account, request tokens from the public faucet, and consume the resulting note — all using the Rust library API. ## Set up the project @@ -155,7 +155,7 @@ You should see the faucet tokens in your account's vault. ## Congratulations! -You've created a Miden client, generated an account, and executed your first client-side zero-knowledge proof using the Rust library. Next, try transferring assets between accounts: +You've created a Miden Client, generated an account, and executed your first client-side zero-knowledge proof using the Rust library. Next, try transferring assets between accounts: - [Public peer-to-peer transfer](./p2p-public.md) - [Private peer-to-peer transfer](./p2p-private.md) diff --git a/docs/builder/client/rust-client/get-started/index.md b/docs/builder/client/rust-client/get-started/index.md index d9c8c6eb..44bcbc65 100644 --- a/docs/builder/client/rust-client/get-started/index.md +++ b/docs/builder/client/rust-client/get-started/index.md @@ -7,7 +7,7 @@ This section shows you how to build a Rust application that interacts with the M By the end of these tutorials, you will have: -- Created a Miden client instance connected to testnet. +- Created a Miden Client instance connected to testnet. - Created an account and requested funds from the faucet. - Transferred assets between accounts using the Rust API — both public and private notes. diff --git a/docs/builder/client/rust-client/library.md b/docs/builder/client/rust-client/library.md index 1b62fcd2..e31eb5bc 100644 --- a/docs/builder/client/rust-client/library.md +++ b/docs/builder/client/rust-client/library.md @@ -3,7 +3,7 @@ title: Library sidebar_position: 5 --- -To use the Miden client library in a Rust project, include it as a dependency. +To use the Miden Client library in a Rust project, include it as a dependency. In your project's `Cargo.toml`, add: @@ -65,7 +65,7 @@ let client = ClientBuilder::new() ## Create local account -With the Miden client, you can create and track any number of public and local accounts. For local accounts, the state is tracked locally, and the rollup only keeps commitments to the data, which in turn guarantees privacy. +With the Miden Client, you can create and track any number of public and local accounts. For local accounts, the state is tracked locally, and the rollup only keeps commitments to the data, which in turn guarantees privacy. The `AccountBuilder` can be used to create a new account with the specified parameters and components. The following code creates a new local account: diff --git a/docs/builder/client/web-client/get-started/index.md b/docs/builder/client/web-client/get-started/index.md index d9f22890..607c9ce9 100644 --- a/docs/builder/client/web-client/get-started/index.md +++ b/docs/builder/client/web-client/get-started/index.md @@ -9,7 +9,7 @@ This section shows you how to get started with the Miden Web SDK by creating acc By the end of these tutorials, you will have: -- Initialized the Miden client in a web application +- Initialized the Miden Client in a web application - Created an account and requested funds from the faucet - Transferred assets between accounts using public and private notes - Tested SDK workflows locally using the mock client diff --git a/docs/builder/tools/cli/_category_.yml b/docs/builder/tools/cli/_category_.yml index 0e4536df..c7c5e8d5 100644 --- a/docs/builder/tools/cli/_category_.yml +++ b/docs/builder/tools/cli/_category_.yml @@ -1,3 +1,3 @@ label: CLI -position: 2 +position: 1 collapsed: true diff --git a/docs/builder/tools/explorer.md b/docs/builder/tools/explorer.md new file mode 100644 index 00000000..e3fd4be2 --- /dev/null +++ b/docs/builder/tools/explorer.md @@ -0,0 +1,10 @@ +--- +title: Explorer +sidebar_position: 4 +--- + +# Miden Explorer + +The Miden Explorer is a block explorer for the Miden network. Use it to inspect blocks, transactions, accounts, and notes on testnet and devnet. + +**[Open the Explorer](https://explorer.testnet.miden.io/)** diff --git a/docs/builder/tools/index.md b/docs/builder/tools/index.md deleted file mode 100644 index 4883402b..00000000 --- a/docs/builder/tools/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Tools -sidebar_position: 1 ---- - -# Tools - -## CLI - -The Miden CLI (`miden-client`) provides a command-line interface for interacting with the Miden network — creating accounts, executing transactions, syncing state, and managing notes. See the [CLI reference](./cli/index.md) for the full command list. - -## Additional Tools - -- **Playground** - Interactive environment for testing Miden assembly -- **Explorer** - Block explorer for the Miden network -- **[Miden Guardian](../miden-guardian/)** - Server and SDKs for backing up, syncing, and coordinating private account state (built by OpenZeppelin) diff --git a/docs/builder/tools/playground.md b/docs/builder/tools/playground.md new file mode 100644 index 00000000..b0500826 --- /dev/null +++ b/docs/builder/tools/playground.md @@ -0,0 +1,12 @@ +--- +title: Playground +sidebar_position: 3 +--- + +# Miden Playground + +The Miden Playground is an interactive browser-based environment for writing, compiling, and executing Miden assembly programs. + +Use it to experiment with Miden VM instructions, test note scripts, and prototype account code — without installing any tooling locally. + +**[Open the Playground](https://playground.miden.io/)** diff --git a/sidebars.ts b/sidebars.ts index 19a979ed..ffb81c0a 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -51,7 +51,6 @@ const sidebars: SidebarsConfig = { { type: "category", label: "Tools", - link: { type: "doc", id: "builder/tools/index" }, items: [{ type: "autogenerated", dirName: "builder/tools" }], }, { From eac6aee7bcf49870be7c151c149579591e35ab03 Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 02:42:50 +0100 Subject: [PATCH 07/10] docs: add Rust library pages (compile, tags, import, export, note-transport), restore CLI get-started, delete orphaned PNGs --- .../client/img/get-started/account-a.png | Bin 51865 -> 0 bytes .../client/img/get-started/account-b.png | Bin 51574 -> 0 bytes .../client/img/get-started/commit-height.png | Bin 42255 -> 0 bytes .../client/img/get-started/consumed-note.png | Bin 45808 -> 0 bytes .../img/get-started/miden-account-list.png | Bin 37114 -> 0 bytes .../client/img/get-started/note-view.png | Bin 41685 -> 0 bytes .../img/get-started/processing-note.png | Bin 50643 -> 0 bytes .../get-started/transaction-confirmation.png | Bin 143664 -> 0 bytes .../client/img/get-started/two-accounts.png | Bin 54890 -> 0 bytes .../img/get-started/view-account-vault.png | Bin 192391 -> 0 bytes docs/builder/client/rust-client/examples.md | 43 +- .../rust-client/get-started/p2p-private.md | 2 +- docs/builder/client/rust-client/index.md | 2 +- docs/builder/client/rust-client/library.md | 139 -- .../client/rust-client/library/_category_.yml | 3 + .../client/rust-client/library/accounts.md | 50 + .../client/rust-client/library/compile.md | 172 ++ .../client/rust-client/library/export.md | 40 + .../client/rust-client/library/import.md | 72 + .../client/rust-client/library/index.md | 82 + .../rust-client/library/new-accounts.md | 107 + .../rust-client/library/new-transactions.md | 186 ++ .../rust-client/library/note-transport.md | 104 + .../client/rust-client/library/notes.md | 67 + .../client/rust-client/library/sync.md | 51 + .../client/rust-client/library/tags.md | 65 + .../rust-client/library/transactions.md | 44 + docs/builder/index.md | 6 +- docs/builder/tools/cli/_category_.yml | 2 +- docs/builder/tools/cli/cli-troubleshooting.md | 2 +- .../tools/cli/get-started/_category_.yml | 3 + .../tools/cli/{ => get-started}/cli-config.md | 4 +- .../get-started/create-account-use-faucet.md | 153 ++ docs/builder/tools/cli/get-started/index.md | 18 + .../tools/cli/get-started/p2p-private.md | 95 + .../tools/cli/get-started/p2p-public.md | 83 + docs/builder/tools/cli/index.md | 4 +- package-lock.json | 1742 +---------------- 38 files changed, 1464 insertions(+), 1877 deletions(-) delete mode 100644 docs/builder/client/img/get-started/account-a.png delete mode 100644 docs/builder/client/img/get-started/account-b.png delete mode 100644 docs/builder/client/img/get-started/commit-height.png delete mode 100644 docs/builder/client/img/get-started/consumed-note.png delete mode 100644 docs/builder/client/img/get-started/miden-account-list.png delete mode 100644 docs/builder/client/img/get-started/note-view.png delete mode 100644 docs/builder/client/img/get-started/processing-note.png delete mode 100644 docs/builder/client/img/get-started/transaction-confirmation.png delete mode 100644 docs/builder/client/img/get-started/two-accounts.png delete mode 100644 docs/builder/client/img/get-started/view-account-vault.png delete mode 100644 docs/builder/client/rust-client/library.md create mode 100644 docs/builder/client/rust-client/library/_category_.yml create mode 100644 docs/builder/client/rust-client/library/accounts.md create mode 100644 docs/builder/client/rust-client/library/compile.md create mode 100644 docs/builder/client/rust-client/library/export.md create mode 100644 docs/builder/client/rust-client/library/import.md create mode 100644 docs/builder/client/rust-client/library/index.md create mode 100644 docs/builder/client/rust-client/library/new-accounts.md create mode 100644 docs/builder/client/rust-client/library/new-transactions.md create mode 100644 docs/builder/client/rust-client/library/note-transport.md create mode 100644 docs/builder/client/rust-client/library/notes.md create mode 100644 docs/builder/client/rust-client/library/sync.md create mode 100644 docs/builder/client/rust-client/library/tags.md create mode 100644 docs/builder/client/rust-client/library/transactions.md create mode 100644 docs/builder/tools/cli/get-started/_category_.yml rename docs/builder/tools/cli/{ => get-started}/cli-config.md (99%) create mode 100644 docs/builder/tools/cli/get-started/create-account-use-faucet.md create mode 100644 docs/builder/tools/cli/get-started/index.md create mode 100644 docs/builder/tools/cli/get-started/p2p-private.md create mode 100644 docs/builder/tools/cli/get-started/p2p-public.md diff --git a/docs/builder/client/img/get-started/account-a.png b/docs/builder/client/img/get-started/account-a.png deleted file mode 100644 index 4d01f73a56fc993208ae7c121cf8bc80a9303039..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51865 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�hP|`znR+q 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 bH{hYR1{gc`K30(R>VV2E^_#gj9zFj*8Pi$L diff --git a/docs/builder/client/img/get-started/commit-height.png b/docs/builder/client/img/get-started/commit-height.png deleted file mode 100644 index 02693818714b3007a96e080ec79701f4819c138a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42255 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 diff --git a/docs/builder/client/img/get-started/consumed-note.png b/docs/builder/client/img/get-started/consumed-note.png deleted file mode 100644 index 391ff1140d7557cbadf1591d59168cea79e12edc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45808 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®>c-K++v_MDbbJo>`~A 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 (yAOss(ZCL=6+3 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 Po7!e>v$<%K+ll`G<9gCH diff --git a/docs/builder/client/img/get-started/transaction-confirmation.png b/docs/builder/client/img/get-started/transaction-confirmation.png deleted file mode 100644 index e535a88f6ff1330017ba72da69a8106229af0f9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143664 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

PT3Je*l#x(l_(G^`!%PQjD>u3!f$ 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 OK;Y@>=d#Wzp$P!1!n)c3 diff --git a/docs/builder/client/img/get-started/two-accounts.png b/docs/builder/client/img/get-started/two-accounts.png deleted file mode 100644 index 9c989073f37115fe72bc55520aba7559d936e011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54890 zcmeFZbyQT*+bDcU2?GOAkw!X{lpaArx;sT00qHJLQBmoZl5XiPQKUh-LFtxm`1YaX zecyGz`@8?%bzN(inKS3?{p_dHchZu=m#}VQK@fCF!HH>^w5Ky~J;DU^O`y z=ClOGSiB^^Ht{7K8pmAykxh!UHXbO?l|m5Xj{X+9z<4L~(f1FZK0#kE7Pv7jnL&@b zHEjZo_Hz#_@fe7-zM(&Q^mqoY`F56|{&zSBzdUYMxMPbr{nO7Mo;~s9Ubzw zp0A7ju8Q*U3gR@qxtWP$9ZnKWcqNjJxE7YfpM^=24(uMR^zdUHc26+1uSe z!}h3UJ2kT}SzfeOJ2)3o@!Yk>A-bA*oeQ&&3iJJU{>Pkn)&l$5dW`LEO=xD9*oOW> zgBMZ-_0+F$pnfW%TdVoLA7j8#mlJ5wm?Ll~vTM$=_1lPgp{_+Ykmtj^RKdPOd`Wr9 zfbV=k>4grm}5KxkvVQ z<~eDP5$e#7z8|rX$7MZqTTev$po=UpvP62hc9h=!W@DOCR%S zk|3_Tm4tdq5u*Bc4mMK7UDi=a7KpM6x%b<45o9-dY40Hp28s*`QM~)Rdpq<+EkCqr zLop{kbfmF@J=tQApQEZ(UH(cif8o+7#skb2ckfZ=qRWflx;oG_-TD4rb{4{U^-B8c zZ5{VeGR3zje_r0h(W1b3htTo6L2;@6(W|#N!rnCri~0pULCd+7@^FJxqE2L-r`=;v zh=`20&Sd=h`&i@T%f=s6i{c-eYel~@r{7Mi3IA4`@C71~tVL|R7LYT6W9fgrLV=AcO0pYoZ>JaXIO-4tqm<#jT;L=IdIw;bq- z!<^p@K0Xlt^`%$ZnR+?!c>|9qXTm4Ta7&*RAq9ml^)5L!A%z$&rF?aptXa-3uT*CsS4nI=Rg+RWhCJh$%U>f=h_Dz)ji z*|E;I(XhF0lQg3^OVqW{S+kbD-s@QG*toVaH`KPv+GKyz>ZV)opQko8nHQb1_|-?W zqO-KVR0ycQNCSnYfe^P<+wXn5jV!2Zf@%jBp?3XA-yBR`zJ9joV+8uD!Y3*HXuswm7JfP zXGf!7Fu9y?=1m9NaSj8HDfOw07CT`hA1nd|)>Ma16MQH9OtFN<{9m2Fs^g|UnBCcL z=&BA{Dyd!%CTKQI9}pl1O2P>A&z=GbSdYL+UiPg7T0 zeKZ#}w>5Xm4_0i~T9$`rhIniBFS<2#-}iB8a(TcP;lkxIQ(;sQ;mp0?wD-WZ%hhL( zVb9@UU@!XqLTF!;MpFn<3(_BVL8K)W&2*LY>mJJ5Pqam}oqTPj1*9Lhd1|kYHjVa= zR^Sx+-Xf(Ez>NJJODABS^RZ9e_EITR6ZvyRWs@RRdv*KATX7h>7#5FKm93xm_9{GE zdaU{wi=5yK;s&>|Lg&6=#5Bz>uV-)X|GFP^U+S6gkCqR-1j61CHwsx6HJlN9Ia{Te z1(@xxf**bSzWk2u-BJK@fFh+0rH^=2kn{Z?_a6JUhl+|yhz|w#^D`O_hFfTi4b|fN zRNk-F|CWb2MRi-UDbn8Bzm}pU9>wTYUVL7pk=6s5&&HB&T-@cf?NamtCsdbxVB zMw4sC*jBGH0wgGI_dcUfLDcwPOvvboCOg+X2uYXqnHWQ|IbN`wJP7LowoDEBt!hq1 zFy3QiRkyBG9+~X6owh3+xsqR6*rT;l)M?+hYH9T|^wTq?z0A*Lx9!)P*f#RLd&slw z2A>pJ%uQ}ZL>Af?mY7csyV@j;woH{;EnQs<8tf_4+Nhd-xK3>AHa}y%#Itkn@6&;} zB4ImXE8Ro2@#CaNp< z4vpu;7UvxAy0ZOstS9i~7#Jz3FrD#Pbo03fZSn@|q7nbYmkAX@Ml142c*4WYr|26*uy z5uAM%LZXIHj;c!&S_f*1VE@jHtD8|VV~b`8AjV~|hp#)4u{PCp~T z(G2uZPEbSyyvsea)YCJwGBmfom;EahT)=$sM8yh%@b1DdBoSGPzhM0yBY9e(Cp+sVx8_Zr!B?+Jgr`MeWj?~|llH4Hfkrc*2O@Rq*B#eMYn$6`t^ zgxx(R{e4(+KB@tGV8-Ff=HF(kT#m3v-GHHbvz*;};^z&z%&U@Hdj8HVMypxHo;nB! z2^Hr*|KlNmnMVqJmEQIKM&=G7W03r(e{e8xpgNEL^zP&P5J+ek5dElRT-|@Z5Bwz9 z>Hh!Q>HlHxA9McS$PpA+&|dW6HgWv_f%w9*9wUi-g>Osy2g6lJ+3zjt|CwlYDpff_ z+Wr^k)E*bS`6vH~RqSb^Vj~}p!-~W=|5n_-9>W_|=_2s%1jLwLapug35WQ*iqmpD+l*4AoF;LSIQ52Udk1cd+9* zwXQ*-V}v5V&fylvgY}a0_j4BzRawx2MP=0Z86w&${@gr@_%@Gj+!&XxlHI6qa#$Nu;6Jgdpn&cb)6pC)e7u|C zTSPdzs~}dL(D{oxNd03HWmYM-Pw>zB$bCaWu(yx;h;G#|-7q2g-j;--f7@qJ0h*0C za&_K3hwA5OhCT+sbv(JP%@G_;)jV46*%7AKkd0bGP@%+4y-V=-ljmk>!9rR+FSGBT zyQqqA->}D?*G+wUf;k&-I0Yp$_9Ns=OM9?Ri6KMSB>^<-XFP+LgQ;Km35)FnBk%?> ze8_n}=f;{8PqA$Sh@an5k(hV{W7je9mCIR7&KWpqd>Gv&H{O2yr&CDU1i(sah6Zv9 zCvYZvLknpo_j0eo-#uQQtn@chV)-9#!?j2xP%5|Cl1b0Ngpk*9V|X>S%+DmMnF+C* zy1jXy?TFyX8YIoz{!mqac|FoO)QZEr#KM3Pc0}D{xY}OAAiYSE(>npFP96|0u}t@f z-`XgS@y%W@nRNRf;hO1S!j)llUOcyYEe2r958P^}yfg{(QrT{BI4R6aTi1_xsV$nD z^XU8W?!NC}UZO-JkvrKPCaJ12Ot>ZI)KiuZ!)U8$coigmgp+Xb>A`z3(HA5znbs~drw{mAUW>_-aZEDn7!L7`8m%KZd3uFdt~lS{kgLt zq25@qxQu)XBP_*qr&8SZ`2DevLX$ci(io>F z1CQ^)60qAxR(y_c-QDqGcr)*Aoe9MrpvcPD6UHN!Xl4NVrk=_@VploF_8*f-kiblW z+LeIy?;6IqD4=bo?SzI!G(2oG2Uu+=5rpYj%f4Z#Q&nzAgE zrbd;;=2>lGnO$w=XUf=&7}*nAC|hkwFcLaK-7FO#mTUKOOqj!BieR$8z69+}$N6+x zwel(zgea=$;pQ*b5`;7xpd;sFfJeEFXFF3;a+ROH#_iOPFjXuV-rpR_a^0CpYTI*| zid1UmKio53{(-NQmQfHs+nfE&kn{Qpw%SUNjc#wLP)md{KW_fanLC?~udI!C*n)U2YMY}0prxcfNmvo!UC=~U^*R+3{|N9L=>f%songn~_qkPkW zg1iq`QB!e4c^oXM4JB8MdNL#X^+Gfna;y`ANJ=&AhVto6$@S}OW`Rt#cUDdyGs$j9Lz9BHfVEYoRYD{A@>T!WR{j%M#L(*+-+vl?jV#Qgd zizPYhYi{j1Xx$&8c%4$qH~PgG%GcVvuTh@p#F!vd>w#FA1$84Ym;Ln~Hb0Kkc{bee zpnob8CzP&jdZVcLI+5cvsZBFmPiQXL&xz`_nWShURFlV)JDV@dhI}&QHG_Mk5X6TY zc)}lU#*U-eTfG&H2$_3`3^kYkfE|f8Wh9pt!%ogWK}wpK{UQb5{{F5B%8Q+U7^2h~ zV%6Y|gtA6ac}y=|vY1wWkt2@i46?=?w)jaX>UirZb*8(?Ath%_ZmLBbGGybjG3;dC zRq5u&ThDaDlzE}@g=LWUr6q<__zJ}HmMzsHMulB(h$3`ywh8#N{5gs5bumNtFjPr z17org9K-g4k=E@ZDRe@RwlTBfSJbs-^Jc}B`WZFz@_bgO&SaU{gWV-2i3swKCBbZs zBx9&h|FK|yyxukyA{0sf1sQs*ySKHh$4fo8VthYpz!=l@h~7Cj+NPo@rWys%A<54V zWHcOS68zo}nCAI$jeTGt3&|xpMBX7`7YiSEXYbg(+`82z~zJ%L$AzS5b*+PeE!_C6Qk%NuGQHlDpN(Q4vf@5zG(4P(MPd{r0 zjX=gZ38@pR>e{efmy9c9+{8-|W=DqdF)F*Tiazm1_NW*{Cb0KvqpSmTq*l1>&i3h5 zIusX5LE3$pPtjp;b6{{^>O_~$uaY9UGdN94A2C`c;G$>IA?mNGb)lHdn9R273&iPW zMZeK`Z|yZSe{6~5_L@`(w_p1u>{*rO!+%gjKNGBGmZDo~l3A?Zmy>*}VrBQY7jb9# z=5X3LOWp=aG}kboQ|C$}lQ|QXgjDFghd>?PWnBU~SJ9iP!rpKg7U}R{?@bNczPqea zloZfv#qJ_@^9az$UCfR2ac0F6cy|XnYMfV_lO%bTA9a;G+40h?al7oS#n98p=mpT7U0wLfEhi4^a8V9E3sZwd#)qRDU*6e;K@h0kik+YQ2QsP@3mfDsi z!O~x7PMr5J0Y5Optb}G7^D&beVA`%&FQV`wgNbO@9g!gb{KE*Fmd~7A5uRGsO27m=cJFtnVumZ|2%~Of=F5 zP)T(MR4&@@VvXZm&YC3Y&x}ofxlv8`BqO1qyV^3OkOrQc*9cpmqO zccXXI5jL1C_^)fn79)0fG%I#y>DV0C4A+}jS_2D4vY!dt>@ELHGaD*VSjQYKTkw(n zar4L%NEV5ag+||ACGW(dOPB6{!KD>cQVClxHIkSUM{9HwKLBd`TzM>nvOz5`<|lB1doY z?#}1VzQksHJD~nm{N>tZuIZRM>ubFR7rN?`1{KvUezbAzjQ(N?feq7;P0vhydloAB zCqnK5RtEAF9EF!1U(i)5#y)WeGq_I2dg=7gsa1#jjUx&bmzj;!L=r_B{jD{WxLj82 z#O~Ie1&_%OtGX0L+KDVP?CS4^Br7OsbgA4{ax6wy)_HeVbVkF7v3yO|X3*kiPWr@a`TEO2ASecCf?962;i7^)IcIr%?xjGmm()sRb#)uDZVomyQUo)g++AiB&Eag(^%WACEQ!e;&f9x&!r?(d=0(DpJh7>uiSelab zJkY-vp1$eDzxOZ$7+Gdj_VMMN8ruONDT0xg-sTraJFZR3Y#@i2xILM0A!6!Cl#r`= zbBT_ni{%s7Y%+;qw`&Sr>hl~;qD`;NE5~LqA5$LW7#7Uk2uiXHqpyr1LoSgc&U`+F z`OdX0FDmkE!e9?|4|94|YS6}eSoJqDv;^dJ^b(^6(st1M1~vVq%0pM94a-J`q|B1p z)OPF6I^c7pN^&pcCI8S{jYIxpEfBq3Kj0CfVH?&`@@J`A&782Teo|D~2SW7NE;y{P z>v~-#6v)jj`+cL|cM5Z#xVeeF-i=En+FE1TU&hhz_sVR_J2p)c*5*gn>jqA_L|VJ>A$*{048WsY1vSq ze)#>>nmj|fODXz{!{6DoEL(>6pA9Zh3Q_7JotSsvUOq*&F69tW<46;oVGi9E!wJhX zSlG?bzujZ62q-rUD94V{xWWzI6V4dkQ!QAN}w11hHk7t^*CBH0uk0Lr5sw&fT z>s=qT8*vegL>aUlFpb4e8&~n@Dve_qp`kPmT-uJ)#lpjfstE_(EvV4o_tIk;k1xnje^)-OXrkF4&`+!@E`7M zzX(hM-)aDts7A--_L_HPe%en)x#~P?3&XDQ}FbZhpgNy2$rSFEOYU zZF6yG;Io1a6r=m6KeJ4o;!0-w<&~MI4p8mCc&UvCxnyY0n4>!_c*DiQsuVWwvm=$2 z{`g)27gYv*)?N73dTMZ?xQi>YsFJitJ6RP6Ta_cp-g+_t37tp%uAN6Y?>p>r=_$^xkyHC3k@v6Os zS@iP7&rJEWuuvgvPh7Ji2%*8*OjWIGdCe+Po3Uh?EPrPYmu-`_b=k?6@R z2UP;yAyt$;nY}MQJ~YiznT)MC(WU`S-{bI749r5f!@Qe z1mc#v(K;+%T5kIa`@q;vrpppdHUWDT7ErwfBBHqX3!y?6H?pbqUi6hV1X~XQmtXeM z&3iHQ-thx8YJRs)VixHqNJF-DY6OUo#zzvWwQ^FtY->UpRXw~v|Z>=xjMnBM5L z$?sCc&b%`0Fh#h&HReM%^4a9F`E_pF`J02e zAyZfuymLj!(5mx(tdE<9mID#_W(Kj-{C(JaFz!swaq2IKZ5?~Op*B+CBBbfLGpT>)7v;+`(>>gF3(ytgFeB7NvS`4t46w8b)sUbk5EljS5iA4{QEUL%>F zCGAtdQ>kWb-JXihN)!*f)*#1+L?12LQByeLnzk_lqM}=SaBwnv``Rua@ zjwyS;_QS0>iaMsLA0<|xNtGfHZmsYNqz;U{_nj7*%Vz)`^<;CU;(K#9p5z8M~TBzw> zs(s+Ep zgiT~U@kuaun>=O!MWkP5oj#T^q_~+?FFmh<$Ixk`&!Bm}3uH2qxr~L zMC87-2uVApY3b!_5OpMVk>d~nv+i5fXCK*gP#_m#CXT@uf_;suJB>1vm;E5=-R;-( zg+8lgOILCwkIds^ytXO)-K7`hvo~-dL%SDotu!TNCC;``%+hMa^Pjkoa^tG~ks@FB ztAe9!-wb!YLkdnUJX%OvscD>rjwbr2%ebF#(~oLTp50Y#|IuH<#0um>A21SvIM5e} z&;>DdD4i$m8W{?y9n{+Hd>QTy)Wlq;va{KFjISa8k&s&v2-Z3VWF3^<&WDZL9-3^+ zOYYqyY(n#_-Np?hnMSQTZS|VQhBa$hPvn&~8u&Wn8JA)j_1-7ZjAaxKrS?@A6 zHF^#fJ=Aoa87j3?_ty@~j0?MG?)gw_7Mgwy8c?WomYQb59EQOnX$3)rf^@R|aZ@x~6P5k^wkmL%YhF%CU^3!{+ z&&xF3?n7GBhDFroe(c;g7_-vWNc$Xp2i)pej*roxhK&R&we7)jqWBNMvPKa?)4O|= z0~Tmd_X^Lj0T0TQmUZy=DmbSF6*Oz6YTjnuxNO6vvlD=RA5M7)l@xt?UuoUFHbs;~ufOI$wIB3h=xth*xd( z?>F2Q%xPm(GkonPMUfIZt;cg7H! zh{O-M2Ca%9Q1K})Q8h{k>I5!QW};Md=9|lew^j8=lv(f-X~Yupk|J%x9YJK+JTK>y zWbq`DlkQ)-v{M05NW9ux8_=3nZ(uTkWYOsxKUnffpGc%TU`=HZ_?s^Pl0q!Uy*Z8E zOhq|KibyN7dF~G)9Em@(8p%?pB}X;1@@}fH|M6ye)81cg&4H5W0V7 zUI!ec@{yRIk5!9NbV667d6cEno3Z2x?|P?Ptj?2~FChOI>)9SYV+AQZi(WkO2wA&vCH{mdmq-A}kR zh$!LIjea*U_A;qfQ!QX=G6@yhgrH&WVW%bDNE?MpBf`{v47z^>jn2m~>W6Es*2Sq1 zmX!{GLO%KJHmuk0W|-rFaGVnyRHoY2k#Lt|mX6N0B-x1YZ(>N}zG|_#$>kcaD@sEp zHY^5cV3c4pjOKK%+$aa zd7jj~dw`)3hzaNWs*rcgbN20uG!@=sLxIfGEA>Uz?d0W55x|Na$-)YFXNmGyO>khn z2PeXHsbX4%;p8Ro*P$XBxkUMd$(KbSG7EIR)^rC18yxwE2fGou*L-%HT5aMeQ>g@L zVupX~KV9IW0tM9doT5%yv6Q*Y(v~K!o0~(UUpai^B{#U%qcUNpw_(F8?A5`xX&0gD zDlK__EbQ!pubTbS6cgE%Llr(IDIK}b-CFjwISUl3`HwUeJj0Xxb z!su_>C9n;&0@M2m@{E!sSf|q(@Y8gdf5=BpuZ0TI^m0bOK;}l)mf;J^ur-;I zix21I&HROefmw_{hnv9H!& zjPX`D)pc79-6)rZ;LUwfJ^drgmaGAi8!>4~YF23{)}e9p#56R=dB9;P2{)3cwA5#iaE`s&1 z^LdN-uF{!XiH?SHUL;^opKpHE$XF_#QMS^MpbI>h6t1;4L9q^I0Z98TIqPpO%7DG3 z0CE4!IZ->1mrpe<=%bX!`;(o@?PUY$y2I@nU5U9y_z45P7FGHcFVgYOy!L=8dkkdOXUiO z2m8$`dSjUzd3{2RYSp2nGtMKe-F>^jgq7hiA zYo9r7r)if2H#!in@@cC7eCv!Wy77*;*T!$+$P7H~d3Us_$1Ex!j4Q}5&eoCpd}tcH z46V7i23*<&@33xRUTM>Y1M^V@gjP*&4@2h18)VR5a5jdyF!SPxV7b!y95Izh3X+!0 zBGml)0q04a^-(EF#Y~QxwUTzRs5Jbm(c8ty%euR^<+{UNN?I92u3JxUFTez8se zavw9lLy}vHQh!9QJh*rg zHn}6>(ERg^`~!d4)YNG*rE>5`wkQO{#Sf6ppQfl@0(K=;=)=vc;XMgr_%^_051a&P zV1-DB$uOWq{f2qsm9C(l!}@Jf60J7cUZRdV8*DQ|(@ zsBa}NOXnf3NcLH~>9$zoowb?RA8?+LYira~a8*|zoe$J`+MIV?OX)+bK`OS!6a+d( z8`q_HVi|!4-JVC3-53pg;@#e_yw>Gw<_WNUZiG{}W@XDl<=dlnaUa=b4L(~48Adg# zT#kV}={PG<#L*+LO%#%P+ZJYG%cc8FK2#HlEu6 z=OP&dA=ESN-E3P;QcI7lxP^&b^7?_*63so>>8VVO`^1&Xnjx(I@I#Nf)kjB=*t7N@ zRoeS5b0yPsk_M6)y!c3CLyFTUNLNP=5A5#l zDtuz=X#>gSyU|w1QV+BL3dyK(2SqVPcH;ry7Ea=d8Ea6Q)6^wUPqGMl92{1zS(=GU z(G0?3728X{8(O>KV$!p`fC5eiB}gqox4mU!aDR91_IVwrk2J)mp%dKJC( zK9}8Mx;pRt^xiy#2wQ4kV(KBb?NcWzFcaFR$5>TB5y#_}?yp>&#_611vcF%TP|7yfIh%uyBnz&#~L(Kv^CZ71NgjMS=b1cCF@Ae|RWmKKBz0$s|M1pxr~W*n zhdIga4^*aE_?6n?o(mGWntiQCuU328{w$jJ5gNB-IID<;W&K@S%lz%hh%{U!bs3Pr z)tC*@a-~rtQW&AXeP^;(V^=*GaQZ`r+$QFPc)Ikj0(}PFV%WT&ie@7ycB%P$?uS!U z{)!XkM!^b57rT8TPN0Bi#$D8(_c1+)F+}B!abwYl>u!olu6~$GP^}kmlS^#o6vJ&l z7Bzh75Q(s>M#GoS+{lgh8z#fka<+)%*$R>hEuPI;X`rKUM-<(4t7T0JjA zF{_u*h8}ukB98u0e*j@^Nx#>6>MKUi;`01%RWSyjky0fh*k^%il_qxE%PuZrjfx-4 zA3n-m;SUQ#F>{R^{*`MuR37fkWt+oJvqfW{uxl6G)RD|ra>~oBwVFqdRRVFiU<+rfH2hH^q4iLz z2`gCdRu)G|4IsUi#WSTDb9`&Le&no~tR6YiR56FO!uuK=h3apC`6A67wFn9z+R=2J zxyw>q0?zJxyB)X|8tw#;+Ak1hc~*H z%BT7ODmn)iwt5^pdI}YOk=sfx0qOV?Q(TF36LuifM5~StYR^8ZkO3(RmjX$M*DOnR2GLq8(>x?($j{y`gX@Y53F77=_T9+g@L7 zGi|0=Xiuk2X!K=2L_$GFy^>6qF*W9z-n!dYQpN{+p&XfwIJkcmC0y=GDM8v%S)lO2 z)F9||7r0D$U0aWN5A8vW(gj#A*4uZsXZ?_?b(dUW;>ibq(Q#!&w3fP?*PP5eK)>v# zSV6BhntNS(0IdzoAobI;I-`mLC48v(1Cp=rDUZVa4A}i$M1lB06)9%UE}*H4x3YNe z9aWSxVCrH{v4!lPM52u13lAm5S46r1PYr2~fBu9u-TuyHl8QIxi4?Vn7dB%NqFyZ; z(3ho3Uv<0et2%Xrpu9`2@r%#_zHwi{PLO-mZ?XK;6ZdpFH7oaCcM~=LesrfO5hu;h zRZ+T(8^xc|PE1tWAP7>VeQc#}i)b)fMXEMTH<*JML>A@3Wmb;gckD6-lB9^&L3G32 zF&73()iQ+Kww(d7BTN-rWWNdo>6#-+pf6xx>pD@mJ$ zel}3}TX6*LvXcx^iGava^xp0nw>Ey01Kh`B3<_zn6f%cdt0nvbuMLm^4AfuU`6?gn z6SkBXgWI*77T9cNQ<8#lsc50LsqN-<=YAkqt#Hjr&kLOe&QD~)?HOjVJmcO76FEH6u<25e@%G$a=+DQN{0kD#uFttt zrs?<{xMeO9*^heEnPz6!-mad)3MNY!K?n6i}Rv7c#}*C{C);4)jPL2J~z z_V9Pckp6E0V=-QhUN;IRU?eQYj>))uNov)4e#0p;M zs&qRX9bN>T63}Y}=~c0~ekJh8Yn6~L3LlV!V6A8|&z$N2f^5U<`~y^? zI=}3}Jzt>2!AV`e&Af@^e&F!ODv;-g4yvEmjFzq10cL}eH<%#+y zP~E^*a`0RLVW`YXm1Un^hyt(UnzT24&J*>k4Z-CgMyh`Nb)5W)97mt-b;l4oIi1ry zDTyyJ+z+@H$mJqp&AT2BlC04sAYfY4ozE)Ir0B+fv_c~3IOOY<=*>`|+;#xlcb!!$ zhP_eGD}jS|0&UkeN8GaFomWUih=xU^2ANyVRXLoIOEOXhLOy23qAHhz!qse++kTpV z$nSwXqw9lAnxF(OUuZUTtsEie!?jfsy-=DC*YesUTH(Aao~j{f{%mTRA})Pcy!!4^ zrQ26RmW3jVv6l1l1N2_K(HV1YxW82ovL@u>CmY zBb@S=fJVEsrUb+AipHgkrBh_T}`skayNMeZ1|c9EmBUy)<0jLpOXKS1}en9?1AVyhx58PL;_UhM=qQSvRix#zrY5?vi{g) zEW9V3*(b{&WIaHoRT6|0PVfAQfznJhAE|iP?tiYu^VptTZELOY=UF0ye4nA8S{T@) znx*{+^kb3&2TAaXjb$B7`N&eEldG+pQJbQRboOO;EKOce`ZGzRS>av$dXc%qXwNm6{uA8))hE_y2+6&*>VVMY`8J`-gSkOURL;+B-cUHb=X&b znv>h|zQWu!ye&_7^lLUOZ_$uslc>Ns?z&A5w`GQ2%Q@{qh7lF61llrJ7uAeU8`D2t z1#Ou(?F!z*M3tsL=2P!{a~g(oAYs8Ekz7$YFV1o>NGtxFry#|^APvsQ-#P**|5yd2 zIH;WOOWuJO>M7KHe(4|aJSOo$%l+PN=#)waF6x!X^%D7z>pLS0Wjp{rqIGLBD#*-cNLqP-k)RNPGPuxm+!6) z-MNc-pTJ7peLbBwPT-s+2OXh&Ezi;5?_g8`xCp2ao|BfG;~By|@Nj@Mn!1v#;-gj(ReRFq-#oAqeo~9h6hJ-L(MyU3u$|m@S6$c$McZ&)ikd0s;(HKiDc#7q@CZ@%h+;EwWz%UGT#LLfl` zSQ68gOyLNJb?QJ&m=z%H$-4$;2sjg$|CRnZK64C_^WW9UdPb&Yz%yem%13$&K3_a64~iewj_$~yK5j3kBO>iQ zQb~nDBz){rg!qEP$Faj2Z|&-@qz(wYk;Ypf()tM3Mx6*;PwAcoTFc*nLI%C z_UoTS3@H7{qqFgZ^NfEgOaJrQEZrzCbWh~XdIp)=Ia!I>Mr*fT9@@LziE}21kjD-f zq{zzRIK2^8&MsYN%DEHn+7C;;fIx;!MmWdML5@&`7*NjtH(QbFA4Fc?6PK&ajAxh37l474Bof`Gyl}Bal!HeekuZWFDOylR6Ms z8-WGJPx2fwqZIT;=o@yBUA*3r_m@Q@GU)6H||uw;Za@@lFy&$)|O zRA3D5Md=6RlMN9qK#@*3UywPv$wM9EczVrSLx}YB_~6uU@qi}vX?cD3+~G*1KLUMY z+^KvvdGi)8#s$~3=GyUgdB;+r`teM&0mie0r?a9vXr<}T!$b#Q`da$w(Fih4z zk8ko&$2^89O+)zUIhd&N0ZdF<5uE=8CfLBMt|_0j&Qk;KR51H?=Xks4$6R2_ds=XX zWuXozYjoF^_mURpS1$t#eOnTsJ>_6dFfSC8ODJ%BlO@fu_F%LleSOYMjq<}Xf2iVp z|J?C#{*oe`2EE7}&J@!j@Tk^_v1^a_dwXmK?}_?tpF7Ime!51lS0Q3HeJBaqwcM*iGa$xkwBSPMIbPUbQ zdHMJ6{z>Zp{u8hbAW%5uJ3kD14hd&y{BPGJs1cC%^+oyAS7%!s56)zyJ!(D{lVd|D z1f-HZbNtjUWB`?uYO~49b|i04UB*BkYrDqEU%;d&uKVnle7L6i< z9Ir|BON1B}4`^MU1+BhUX8E4?-h-!z3gc0NU_ZhcyNzg*LDco+b9oJ=%4kzAV<{GSxK_3-}%fM*Z7EV_OYyWQ!ufa@@H8F{jqvvX;#Xr;?>{9_5d?F!n`0r_fr8` zDz%K923o&Hl~KGcP*U%#@<8!?ecBj1h#6s>nKk!Xf2q zmBUSVObG;1PAL`eP_fbHt4Fw=MN`e^UEDngTG~q;iF55P10i@P|KYaO`so;!D|3b* zV@Hydl9ubX-q!@SZe>A+!a+-$UfPIbf|1a-r7om>MV33p)OR@E$74UL?ijzV0XVXZrmB%z=q7)2#b%Ba)1LFB0#iu91;xO8p1FO$e8-3Ij#|spKM{E&{1KdA)U1;>Au2@?a zSv->%kqWAiGGLsIomoN=J6_m_F0+V?-KqGhRliYE%ErRL&%|d>T~JpJs?vj3>eZ4t zhOFf%bV1V{52764B@ne=@izP5i<;5Hh_!og^ic>H2@As%#nA>{)~N=H5nS8uyUAr3K|BpRWw|;Clp*} zzHjc+jcor=ENQ`Bw;+vZuF3Yx+d+jWgUF5?PRhCGqK(>Zyi+>XocDNct*`YQ&SKHXs zA!1v;io^u3cEQV>6f(91=4IKp*`F(a$)h;3q<@)WT1h{aktR0!CfWk!D2L6ECmpV! z%9ydn#}G{u{39~6R>K!O`9M-B9A z>u3qAg&HV^QwN5aRw?5{> zAKYx$Tm&TBlWD3b_;GWGP0)nVB2_nCW%2^6PK8mB*E8}IBqaA!*WEY4ozG|T_nq+d z)oOaedIH#L#1zA>A~r5`HjTFt<*cY=W(-=USBy92`>IjAKyfQ1xF>hY59k*m!WUIY z38sy8K*ZBQNACefY=?JKVMj*KkAcA?wxVLX)p&2KzMgB=4AJe}pz3cUdpuk>OCNKnpTrrx%lL)S zbDVBriO*#xke#&Lw~neVQ8H3BoQnLTJq?w-JF@sVr#tnM^NNV^c3BG1?d?Oskl3r0 zU7Ac=^mIt>+t{O#Acy8ZN6MQwdw4~|4PM?u70p_$=$D(+PtXCo2$JElHeie>cXUG1 z;kObW3jG92B{~_?T!UDt$c2&3Ea$0^Jfd~cBp>WP%{ZTrtTs^(EWWfe$(w_+w=o#; z6wl={IyU%!!6;_jM?Nq8edji8ys#tJAukD0tC)q{;eFo=_o4(sTy zIANdmJYKTst7GOt8QQ3OGhkP;*;xr2Yp|^b+P*?`Pl7o!50eNhHiu?jU&@ioaRkHAYnWXjK1o z2kOrI4?7sgnJ0*{T$@0I?)cGqt@30{Zl85ev!%*82F-bbWy?K(dk;3lt1Wjjo1He7 zoNiyxaXhtS{&yKidPrNqEW}>lU~Z90GW3Jb^XPV6z}7&uO6w& zm=O|ij)e_QJxtvO)ZH`_zB=DYGIpF7}|W{GLWm` zbv4R|#Nefo8=xw+PucXEr=R~)3|z=0$W}#;2g>Qk?Y@=5i)vI|D@*M~P%0Y>38Fi* z&+ALg$`zq4q|e|m0elO(3)U4xS(XIf=cIJ348b6raZ46UbBq?@#T7)&7!dmf*=jm5Skw zF94RHU)Ow}o5>XGJ_+;G?^>mkIq3xT&CLlRhYfNIrg~O;W1ils;)I@`Zoy29-!ZPO zuB4p{fXG-4=*O66W>*n-0+Z9ac{tBJF{dr8WpIXNwLU}1<(;G>coN zT93g3f$GkWfo+ebOp2NfEq`P->(&1yVEgAzv*9@WJjVd*fcLv%dh6xlDru5F@ce^| zXy)_3E2l0reZC)8b_?%4yKY%Be^qwdX?EIXyXci4s)A$)b8(P2J#Dyh55!03QLNIa zN5|I6^;T-1W-5Kza}FlYnT5y%FV;ib*c3>1OUejqZGDeL;A(eiI&Cn;=&EH#ltXa^ zT1x$k>-pqg#ARQUKE_DHjmONTXIO{QrHT9up5-BgS_Kco*=jDrw6sA=rSQ-0$L^HC{EI;fnR*YX!`Mp!0ZaIVr@E901j%0Y(iGRP$i|6KhAb6-ARKQEcG zVW_aQ_(W4q%!@r_GM;2M-5ldt%xEARIc=zGtrkN1HFYl_K1QTV_0I3vgSd{pB0lsj z^;axLq+?DBz7!6^bk{`356)<> z)N>~96B${{7d2>Kf+9%)2sHY}O{OI)x@`b-sp2W=5zmT}6Ir zd3~%t{C7C6p0NJPKZ1qs$v4f3b;#Amx(t)z0`3E|ThpNXU!54@>p2pB2urEEDtp1##VlYicq2i^)zCy zI6DA$Cr|1TfKh~--kv>Ujd~Op=>DuPU#>A2v&Ile=2&}3z59Mn5BbZ>J)6tDr2t+o z7{3sx!8PV`9~*RyX54EX=yYhk*A))hoXbL5cZ=ks*zZ<3ek2bw*ayhX`>@5>vzfc> zJjPmdF?Hno@$6dvk{ypax|Rr{f=Rlq6;I8 zf_B&DzK+nYA)e2A&e4@3tzvh+&Hc?0d-kgNLZR z_@&-|ye=b#n{>${UzHGJiXUP?$f#ZSlqqHD%%SOhF`@iOUg^EE=nT zxmaAkZ;pXmEM5&_#k6)fZn9&&^tjD>VY^iw(O)|au{6DQX^{_CDr0t-NzzJh6O3us zq13m|r>V$!g2{bjdhBxrV_Z_n`M?{kjbACy;CG*fn!LW&A(v%((ckzvFbr?}#`Wjh zH;ZG-xZLv>acZO2*ARxW@#&z8x~NEg?bIRPAI-V#t}~h!CqiTrh-7w7QR&9;eg4>; zKHa$uc(5bn_8jcd4nm{T*orI9(@ZpfG%U>-&uIV9 z#tJj=zj!v*VmFVzDe^GEJ@Mx*eD4PD>E_Bl&dd&9101-ul}XI}p~#bRTvIUeKWcZe zd2)`@mpcFs#y_9$u`O+>;{4f!;>INR^P{IUb=5|lx9^t+5tYdrf`7O~(y*11Y67;>zV9!GR*-XCo%wHRQzx(M_Qs zWf|0?G!k#kH;OKu*d$n%K46plzgexE5BC}M^3Sb&fn>>4J2bYf+WT!OuoNW-YCisg z6rybi`Lui(aV&=zdMS7vF!W?F%p0 z(~5ngEU`22M$42l4j(;!38%+xC-UyEF=?ujLrJuJYs7=|EXFswSc@f))qZ1oZ41&Je%H_roI8Yxu`mo2S8t(^-5Q`Mr{Nw+6lEjsVdD^NLG zuZcBR%g~R=9OsgwhA1hR&pE-ZH=mRPMHp#w@3keu|1cmwu@P^C^=DB8-MVYO{uRSt z;`bSd;?%1nJq}tBq!^XDqYY@debkpS*ily}ex)yTZ@|{y@f`{`qp_VFn(iFw^jQL0 zv9+IbtuD|JhPjtAhB!H$g1-d8^;a0r2oF}hU;LhA2-v|*^4>kC=Nc|0ghdY(0^%3T z|E?;a3p|5Z4ZOWO8llWGN7j0omy(7Zt$HJCI1JeOGTK+56E;~q)IqV8cWWgSThXX= zCqKE}>wqClN3ovMh6!dnI@!LK(sI_PrE*}h3YVKd6IsKeGdEX!jm|3iPYnj;KnzIQ zY(g`4b2F9i^J&x{f!FCinst`)Uz>9WH$4x%C~T44{o~ZHg?@>p!#gV9GF>=JKO9Z- z<-)DmK4xrAnC#G-7g*t!<=-zczj+~h{$=S>b?Qp3jg4p#E}Y!jA;e^ZOH+&}A~e+N z*;wm(aF*!* z4Sq+Oro?yrKb^M^O!JsS<1QF@qzUR z^SzPa(#fX%ByZKK!BGDjXl>E8u7+CdWLn^7OrKTMK+39Z=gT4f&0el9@da~(g^aoG^xO4x>$lS^eq2$7qfoyvrJWM7&sPJ@2E|-sd-I4@7sj<&r_Hqx zY#DS8%=ifQ7B;>Caz&N85JA!K?jQdWDlqpGF4=^K@Cq|-G;b^LKLTuJQwz{3`JVEz z*}7rWdR_Ri-iFiRy5vc=g5uF^J9|>7SSjttmyRrxYgKNsgO58_a9$f^w~Y-Vak##S zAP23MJbqAD>ucMRY#Ta~+2Mb-<87G2X!jIUpdJ(L)`QrkqR-)V+3{$QA0oEkHk5pW znHPA4E$xGY8$NL@kfl3pq07M+YMdqgs}Jx<;3-sYmc`P> zxl3AoXFkz+wJ>mXFHAZVt{}bncWchwgpNMGNvh0JTsWtlP;#}lKe}_F>^|KUlk3pc ztJ}7h9~nux`%{&)fu7I zD&&T~D>eNlk6QNAq8O7-=gT^7FB4t=MW+kx25YpzN{*eek~Xl$t@e!m@QRt5BQc^j zU>?K0Dk!yQW40l?UZAFyw?l(Bv=EarvGnp@=G02GZ8DhKj3jZCq21{GFVmFLQG^LC z-9hWchq7$hJ4X)mS6IsHxyxO5q*N^UGu`s{|lanLj>u|Yyp`Ovgrfv=N&q$YP z`OIr@3T9D7I)uv7_keJoBsEL8<;RtJo07x#oS+Y-3%=6Z1ZfI#KdX8V_JqjJU4yQj z9!^<;>0%PgK@#f#wJ<6S^aEr1sel(fn(mR%<{D-Cjb$h4NdhCJ<}ak1Cq!xxOs@qn z6BpD>0w2L|o=f1y#eY(+)d+zEY82N&U>9y-&LYC5$R_GD^j zwYf_^rrpv`oHMKMOX-uZYb!+@u+sc~n9C{s7c84We7Lpxg%8JjO+3Tom>EzPby=T2 zZeG%^7?E5OpQ>>H-oiVr#hUI2D@w}$W80#-!Yl)>*k&beBasVgj(jz!@3_w8V%jA` z>RZM*T6z0)Q=69SuMh6C078DJKEtY#PZ6TaR9BKN{btSA)Lw1W?IBLdhcK}sc==T- zU0mG3XsSnvP!WC@rd*_t^HD~OT8EzsTj%;EI_3y;ZWc%EmRBm+wuto`#ddw5MYZLd zMPNp*O(@^^GHWthhbE+sJIIyy8Fuzye|Zbeyuq$z_l#fkFpVFg^}Tq{!_DEo&wjNV z=$~}_L+@>UbG8o?I^Wt<1xYdVFS*i*Tov7z^Wk2s*7^*M=}_Rea`m%X+VefJ8!!|} zx$&`2WSR&KA6~(!Oz~oYx(?Hy`!oDWsOznBiEK`}LW|i=jKziRo@4wt1_RXb)it@5hCPP8R~^@v z^?jq4u4fJCATzT@BQS*z%6f^-h_nc=SH*nsdn011{ROYzAN>diIxNxsl7mK)+sn9? za3&`-2U9K1&Cb4VBr%7|ZDt44qC7W5=84rplz_6dr*l%joj1onE^kGV>86mGv5uP5 z)|AL%=M;&xfs}QQ5tWQSXtS(P8VN0uXZN-jL36RQ_WIyEE1yILz9bi4#`XL@D}xq< zomc?;lg6=5rU5t^oSjH-7VjL=M%FsH{ z#u&}G9_7yaYM!U%?x5*Me&NcK7PrdJ_ITZ_)EoTFl0HJ@>&{s##6dHqut}VU@uU5; zfPV-!SMCY;pA1NhnNi|H1g9M_BfKz*xQ z*pgiK<32R|rAs+`O&;>55qJ!3lOrR_+p3cEcVQ33N)!l!->ku}ngOn$_2g zy#1na^bLLVOzZT!){npl?kP8@IN8ntlT??lTR+BD#3Xu(x6dc9X*mM?^Vl#-wB#%? z`P`~Fs%J3Kwz}6TcjftDjR1OnT`MtKFp%@bja!Mtk#l@lccogM?d+ zc9@Y?A1MWWljOk#S!{*Z;)1*q-E9-8YJ!>5+CvNI2lU*lg*3Zk)a|t3w5|CSVM*D)=$w{ag8|AgZH$vc z_vO%(G5g#;x-zMl$VtzGb-jEk9oiV67tr~5E}7J!O#pH^)0}<8?v8@mxwOE5P}w(o zFp106Cw<O(1^k>Et)8V@jmWka)P6u-c0Zl#Ki@!Mu>3TH?&2#bJUc{XEa@1eqW z$IUf@Twi}WtKGf4xz2{hxh`8qvL&r}FV1qXW)=TFf$GswQWOsh11kPU<`$yLC1Ypr zr2U&wFYU_OBU^8K1#t|M=mf8{rwk~=d;*03$`Qd;4G7@1R5T~$v+r^vty~~A-z_d? zdbLSi;&v+^N{j)r(@KqY2B<;b9}WsR36jI6p^K=_zKaWUyFQf0 zetli|WfA5-48p8gkN*}T;dSJ3h5+FbwYP=iuM*$8dt}tkJtrO*SXY#bh4Rq$TaexZ zQM3aVRV%Re00F02=54)OR;spg<?Z_zvDYwE42}YDD5bQ@_6y>@2x3GyB$8Hv2Qbq$umtKZyvGAZ; zYwpj?CZ-M!2GoUH(`GL=P?83EO-qGVVo_*>;Bo99K0yZI2HwScG{dy?mY#s3QvD0ok8RL9RYbOLm7|mjE>5sS41=0^8T2xjU(qZ=SYYZJoJVHs^8jFtd-D%8Qv#dnkEA@Zhfz=5H&b zPNh2E$I+;?rK^IIotazM+HBYZ3M$*h{G0n!IG-d^`JV1Ix!KCnw~R>8#ysZreJKjZ zZIR{H3e9zed93o-yHWDv$mC8z1vlAGntdnJBws-(DTSzfeQKv=L^Q86Lp)&AX6)lhNu6!&cNRu zNk{y51G;EFA!M9voLzTpc2E{ktsOzMLh0kkKRd)P(7x6!hi*J0owRY_(UpCtaLp=o zJ~QRNkRFZwQW4?u$28lAHdU{Z;zO!697t_*0ya1I0}{uBK28|5-$Cf+DCZStZiPka z(9K6LAmF58EIOsxI-ViDlt{bOn@UyU-yvVf$LyMO_$eBxk`e1lO?&5=FnOWH%S}0t zd0Mb0ee^H|S!0J73ZB{-1eQXZGE4Z*)6Ov#iX=%2BDv8$E)sKs*1UO!o&iZzVkkfj zKZbDU&DX7OdMzDsr!^>5oWgFlq|qN6H|VN+_-555G(%P&mAGyS_z_(Y2U2KNPo-pxfe423M%O8!=9EqTxUbd?kX>m+;w`;p(BE{yb z8MrXc6YNB?Inh-bO<3Zi^{R^Sf1~;^Fpn7eOl?w>m#z7*ahvL>F8x{ zq}a&oRgZUnihbaFr1iR@89q7Th^YQ9KH4@N@%wU~kj12T!FY7)Vv}C?_D5)KX7Af$ z>upB{oVayNJ6Gtk+RnXYc)vK=!FegEw?^akbnDn$-JQmJ=We|gQnJ_ab`Nzw0O>^Q z-Z7Z$pHQ4&jwKLlzr8)|wa+AR>6CunAjNpj6g%UOJ!>;5Pf%x!fpR2X)2COsciI_R$}l8~%NMs+U?NZ^02#-H*zTT0)%AP`6O6OgHgPWwt~sqDre)$06R29Ivhi`eTK zgx8L{$dt?jv*aYIfBg6BW9n6$DiiicS1bmVz9M`MHNf^6&Hr55mF%z}CS<0+FpFMT z(pGoW+|DbdT&}c@Qd>OTwkY`7pJYDVJ5nBScHGfhE3@6fjB(*6wwr8N=83zClT zX^Ct_9@evuGHzqi15dS~8l4i)_#uKy`%ZA3H>`@Lwl{4o$3v;zrFlfI6lN8Y_*zu2o)R79%`^1D&93?V7j65w*9vlmFwb|W z%MJM2_pPH^J@g@H9a{F`&)VP(}uRW~@0xhH3bZ^lX$cJ2GAN!FSjX?g%+jJYk zx0dueei~-GG0P@WHF{&qei5R*i2(*uv53xcEr^_qAT==dxHTjhw|nXVZNw|iYh=f` z*lol~Y?k5dQlqr8t=iRC3}chfx@~JQr<<8js^&sBM;bWYM{0T>wH#0rF!Q7ij}b^{ zzF9Sx!qckgxgpv28-OB3*&~dEWy!i?rrrjmQ&lr{cWl|Xc$LEfX^B+$oF*jP$nK}^ z2pt5BaA_UfN~hjfZYpE6sTxHG`M@qt`Pi4IMMxP>axje=-POyXqd>1IfXWJ!-m$Ms#^xRC~B%&!}5#AOhM(1&z`yGUS_ z1LC7#L2igDS)=rlvHVlX(xoqK6Eu8ySp(GA(xKVK5!0HFq!aVY7kN=i-Qw>1c?DQn zJ#mhD1;S4a9oieqnVmS5FeQm6_iSKNndXi?c;pfi_y&O{e*0yWQia2v9#){eVkHzG ztjj+fPo zxptvqWECkZh5YRQzfp&EijNO^nYtX|1xxd07Ce19C>L)T| z*bjZ`oUz0Bl;qQ_hi7JSLZqVBcj(8jv9CdLvnR$6FnJHN0i=HH4sYumX>xJK>|M@2 zgkZ1x_CkQv!&4-YVA2b(zNULA!KHe}tBZ>G%9M`s)SpX*W_f7?_SQbrfS5LHmC;wZ zK9yM>U6H5Ob3V;zXttx`@akGaMT#8hrP=9a=z{k*$#~3Qx2QQDyE`ZEuul&1RZcXS z!93ZTk3@V(SXHUJx|GByz+T;3`Xc%*i+CmdZH*UaTglRPTC9T5bX#M*Fuip1D2chF zlvV9M=4L>izGLTBUA?wr%Id;+NXt}nckvNv^d#o#2iwjqzMcyQm7Q0$1%4`@+L>(` z)E@fuu5;4g5?(XO|K&Cl9b!OxduZ`FBIt8m_(0VjhCL6&xAi;+BWz!I7C8(r#`y&Q zi`c&NbJ<$uw`^EQ)(JGM6aJi+SR1g;(KK3y_KELDslu7I>6apa=u6$U!2|a*-ayal zZZU_!SxfsngGfo<8dHtHg8ZK4+@&jAczC zAh3Dgu3BFiwlMn*SVziiYU5%OQJD{=1U@x`oF#Kv>Z?cU9?aNs?@-N2y6=i$OST|b z{AtYWR*M1i^bM2l#jQT|E@(t5VAz&_DQ>b!hSJmx8=w-WuN42jX#ul#eXc#yc$A^U z*lMgG&y?yVC(eHcFs_3-->4o&)ngJD zF3Z?OCRnN65LTVEsfIATW*ji0sZ5UaWk4k-gd+O9eC(^}LleuZv?$Wo4k&5guL|Cx zb7>>Kz#o`jx~V+s`OpoH&G?e2@Dghxw?~as-MC^=n$05=?f9^V+T5|$v|dwGHOyhy>x){(8ub-g~bx{<+)ouTb4%|?9v@!x`FK@ zaZ-h94UC@O{`_j!v)!;Cp)qrt50&%!G}=_7^|(Bp1h`U$)HvD|qa}li1ke)xFaU+t zW1f@aNP<0FcRH8dOpE78iW|G4Jz;$W9Yf>AKy6&+OofS&>XoHM@g7NM!WyWTpSdJU zYr?1B82Qa1>zJFjoPh&O2%6;8xEjSj!>~*M?6I8f2d`P<2DIr)o31v41v@Nc-ZSSp zlzg3unb;u}to~Upaj++OJ@0HETfL~iIN{+0{ubTdgrFxLV|J2WPP_|z6c&CYX`2Mw za$1AQApb5+oRa1s^h@5koeVdxI5GH6P405zf#8WR8Cs3cqvV99BokrXeSU}9s&i3#@OQnN(-Eb>`b)@yr_5F-*;@gcj&p@=43|(u4!!NmT#Wlmb=mEft6h8J&edVQSP?Uaa(If z_iWJnbCizw;$hYo_*kk(Yo|nC{FklfEaoNlVUJ^-ckRN#lVz>Oc3kN64T1*~Q=x_D5UXQI}^fXFFtI48oZ8FPAO%AnW}vW}$cU&YT03I~pk&y9^S-YeC4e zi-iWxlDZ0-q&|UWh@>s((!3cB7K>DX6OsAYD*w>YEZtC~x%%s}Lw|X50=J!4l}Asq zzo0Pf8U?nln>%y;1J~bmK^AAnk>hC7Fn*|o29MM1JO1bx0Az^(s|y0{`mc8*g!r`* zc4IeFem#nRg`!2t{QSiJ@BiLfU&`P;;mWv$4NZfPqbd)g8U&7=k(Yb~0!O-?nU58YAmUgsGR6jvb^eE&`iEQi z? zKIprZ-hb>8K7}Hs+&Xq_OIbty9Bc@FSbMh+{9#>>TS1wEp8sAc@)f+|L$*_Ysgv+6 zV$xI-gBPf}C^{p^m45F?)W)3Is%OuD2sTRX+N|1f8$$FaKj?`fn+>#3dE|?=5{oZb>Bn$X|67^|NqG7pBf{ z?XbsxZYk4M#`?csg_T2YX~~lH+SU?KzOQW$+){gB=iggeg0&{~UrYE#`R(^VtJE7P z{O>9yBe$f;E&1f1TUv02TVlFib>#0cbRozpCH0=CyphJJKeyEAdN=o|eL^7Zan%6*^u^G*9jJD>g4v0 z{qXme?!!0v&mY=q83*nG; zl|of;vP(=4?@-qJfGpHDAE}*x^}hXUweSL6?(BePWB-Br@b9ygZ)>fzTmGqN`RCyh zZ^1WRNWHaXOFDmET$ZccKfL%tiY=|(k$d~EU8I2tw6FRKAd3RaW{CrzG9wu8M-gW_ zQ!Msj@&YZYeC_bLKOaCobpu&$*Nb=meYP`?5`8QVQN9ED0oz#n^`C9*GIL}rWZFb* z_uKQI?H}ohJXuj<=MjqT&L5-5Jph(;%-v<{v_g1M^t@A)lkaKTVi@JpOlcz*6J z(x}o1*4+A~=bbzJhCb-ZwD$7)Ur*oz=1HVXi~I*~yX7qw= zf4uMAJy>U+@_$_@`>@7@=HcE$UGw=h>jp5@I;&m(Fdy4#9O&$>&9&!B{<@s=tk;kt z6}`s!GE5n!F=g}yUO;a?_(O@3lMHEKX!dd!-Jjo;Vcy&C|M}AM=uf-mJFSib_a`5Z z3c$nnbp>3QO{mu3te1VRfVp&gT46N54cp1Dk$P*I<;rI!>;3fX3Ttm=(%i$#zr%mD zekp?&xMlKoq9Li4G%&S;-rw&#EIBfxk^&9*6PQdcA~~n78jIjR zw`y4okLNA=>d2O1Q|;)!3wt#5)Pbxm>|nswCN-`Rmx}*qLoTa>d)=JG2mK>WfpR$j zPbkiMi01Dm{QVj3D&z8>51qNUcRgZ4fnr+`hNrU{|4%RcGmy5 zK>d$5_-{h-KmR763bjVK-Bi`Tsp>z@=Ra}yfBc&m-Cih&-04Ilw&szDXBrcsBr5E} z7yfZLk)OfeJe-u9`19Wz9UuuSoDI5v7RfhUej~1HAJxfz-0^?h{4O@63(oWS>_0M8 zC@OJ>FyFr(@W3u8X4z6%K2e;vWx|$+FCw0d{EwySCE^Xul?wvtLY5;BN|J5I&Gy5ep2+dGP6GhmGLy>=Ja| zuYm@F#5=2UTJ*O+XE*a)X-px_H7<4Btn64mNSi$h6I~+;63@($7^>@gk8k&3gTqfS zfXuChBYBU;@xTEiF!dtxFe`uj6BJY;RVP(H@2TC2pYJb2X5RIQ76l+-rx3W)E(Dve z3y?Wo=w*!n$giYJKgO$eo!Ef8tTfjRBf+X(Aa{>6IBjHO2EEYHt??m-Y}sG;um{od zb(ZY|=JoUa$WcT<89vT!+M92y&FlCOM3iH$uPx0&XXDwx>CI*L0+3i4)EtFjKI@F_ zjlC>zNF*B(t|oGg208n-E-p~3Tdxm6UtGKw(yE8S@5DY@28@4Zzpj5;hk2vd)t)ki z(Hw6Jyu1VkuxBbnILf6>MnH=by)wL8d4tUNqNG!(W&>EQ?>6cIpNc8!yempx(2es~ z;R1Ya1O=|k*}$#veaYosUK3Gbt!MA+cnmA+PGm0E*uQPjuE?LzWnkrcDL&{c0Filg z-A?GfnHWR>19neyui9`4!E9U6;;Q}f^K6(yB~acqj2@pMxH0|Vst@Pt01qBe{5bFm zG6|@IDb`{C85YqMX&I-6oWq~U{Ynux?QN`^39~@wJ-8{`4;VBvqpLgZePB=BM*5iiBU|VPr?2>O%bn z949xza-R620prU$P(;uJ9AaSMJ!SURm`VW2e>{OV{dN*gb5n?kuB9#2SOGjq2n2nS0s_)g2Zc+Bj(+@-B4}zf`?VF{VomyQ=kZcG9qDT8w>E;IS%H7alK#SCY zGP03xg1PwE?Do)vtWnPab00JIdd$OPTLaJe-JP@3Dvo+RLPJ01K&T0U-PZ_(F1GRk zI3SN70AKfO?rtwr3TZuxJ#p8RFK6ED+elOwZn_aAPkS{Dul2;xohiO=mLoKet1{kq z!;!3oA_*oPUAkRun~j`Q)o2R*gF^!$_j8T0T}qt7`J5gs-!VY$L$`82k6G&YI3KAK zH7FyKaI^-dUpYO$daI1YwwD#(H>PNN$;Ub4y>n}LbE-!Jl?4u=kwi<(W-p|v)*9Qz zXh$vKjM-MI+R$=jhTbg9B0BhJ9gJqL3FyH{6BkruYJ_?~ zB4pV0dWLaIY_?lw!sy^@t)z2QDV?8gB2mJ;K&4J-)c;R&Ip3MwZ#ry~TPOaZ7nGZZ zbqmMi*|TICOj5M`L;-k`*vo_Ba9l>TpkkP7k06uTY``-f^@%NC(s!qJb^?g2m)5TP zK{^3yT-pPM$MV*~mD_Ce1UJbM&%f?&V%;|157t%(#QuH`Y%`Ll7v3+^QcW(5KXRkT zFeR;a=!dVx^a~J0mOM8))V=J)*p+3NTSfky!*jDTFhG_)ph(Ba-QrvZ74(GfeA*Ju z@drR=_x_H?WSq9jxKuACob^$Bo&xmf&yRvg`9Ms34@Gv4a3L`oF$NON!yJn1VD70;V?aT(WL2u> zajgo<%hS0agLjZe)_d|2lm$oz*Ns$F<{S>p+bf9l4L%$)s|olZM~UAfK&05(9*INA zPAQI$Tqpb(Uf%6cLgx&`okWvmgG@)MZ%xm@#A~*#7}Zu?>Z79Ggu1FmAlD~P^y-h6 zYHvE;P^SK|%7LgO7RteUQYSlLn0EnIvdk7oty-u5CYv05`yzV|L3s?pup7G17 zmKT7wc)U26L z9V>~J#_};`C-lOa>ML-t2akNR6XMZcv^O6#BKffUyTe+5-`UtU^Z8s_Jw)pb?g@kH z%XLWPPc+9Dy&KQi*YT-NUU`jVDBEo2ye@ zleBgaKtP9eKj~3C`UY_at-lU&1;Fy12=-Ny_S=zecq3y?F%~ zRDV36Y@-8XyQoSZ69Cq&rwe*d--?SmZg^Qn1-_VnMM?Pr6ZX~hR#>Gcmo(MRzyBjT zgTMGwbjc`hkp^!q#EL{FXEAN6wIc2Yvw8rTCiatBQvztEUn@2^O;9z`A}|95P8(DC z3=DSfJTSw2f}eO?imp%vA-B>Z>AD3N9X&w?*4&u+A$>sBn=z5D{xW^m^x1g%_b*+T znp>-O+?}LKoPMH>w_U-sR~RnGGoI%=@86M5bf>QCZl8&fLpOBa7XIZAS9ixlCLE6B zdVSBL4R~KRHx?rN2Aq|(3wCN5sC_1SUJR_rIg)es&7sNI7UjyA4?jzJkuzXJ;{w## zY?O3r?8u~!+jxOhVTr=Z3(vNfMgMtoRi)Z?&LIvZotBz`Im|JACO7R*vradTdWPO6 zlM($UN#Ve5>Q8qRXcG` zB|bH}f*s@PHq&S|4Z;pyHo=C;NzoAjs(_kF9Gw9z!z=1}pmD`O)|J`=hf--Qggy>2 zh`$EFRGa3DO<4%c>C@9n$rgs2DN^D&S+s9>QoDhebBc67bv5F&Qb`?OPi-yG&^D4= zR{$f{*b9mnP1u5-!SN;CbXuNTB0^@(1~HKM3f1o(5KPYqa2od-2&eRrq;bqX8E#)h zMuMJ3KU=sTP)~n~Q8=jMcPAf$a+TzKJ}&fw(NYA$%j-Ea-suFb8Rdr78deDg6qqtY zk|#T1V$L3-XZy1!yZl8ZOdB5FQ&lEhURz2jzVvE+V~wpMW5WsX=CuIgJH}aUmvN@w zWj7^UB&DnMI0Ry8Gv#@HCxEw;xh-Sxk!_xz^_DVfi$w37nypW@L#f0Ajy~DE9ga{lB=(KQzh)RW`SktR9My}Kt0o^suN!t z0A?HAg+RR}>9QtvlE+l}kF+{J2UrX%n1;c`m#6s1{{4N-rhU_z;x?G}g}hR-i3NBs zU6YT6vcooJj_1Q!3Q6L2^1z zOk&J1y!Dd?ZN^+ex4ztmL8qM^^(-QAI<3gWJPkWWz5nEK-j}8o&nFBpkG94NlRJBj zZhxS5t}bwzwvmZ(mz;>}oc`XUX_nBU74~UzIzfB%Q_b`!)UIa8;dQXbW^Z}6+TQcB z{rK|XNGjJD)(kjFOXj4T5okXHu~>Igr~~h&$F{zC0s4Cdxn%OJ(`nJ1b%eHf3KwqE z&u^j4o4=rK{G&H&=#Fq>yQ>LfmbXt|#pXVMKK{xeHFxZ03H!-%q9K8{i{9*a>02by zXS>^wGLz`9&xbWIH_&&~H(0b6YdN+MUfkamEc$(Rh6b@HGTaw%|JX9QJxB zu+HlUuP_wb+JEqQX$$YoZ_Mr|KZaQJC0NZKH2QWN9}8!jIj-%kGAI2Sj}{B8cg zl1<-y1VH={dUHcb;HanT1{?txcfB%160>>wFMU+pA;y)@KrwIKw&Ya`5EI@ zbV@#wIIyDQzjDEpa@Br_PUZ7L+s7d~&3KU@C9OCKXU6f~RuNw4iWprua0~yu^ZkxF z&`@h%&s3({hh_aqv-#yC1487p-_Yfyqo3dnXs&Y(H7&g4eeROeU-avMNvr4M`wizE z`I`$bdY@Z;@%2=|J>mJT2sVaks>W&aukkT%H(yxeI{Z-~-&*0xX5LIE9s zIEJU_l$9J7)4Hz$+=ljXk`KIgpz*Zm-pme>@Q^0d`;Px)@x6X}byoFl{))_9p2v@ai4slY7sIiEpKgd- z0jGb#ns37rF!O6?ystn0dM~AFWngAhG9~IMP%gXk6+UUIKFdE|M7Py_|FvUk$@)J2 zng(0fwJst3l(Rr^B!;a$@eK7~C_T@6M{$t2xwN@~!>kMk_SN0P2Wonx6|$AuExZ@inD(^mX3A|5Qq>%o?rkgcA`Ki+9vss9vjJaAV$froNo5|(5wUDE zZ=X|OyY59C%GwWuO~|4byl=gpWOv%T>8{fgqc0cM{X!HTGnF=|#?8&$fwzC2w#DbM4> zw|}c@EGbEU)^;M<`bB9A5}=W!rS&}MSSV)$AL`qrl^JK!Z4-38?V!M6HKYfl%EC^Y zvERxGomLE9QAdeo6AoT6nh#pgDDNvvd)PUwGr3fVOA&aYuAf5{$*3JOY&EzAmJ`0>(_s!jA&|vX)yO;HzVYQ5JTg!Gy+PopY z5gEJVh_-DEH8c583adLZ)%jwTjn^MLlPlaAbPWLv z$X%U4Yhd0*T5Ww_V4bL$N8>CBK->qqRzAk%>PBftX-_0m-!g4HVDzGCdkR1vXBI;c zNxI|0QmvN#QG+=q5s}P6ZS3x})rt|1o02&)>OAeP95ravS&~~djx9D7`8beM(|TOh ze<1Z|#nFk`4!I1VWudEETVi`MABd|Pjd{oZ3_!Oo-MBBHJ`%4yWN*HtD1_a+4*5{V z36ERibq1Y>7@JLx^^oi-lTIa;N2PhhR#I~H>pItg218WhWOqZjt92a5=)%Ka+vpKx`6pqm*riFQSwy>hw zM=Mtp;F$xfIIVuwhMRJrH5sOf*O+Qg7(A*i`zoETz`UsCKOLdVY%QovV~|p~wnbXD zLu%yYRsU}$Ogx%xM49jR{ubx>I3CBywu|RM3i+iWe^D_ZWtz{>th_?=`lckdUMOD6+Y3QN)V< zo!}mZF0!(wgmJAhd6k4d zLb{r-l~`EJ=diRcWmjgBSGU$Bh3T_zmAP$pa?<|JUQ-R`O~*bEV&i03yonxbez|$B zj8K2stZH_<=qVsZ9p%^VB_Hu&Vk)9b_H-iG=OIM|ejo2pEGFZ7o)kbbDH@Ems%Ris-_I8fvd=j8z$LDE>|c})&TK!gCf zAnSRv=}8?Qv-{i2a@>n%_Nq+`_nG`O+-nXQt3>JHX?ykZd$j23MZe%SRAw?!0<%wn zo-SN;X_?JOxz&czghGG@Bbu4D$C6|fpCGw|yf&2MSrhw6PYvw%ZgxklwH9iJA2p8n zd=I~-$QJ?JXU0Gg@ygMPzADSHwW9P-^S+jj%beEF$TPb&Pv7C*1D7(!w9IcQ8oBf% zyn@(C>FgcGOnzF*4VXS25EpWkodE=lZ~|Y*3+# zWikhE3HF=1A*b z;hiA@jgi$8lkUP=x}mHr4G1b+u4u>w@VX63r57r+M3++X21DGY8w!0d2}Z5BS>A#8 z1z#fUMhk9A8MnsXhvdN@TtX6lBD-_NbqND98CR|;os<`xEi^O=1bY0w`OAm1{s>BT5l%RSVy&;sr@ zE?0S@l&H)t?^Cw@4Ow2Y*#nJAzXICIu9h2IdZS)mu9cxfk~b7?oHk0zm;5?^hh))g z-esDpW$$EpW+G2JRx+r&cf}&B5UBFE2J4IAB&i`38yp%=!w>Tls&`N)$?@#dE;cjf z{RHt$u3@u+q+-^tvu&pMblFcFgc2g&x7%`#L0QzBuI>y$eDh6dZ)+=k0i%&66q}fK z31zOBYU6HSsb^-|YGq9hX=OfxIUy>8MZPqWC{pseMhl@>0&3~c09*u+>RQniQr|#s>MyC=qWjQk$9O&FqpQ_5H`011@xC{Dzc9_v@6p5sX_n z8!7xH5qU$|EVCM1s{bszyb7=VD;A=oNF@ztplw;Pr6 zMib@xkY3!JPgFldYy%&ZR?vJeIKywugBnyU+2^eMw71?B10usI$RwRB+GzHpGuB`D zY%qp@bo?@QHqtiCzV)HiHPT~9kXp~~Z%!i{cd(fwmbv^Bv9If;n1k6bpE?lYumT>} z`f!s+(xTz1Kx(nFi%Y;3NvaCy<9kOrudv>o{*_R2w90(ub9{{LwIa2EEmkhFRiQk! zkhjc>XWFvFGW?2iH`M#+vRj}o2S;?dRJ|&PJm5 zAmKeB3QgUut{bb?yq3fbG@Vxocl6W%P&Hj94i@Ol4zpxKE3JcK;?aTXT8WD39ab*j zDJ>3$_VJ6|Uz`Y?DVtPQ`7I<}RyEefNsqG!#&bLh(t8<>Cx4r8t9|9*rw}v8j(?JJ za_}^)MWrb}zJ84lo27h7(@?|#75MyseNOF}h@FxHAVVRa zUP01eWGu-kf}>v(J`?YYMwBo zdv!wgBOnh~V~yaQp-gd6;jt~>W&282meQTz9zMo&=Sd2XQy_Glh<2nR9z29Y)4veS z4yE#3BsbjO4OJUD?`3B0mC)B#sM5rYXJX{n^In+VoscM(3GaK+y~zVA^*)?9GgZ0A zshR^^p>kt9XaE!p-cz>nwPW;+wv?Q)cpzsAn@0^&sGv1wszrZ82OU!*NI` zOh@c&&edQ1G1b6rT0+j4H%4ndr5Y#%DF0d@8B#oE7~j2i^^!*ScdA#)e}ZXrXf84= z%l3hJK3Mpta4{RMKY$R(rZw*=g(5Xf^>^m&8Zi=P;HAM(`3(Oq%4e!?tQM1fcaQ?Omy)J+ZWGz(hu2M+mSKmN2{;iRS_(VwH z5d=uEihyZB5it6ME~fAcrn#(##^xGrAlpekduy&=#d`nfl!RmvqXmS;uG8_1m`7JX z?C6Xvx7pexFR0K}5UrD-=p1c&#`@1omZ5myb{syojJUZ?hPALR#|qAlWR6aE2zA>% z5*p5+6+{?Tjg>#grQ+4?*{|q>KtLGt$0t^+;3O&yd|p%4QBF8Fm431NjJvLuzH*uV ztHG|r9dcETUs`X|7Z;7m$5a!$=_dy>@$+U(+(;?fyA)oF1 z+8pVBxI6i!PfuED#};?4Vq{RTkX5@~c%E-u=KM{1Ju%f|Ni3D1lh%E#>(zv8o`3;W zfbGW-SIBc1K~`<*MoUrC#Fh%I>uKfrkcslR5xIV6>PUhw=0o6?zZo*pU3CsW2{HkL z=QfrKalSw&l#mM4<}=fx)P^bsB}Y`}7BfaqvWcTveFAfvx!O;BjJJR(C@a3G+!Vu3 zOLRe1TRGjzVIM7T4I%Ss7ge>+dDK^_C>jZ+r=(Ab?r8a-jD0q3%o?5DjtCM!6<~y) zoEf38MTP&)#LBhDI;i>e3Eg1ZXkD)7UaFOx_M=9=J^L^Eey`q{Hin!%L&9+x^G#<6 zy|8ID5t@#mA+}q-%}%~_tYT}Hmy&~bxxyKZq-C1gGN8PkRgDXiTBxzp+~XR9wEaiK z3Ti~l>0y!KtsFILp)*07(KoD!=d&(rBjk5^EOL6z7*w*wQ1kaKjyHcu8?E-;Brc|t z4%(3jOc>x|HmP*914o27vh9s#mbZ@_hV6(oQF92wTe889M&d$i6?8b@Nz43dT2J1> z!hqyFZ4uM3A^EOOV96>`Xx6!U*7+8hS(wH7`FPoq4!$^rDhH$vwPx=|7bpgCe?VEWp1SNN8U-GB%A zh*WOmECG|^S4)^p?D@9s)Mt+n!;sT`_tV@m#L z(v(a4LugymO5)hY*zMTh=PcfKmozY{ZwX8JJU%g)kVCN^#m8)jB!>BGSF%wzH9*=| zv#IkT(NuNvu+v@hYqCz3VqNqVqq8n!;O$g1O?6{Ca1f4kSOD46*E!UVl01#Xyi}Jr zQ`88wyaPg~FCXWM^}evEa8JAJi~WY-vzmqMj>uR_X3aI*+Q5*<1>;a?kIsp_f;VDB zXES+gF8MC-296ev_9gjsM(V~7L8%=4=J`{5L0e)3Y6l-O?qpv%0ZKtoO^W;2Zxz~l z{UR;D(@u)6B9CC%R`v1?3RkN~kUAHPBh;_wf!s$W#7k zSlSzC?~)R{0%mEjD+)l-oHRrbR}h(ucWu-6mi=JXX-~By(*zvzIu|R z96|_uOuFDUxDTdAAM$A8p^TG>`o=D zh23UGIxA@9gUk7wK48s)wrml6YZbrn zuG-aqP-GG7*sIJrnA}+=t9{A4PrrfG7UaLR<~xd zp=yL>xfHrXj5_>hCPac2$&H_k@x@SJ++MN{FC$lUe%BVYuXVneNPt_?%hu~|iXuo9 z`u&L&Vticml|9S56sQF^5i;{BLCxMVpzD*IVB4^@#9Ge|$PClWqxx-UI?#-amFu5l zjyo(FUhWL48jlZ6aGTU__{kX4U<{dB%+RnrLRSs#-awdx$ zmuzz{jgLGhs=OYX9l;OUV0R`ZBqQXQp0lhbg*H`X@cNj``El({SMX`#lCiv+ZWBg4 zX1DLPP=~}&=|)x|=-uQq9e*HxmW}rq>6{!ze*(IYSQpc}CymChnCMhuW!wb(G+Dnk zp45bsa{j~{G~JS3#|A0xOQG}o4#(xG&%x2~*w=+GcaNmnR;TFBzJRtHd}&+E3KLFQoTr7|Ak!iyl=MKV z5v?3{R`J%1!)g_Z&n5?yHf?)Ab2F8HmUXj;{^sjDD_#2xA)$-{bgz9n%buo>!iQc# z0HQUUDOUpQrnjo>_8IxUi zG}BjLB-3Q0#7BKaVQd7K(MaFLD@r#n7R4onD@@<>$3Ixq_s8OrG74ME6k^Wb0Dl^?=yTRhA?jHn0^DcM3p`OK(}to0V; z7_a-H<@x!_$-AfC-Fqlk$3YO6bq2m}D2Q~5xfx5m501xR@6j#2gUldyN-?)=$;)t3 zIx`37EG&VB2#J%b>56?_NLsRN{5fQ@SguzN9ABz!Nf`8)ACI$Ey9p}>S%9PB;&^&e+b+^ zoMC0g;0VCcvI-faiQ|OCTb~~JSCFk4NCwZmqUZe{a(x;jMC}ub&GLGYePD$0846qG z0N`UPxG)>+Ag19|d{}>lkm#n!n^iA`bE*zW1d`*civ^FURx$1+P|Iqx_!q29B9FfN zVUZ$_5QmbE@|)t-U3!@|xv(YK_FLI?;CXGuJAIFhbsg?tIBvJplM}rmQs6zEe0dB# zCSy7tLu5#Asi6OSc#aC>K>X;T_nYRp z-awq+*8XD#fkSicXk%QnmycW2CX7E+l;$$ciFLa0JWhtl!zZE+s1ZTjJ14&-Tuk^n`NQektS&lUw`jrft*_!vQ@PkEI$QVN^=23i&>NIuX-wde95d{#{|X-XG<7v%$H~njcOY z-_IDZr;tO-z$N`M7>@q6J5=On?Tk!*RC3 zx4|?%xEx_z4no0L7)jkl7-TMcNxSW9yC)qkU=?h+NMuNrV?Ig&a%*D(8I$9!x>i}O z{T=EKn&j{#+Z!{Hc8y%;^PH6Y46PLNh?4q{9+}|gHhsy0t7^QonRq^t>V;_$2i2Mp zgn?7VrrX@=-gf9iHB4}cM)4bszCfNq0%VO5QiTLo=+zr9ZMCBFqJ9woSw}c~naMGA zutC0kZl3HEsP{Ki206;dS4@DE=}!!|dO6kdU^;^8k^9}} zp9vR5gfzpG6%#kbQ36eznyf2Xk*BUVeR?~PTy20C!xJIoz32A%!o%avf;}E|0gC(v znrrXqq>8)HHbX5+MN6f&029f39E89;{63=(GzFl){IYd)%@R(Wzt;PSz!Bf*YN?*y zw?p@*{q3#3f@N6Nbr?1dK}6+GW6Kj&8`E95a*40S7(2IT#M^&huHT3b8bRu^hsH1+ zzXgI~R5<3hSo(HUgvz5q7ve2n)l^p z$--|fxpts>EZp1ejOh%qz7Vkwq)yE2PkcJPs}}5ss*|B}QlygJSi7n&C0;GvICnsr z$b7Kn8IY}(a^H9OliYN$LvgN+=}Q~jnNM5iyj1Esg6OAoh$ATu$E+W;pCt(agoo;z zxl7aFcUu5aP~PQ2C{qLU?iORG);qjRls>I1dyrFOR|iuJwKlSMo9R0~LWeM{T-O#e zB>rS!*awaY+uF`-tSaYN3@0r^3(@ zP;vkXj<9rGG2T?C#`>B|yl?K6oC>G(Kh|($w}SYM0ghi54$UG7MA4e9Zs|0KPS`EE zI**PaC$Ns&-pk9GQ==+Have;|h|+5IS#&`-Jz~BAGVB{;svqaK6}%hywPX0;R%-Ico!AvOsc;K`Gku|eXmf}A(EWcGStt%muNg4ORH&S82= zWO2&M^!laMzf|}dAo_8loF)q!SJW0RUe-jbkPrkCT(pWX&EU_&6NcdoS|fKjV5vIz)Gnelnx{>zv(C( zSdce|;ya77uKQ*)Y|hGQBvtM1Gg05ZEWGT}UZN*1CZad!(m*H$p|EjG)nXU;IHK{% z(EBqePiJQ@6H@QuXW@vMR~y?O8Mg9$t|24gZ?7={E7SWK<{2+z+33En&CVyDXIxiG7!fo+Oh4 zVjH{IU$`M_68P8~U4q_As6ICT93t}oY;=b-4qP&%6OmkxNF3s#H5akd=cUgvtAItuS7bJ!SZ@OIW+aV+t_fztLxn63(nI%upk6gI#1C#x`Id4T z=rh_1O|@>dotZ-MUS(I_2Xv7PhX1iehSwsTFg%g3A%9^d@n zTPSvZWNYD5BXF%jX;PoO88yYckQ3-5O+~uh#BJ|ba!EYtK7Os21$Z=GQLt?o+Yuk{ zKJngU*pN=)JH0{MJ&XL~_M7{i+V(GzgHn?DaCkQ~#P;>FYgyuz67zH@EYUV}Jsh!B zo9>)aDv~H@P4AdmFq}Jgm(HZ=P(z++43;5#Y{Py%bm5@?xVHnS0<6JSIpv0;YCzPB z_l~>wX=nWn zwm{E$c7Q9mRovTyjwCCBZlmj*{P7ee)T~+(%@Fsmxr0HxUnyA4e7!zrczWlmM`wyd zpH_C3sFW*vY->&!_1)*NGV?THXj8S?Ud@J7Jbb;hHIx)RFh@L5#krC$FbkZdZ_qU% zp!Nr>f=1dVdTM<0LBz8HkyyKb+`8+{LRmPS2KkJfoZ@bUr;(-=ASX9?aqaeBVy9mo z*T2Il=HgiBQZSw^h?v}vrWC$g!J4RidY*0`j1&YLHlf_+kD%3$tv?M8#4|%zpQ@m5 zRqLvy+rHvqz&Z<}#QwIIB2fI}Jt7xJ@Ssy?6zXYuEKGuj zel=mZ`iq~=`u`iQZtW%`zeV~1vxesX`XB!}U#HZX;iY;Hr_sxI2xc2WS(}Ew-s36t z3m9O^K9;Y$5C7GLsdNrpoAw@8*O6Wre(C1<4pCzWBm^pvJnmq)^TdcsDWID}fqLGI zbZc;JeZ$~+@|V>Unosm@=r)Ng_ti2L#sBhc_5CoSZ&U0ZU)GuK(P#RvKkVY+szqjU zpPH|`8QYOJoc+)1C_7`-^}bn%7d-v?XB_^9)NBXn!=a4VZ0K$D#DLMV`bhDQlg;14 zj;kDef3I6}9WRODmqUotzVxQXy05tiqz!>Bl@n`M<-r5+qmBBjq_?^MFf$t zPiWl-A(mCwvul=BE9)B3AtC=AYH3J2op&wOWfS`7Yl4br{H%UndLj;#rwubR3 z0!wWY!B6xM`fVr`3x>3qX7TfLJR~k5Yk~GN$?b?;XLX84`XED^dKYK1Hl*#yko0+! zk-zZVwu-s(-g_+r?X*T8k~2D_1nGzCholZedRtt!#!M-KrcYAqnLGjb!r-arTal;^=Ibo{dved|)&RQO#fJX)g(qslSHB7QBOzIYY;%P3kKfns z5!@}}dAK;%y%vwwZny%1w%K8{9i2$Sx9Feb@Z%jf?dL~zBS6sJB}@SQRiM8QgD|+d%Xv3d7jPFlO&MTpIt z(stz}dcSWWrye1O--a&B|Gc!#s(-+>>0Q|LU_F71YZp)@J}^Z@uP!wbhv1Wr>L0p- zeh~laTngIj@(6`r(C3mX^5D8Ph!@u_3lioqD|1>SnpYnt;JQe9_Pr(cwnB z|6e=Le?Ee&`!JKTPyI&Md%=XrhY6v^u~+^PiVaZ;hTYdNYLiFcz{>~gCg9)Op(wm z@c-qv`ab}@m%TaM;D0w=4*v-T;*-R0KNsVFUc-O>*8i^`+UJ#xr8(h0t}dkyGQd9< NWG~C4NnOA5e*ipr1u*~s diff --git a/docs/builder/client/img/get-started/view-account-vault.png b/docs/builder/client/img/get-started/view-account-vault.png deleted file mode 100644 index e2eeaa9f66225afa1677f86c23aebfbe2f55e489..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192391 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�b`7Ff8Wv1mA%`rDl-JOg(i!Z?eSA1WKz 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 { + println!("Faucet: {:?}, Amount: {}", fungible.faucet_id(), fungible.amount()); + } + Asset::NonFungible(nft) => { + println!("NFT: {:?}", nft); + } + } +} +``` + +For importing and exporting accounts, see [Import](./import.md) and [Export](./export.md). diff --git a/docs/builder/client/rust-client/library/compile.md b/docs/builder/client/rust-client/library/compile.md new file mode 100644 index 00000000..2b31d24d --- /dev/null +++ b/docs/builder/client/rust-client/library/compile.md @@ -0,0 +1,172 @@ +--- +title: Compile +sidebar_position: 3 +--- + +# Compiling MASM + +The Miden Client provides a `CodeBuilder` for compiling Miden Assembly (MASM) code into executable components, transaction scripts, and note scripts. + +## Get a CodeBuilder + +```rust +let code_builder = client.code_builder(); +``` + +Each call returns a fresh `CodeBuilder`, so libraries linked in one instance never leak into another. + +## Compile an account component + +Compile MASM source code into an `AccountComponentCode` for use in account creation: + +```rust +let component_code = client.code_builder() + .compile_account_component_code( + " + use miden::protocol::active_account + use miden::protocol::native_account + use miden::core::sys + + const COUNTER_SLOT = word(\"miden::tutorials::counter\") + + pub proc get_count + push.COUNTER_SLOT[0..2] exec.active_account::get_item + exec.sys::truncate_stack + end + + pub proc increment_count + push.COUNTER_SLOT[0..2] exec.active_account::get_item + add.1 + push.COUNTER_SLOT[0..2] exec.native_account::set_item + exec.sys::truncate_stack + end + " + )?; +``` + +The resulting `AccountComponentCode` can be passed to `AccountBuilder` when creating custom contract accounts. + +## Compile a transaction script + +### Without libraries + +```rust +let tx_script = client.code_builder() + .compile_tx_script( + " + use external_contract::counter_contract + begin + call.counter_contract::increment_count + end + " + )?; +``` + +### With linked libraries + +Link external libraries before compiling. Libraries can be linked dynamically (for on-chain contracts via FPI) or statically (for self-contained scripts): + +```rust +let mut cb = client.code_builder(); + +// Build a library from source +let library = cb.build_library( + "external_contract::counter_contract", + counter_contract_code, +)?; + +// Link dynamically (default for FPI — code fetched at prove time) +cb.link_dynamic_library(&library)?; + +// Or link statically (code copied into the script) +// cb.link_static_library(&library)?; + +let tx_script = cb.compile_tx_script( + " + use external_contract::counter_contract + begin + call.counter_contract::increment_count + end + " +)?; +``` + +#### Linking modes + +| Mode | Method | When to use | +|------|--------|-------------| +| Dynamic | `link_dynamic_library()` | FPI — the foreign contract lives on-chain; the prover fetches its code at prove time | +| Static | `link_static_library()` | Off-chain libraries that must be self-contained | + +You can also link raw module source code directly: + +```rust +let mut cb = client.code_builder(); +cb.link_module("external_contract::my_module", module_source_code)?; +let tx_script = cb.compile_tx_script("...")?; +``` + +## Compile a note script + +```rust +let note_script = client.code_builder() + .compile_note_script( + " + use.miden::note + begin + exec.note::get_inputs + # ... process inputs + end + " + )?; +``` + +## Full example: compile, create, execute + +```rust +use miden_client::builder::ClientBuilder; +use miden_client::account::AccountBuilder; + +// 1. Compile the contract component +let component_code = client.code_builder() + .compile_account_component_code(counter_code)?; + +// 2. Create the contract account +let (account, seed) = AccountBuilder::new(client.rng()) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Public) + .with_component(component_code, AccountComponentMetadata::new( + InitStorageData::default(), + AccountComponentMetadataVersion::latest(), + )?) + .build()?; + +client.add_account(&account, false).await?; + +// 3. Compile the transaction script +let mut cb = client.code_builder(); +let library = cb.build_library( + "external_contract::counter_contract", + counter_code, +)?; +cb.link_dynamic_library(&library)?; + +let tx_script = cb.compile_tx_script( + " + use external_contract::counter_contract + begin + call.counter_contract::increment_count + end + " +)?; + +// 4. Execute the transaction +let tx_request = TransactionRequestBuilder::new() + .with_custom_script(tx_script)? + .build()?; + +let tx_result = client.new_transaction(account.id(), tx_request).await?; +client.submit_transaction(tx_result).await?; +``` + +See [Creating transactions](./new-transactions.md) for more on `TransactionRequestBuilder`. diff --git a/docs/builder/client/rust-client/library/export.md b/docs/builder/client/rust-client/library/export.md new file mode 100644 index 00000000..6ed3f1e9 --- /dev/null +++ b/docs/builder/client/rust-client/library/export.md @@ -0,0 +1,40 @@ +--- +title: Export +sidebar_position: 5 +--- + +# Exporting Data + +This guide demonstrates how to export accounts and notes from the Miden Client. + +## Exporting notes + +Export a note by its ID: + +```rust +let note_data = client.export_note(note_id).await?; +``` + +Notes can be exported in different formats depending on how much data to include: + +| Format | Description | +|--------|-------------| +| ID only | Contains only the note ID (works for public notes that can be fetched from the network) | +| With details | Contains the note ID, metadata, and creation block number | +| Full | Contains the complete note with its inclusion proof | + +Exported notes can be shared with other users and [imported](./import.md) into their clients. + +## Exporting accounts + +Retrieve the full account state for export: + +```rust +let account = client.get_account(account_id).await?; +``` + +The returned `Account` object includes the full account state, code, and vault. It can be serialized and shared with another client via [import](./import.md). + +:::tip +For public accounts, the recipient can simply [import by ID](./import.md#import-by-account-id) instead of needing an exported file. +::: diff --git a/docs/builder/client/rust-client/library/import.md b/docs/builder/client/rust-client/library/import.md new file mode 100644 index 00000000..613c8fa5 --- /dev/null +++ b/docs/builder/client/rust-client/library/import.md @@ -0,0 +1,72 @@ +--- +title: Import +sidebar_position: 4 +--- + +# Importing Data + +This guide demonstrates how to import accounts and notes into the Miden Client. + +## Importing accounts + +### Import by account ID + +Import a public account from the network by its ID: + +```rust +let account_id = AccountId::from_hex("0x1234...")?; +client.import_account_by_id(account_id).await?; +``` + +This fetches the account's current state from the chain and stores it locally for tracking. + +### Import from an Account object + +Add an existing `Account` object to the client's store: + +```rust +client.add_account(&account, false).await?; +``` + +The second parameter controls whether to overwrite an existing account with the same ID. + +:::warning[Public accounts only] +Import-by-ID only works for **public accounts** — those created with `AccountStorageMode::Public`. Private account state is not available on-chain, so it cannot be fetched by ID. To transfer a private account between clients, export and import the `Account` object directly. +::: + +## Importing notes + +### Import from note files + +Import notes using `NoteFile` variants: + +```rust +use miden_client::note::NoteFile; + +let note_files = vec![ + NoteFile::NoteId(note_id), // Fetch full note from network +]; + +let imported_ids = client.import_notes(¬e_files).await?; +println!("Imported {} notes", imported_ids.len()); +``` + +### Note file types + +| Variant | Description | +|---------|-------------| +| `NoteFile::NoteId` | Contains only the note ID; full note is fetched from the network | +| `NoteFile::NoteDetails` | Contains note details, metadata, and creation block number | +| `NoteFile::NoteWithProof` | Contains the complete note with its inclusion proof | + +### Import from a `.mno` file + +Import a note exported as a `.mno` file (e.g., from the faucet): + +```rust +use std::path::Path; + +client.import_note_from_file(Path::new("path/to/note.mno")).await?; +``` + +After importing, [sync](./sync.md) the client to verify the note's inclusion on-chain. The note's status transitions from `Expected` to `Committed`. diff --git a/docs/builder/client/rust-client/library/index.md b/docs/builder/client/rust-client/library/index.md new file mode 100644 index 00000000..9ff6fd37 --- /dev/null +++ b/docs/builder/client/rust-client/library/index.md @@ -0,0 +1,82 @@ +--- +title: Library +sidebar_position: 0 +--- + +# Library + +The `miden-client` crate provides a Rust API for interacting with the Miden rollup. All operations go through the `Client` struct, created via `ClientBuilder`. + +## Client initialization + +The recommended way to create a client is using `ClientBuilder`. For standard networks, use the pre-configured constructors: + +```rust +use std::sync::Arc; +use miden_client::builder::ClientBuilder; +use miden_client_sqlite_store::SqliteStore; + +// Create store +let sqlite_store = SqliteStore::new("path/to/store".try_into()?).await?; +let store = Arc::new(sqlite_store); + +// Build client for testnet (pre-configured RPC, prover, and note transport) +let mut client = ClientBuilder::for_testnet() + .store(store) + .filesystem_keystore("path/to/keys")? + .build() + .await?; +``` + +Other network constructors: +- `ClientBuilder::for_testnet()` — Pre-configured for Miden testnet +- `ClientBuilder::for_devnet()` — Pre-configured for Miden devnet +- `ClientBuilder::for_localhost()` — Pre-configured for local development + +For custom configurations, use `ClientBuilder::new()` and configure each component: + +```rust +use std::sync::Arc; +use miden_client::builder::ClientBuilder; +use miden_client::rpc::{Endpoint, GrpcClient}; +use miden_client_sqlite_store::SqliteStore; + +let sqlite_store = SqliteStore::new("path/to/store".try_into()?).await?; +let store = Arc::new(sqlite_store); + +let endpoint = Endpoint::new("https".into(), "localhost".into(), Some(57291)); + +let mut client = ClientBuilder::new() + .grpc_client(&endpoint, None) + .store(store) + .filesystem_keystore("path/to/keys")? + // Optional: custom prover via .prover(Arc::new(prover)) + // Optional: note transport via .note_transport(Arc::new(nt_client)) + // Optional: debug mode via .in_debug_mode(DebugMode::Enabled) + .build() + .await?; +``` + +## API overview + +| Area | Purpose | Reference | +|------|---------|-----------| +| Accounts | Create, retrieve accounts | [Accounts](./accounts.md), [New accounts](./new-accounts.md) | +| Compile | Compile MASM scripts and components | [Compile](./compile.md) | +| Import / Export | Import and export accounts and notes | [Import](./import.md), [Export](./export.md) | +| Transactions | Build, execute, prove, submit transactions | [New transactions](./new-transactions.md), [Transactions](./transactions.md) | +| Tags | Manage note tags for sync filtering | [Tags](./tags.md) | +| Notes | List, filter, consume notes | [Notes](./notes.md) | +| Note Transport | Send and receive private notes | [Note Transport](./note-transport.md) | +| Sync | Synchronize local state with the network | [Sync](./sync.md) | + +## Dependencies + +Add to your `Cargo.toml`: + +```toml +[dependencies] +miden-client = { version = "0.14", features = ["tonic"] } +miden-client-sqlite-store = { version = "0.14" } +tokio = { version = "1", features = ["full"] } +``` diff --git a/docs/builder/client/rust-client/library/new-accounts.md b/docs/builder/client/rust-client/library/new-accounts.md new file mode 100644 index 00000000..258908f3 --- /dev/null +++ b/docs/builder/client/rust-client/library/new-accounts.md @@ -0,0 +1,107 @@ +--- +title: New Accounts +sidebar_position: 2 +--- + +# Creating Accounts + +This guide demonstrates how to create different types of accounts using the Miden Client Rust library. + +## Creating a private wallet + +Private accounts store state locally — the rollup only keeps commitments, which guarantees privacy. + +```rust +use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; +use miden_client::auth::AuthSecretKey; +use miden_client::crypto::SecretKey; +use miden_objects::account::auth::AuthRpoFalcon512; +use miden_objects::account::component::BasicWallet; + +let key_pair = SecretKey::with_rng(client.rng()); +let init_seed: [u8; 32] = rand::random(); + +let new_account = AccountBuilder::new(init_seed) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Private) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; + +// Store the key and register with the client +let keystore = client.keystore(); +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; +client.add_account(&new_account, false).await?; + +println!("Account created: {:?}", new_account.id()); +``` + +Once created, the account is tracked locally and its state is automatically updated during sync. + +## Creating a public wallet + +Public accounts store their state on-chain. Other accounts can read their state directly (useful for foreign procedure invocation). + +```rust +let key_pair = SecretKey::with_rng(client.rng()); +let anchor_block = client.get_latest_epoch_block().await?; +let init_seed: [u8; 32] = rand::random(); + +let new_account = AccountBuilder::new(init_seed) + .anchor((&anchor_block).try_into()?) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Public) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; + +let keystore = client.keystore(); +keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; +client.add_account(&new_account, false).await?; +``` + +:::note +Public accounts require an anchor block from the current epoch. The client fetches this with `get_latest_epoch_block()`. During sync, the client updates public account state by querying the node. +::: + +## Creating a mutable wallet + +Use `RegularAccountUpdatableCode` to create an account whose code can be updated after deployment: + +```rust +let new_account = AccountBuilder::new(init_seed) + .account_type(AccountType::RegularAccountUpdatableCode) + .storage_mode(AccountStorageMode::Private) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + .with_component(BasicWallet) + .build()?; +``` + +## Creating a faucet + +Faucets are special accounts that can mint fungible or non-fungible tokens: + +```rust +let new_faucet = AccountBuilder::new(init_seed) + .account_type(AccountType::FungibleFaucet) + .storage_mode(AccountStorageMode::Public) + .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) + // Faucet-specific components would be added here + .build()?; +``` + +## Account types + +| Type | Description | +|------|-------------| +| `RegularAccountImmutableCode` | Standard wallet, code cannot be updated | +| `RegularAccountUpdatableCode` | Standard wallet, code can be updated after deployment | +| `FungibleFaucet` | Can mint fungible tokens | +| `NonFungibleFaucet` | Can mint non-fungible tokens | + +## Storage modes + +| Mode | Description | +|------|-------------| +| `AccountStorageMode::Private` | State tracked locally, only commitments on-chain (default) | +| `AccountStorageMode::Public` | Full state stored on-chain, readable by other accounts | diff --git a/docs/builder/client/rust-client/library/new-transactions.md b/docs/builder/client/rust-client/library/new-transactions.md new file mode 100644 index 00000000..903b65b5 --- /dev/null +++ b/docs/builder/client/rust-client/library/new-transactions.md @@ -0,0 +1,186 @@ +--- +title: New Transactions +sidebar_position: 6 +--- + +# Creating Transactions + +This guide demonstrates how to create and submit transactions using the Miden Client Rust library. Transactions follow a two-step flow: execute, then submit. + +## Basic transaction flow + +Every transaction follows this pattern: + +```rust +// 1. Build a TransactionRequest +let tx_request = TransactionRequestBuilder::new() + .build_pay_to_id(payment, None, NoteType::Private, client.rng())?; + +// 2. Execute the transaction (produces a proof) +let tx_result = client.new_transaction(sender_id, tx_request).await?; + +// 3. Submit to the network +client.submit_transaction(tx_result).await?; +``` + +After submission, the transaction is tracked locally. Sync to confirm it has been committed on-chain. + +## Sending tokens (pay-to-id) + +Transfer fungible assets from one account to another: + +```rust +use miden_client::transaction::{TransactionRequestBuilder, PaymentNoteDescription}; +use miden_objects::note::NoteType; +use miden_objects::asset::FungibleAsset; +use miden_objects::account::AccountId; + +let faucet_id = AccountId::from_hex("0xFAUCET...")?; +let asset = FungibleAsset::new(faucet_id, 100)?.into(); + +let sender_id = AccountId::from_hex("0xSENDER...")?; +let target_id = AccountId::from_hex("0xTARGET...")?; + +let payment = PaymentNoteDescription::new( + vec![asset], + sender_id, + target_id, +); + +let tx_request = TransactionRequestBuilder::new().build_pay_to_id( + payment, + None, // Optional recall height + NoteType::Private, // or NoteType::Public + client.rng(), +)?; + +let tx_result = client.new_transaction(sender_id, tx_request).await?; +client.submit_transaction(tx_result).await?; +``` + +### Note types + +| Type | Description | +|------|-------------| +| `NoteType::Private` | Note details are not publicly visible; recipient needs the note data to consume | +| `NoteType::Public` | Note details are stored on-chain; recipient can discover it by syncing | + +### Recallable notes + +Pass a recall height to allow the sender to reclaim the note if the recipient hasn't consumed it: + +```rust +let tx_request = TransactionRequestBuilder::new().build_pay_to_id( + payment, + Some(100), // Sender can reclaim after block 100 + NoteType::Public, + client.rng(), +)?; +``` + +## Consuming notes + +Consume notes to receive assets into an account: + +```rust +// Get consumable notes for an account +let consumable = client.get_consumable_notes(Some(account_id)).await?; +let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); + +if !note_ids.is_empty() { + let tx_request = TransactionRequestBuilder::new() + .build_consume_notes(account_id, note_ids)?; + + let tx_result = client.new_transaction(account_id, tx_request).await?; + client.submit_transaction(tx_result).await?; +} +``` + +## Minting tokens + +Mint tokens from a faucet account: + +```rust +let faucet_id = AccountId::from_hex("0xFAUCET...")?; +let target_id = AccountId::from_hex("0xTARGET...")?; +let asset = FungibleAsset::new(faucet_id, 1000)?.into(); + +let payment = PaymentNoteDescription::new( + vec![asset], + faucet_id, + target_id, +); + +let tx_request = TransactionRequestBuilder::new().build_pay_to_id( + payment, + None, + NoteType::Public, + client.rng(), +)?; + +let tx_result = client.new_transaction(faucet_id, tx_request).await?; +client.submit_transaction(tx_result).await?; +``` + +## Swap transactions + +Create an atomic swap — offer one asset in exchange for another: + +```rust +let offered_asset = FungibleAsset::new(faucet_a_id, 100)?.into(); +let requested_asset = FungibleAsset::new(faucet_b_id, 200)?.into(); + +let tx_request = TransactionRequestBuilder::new().build_swap( + source_account_id, + offered_asset, + requested_asset, + NoteType::Public, + client.rng(), +)?; + +let tx_result = client.new_transaction(source_account_id, tx_request).await?; +client.submit_transaction(tx_result).await?; +``` + +When another account consumes the swap note, it receives the offered asset and the requested asset is removed from its vault into a new note the original account can consume. + +## Using a remote prover + +Offload proof generation to a remote prover for better performance: + +```rust +use miden_client::RemoteTransactionProver; + +let remote_prover = Arc::new(RemoteTransactionProver::new("https://prover.example.com")); + +// Build client with remote prover +let client = ClientBuilder::for_testnet() + .store(store) + .filesystem_keystore("path/to/keys")? + .prover(remote_prover) + .build() + .await?; + +// All transactions automatically use the remote prover +``` + +For fallback patterns (remote with local fallback), see [Examples](../examples.md). + +## Custom transactions + +Use `TransactionRequestBuilder` for full control over inputs, outputs, and scripts: + +```rust +let tx_request = TransactionRequestBuilder::new() + .with_custom_script(transaction_script)? + .with_own_output_notes(output_notes) + .with_expected_output_notes(expected_notes) + .build()?; + +let tx_result = client.new_transaction(account_id, tx_request).await?; +client.submit_transaction(tx_result).await?; +``` + +:::note +Custom transactions require understanding of the Miden VM instruction set and note scripts. +::: diff --git a/docs/builder/client/rust-client/library/note-transport.md b/docs/builder/client/rust-client/library/note-transport.md new file mode 100644 index 00000000..17fb1d07 --- /dev/null +++ b/docs/builder/client/rust-client/library/note-transport.md @@ -0,0 +1,104 @@ +--- +title: Note Transport +sidebar_position: 10 +--- + +# Note Transport + +The note transport layer allows you to send and receive private notes between users without exposing note details on-chain. This is useful when the sender and recipient don't share a local client. + +## Prerequisites + +Note transport must be configured when building the client: + +```rust +let mut client = ClientBuilder::for_testnet() + .store(store) + .filesystem_keystore("path/to/keys")? + .build() + .await?; + +// Check if transport is enabled +if client.is_note_transport_enabled() { + println!("Note transport is available"); +} +``` + +The pre-configured constructors (`for_testnet()`, `for_devnet()`) enable note transport automatically. For custom configurations, configure it via `ClientBuilder::new().note_transport(...)`. + +## Sending private notes + +After creating a private note via a transaction, send it to the recipient through the transport network: + +```rust +// The sender needs the recipient's bech32 address +let recipient_address: Address = "mtst1recipient...".parse()?; + +// Get the note from a recent transaction's output +let output_notes = client.get_output_notes(NoteFilter::All).await?; +let note = output_notes.last().unwrap(); + +// Send via the transport network +client.send_private_note(note.clone().try_into()?, &recipient_address).await?; +``` + +The note is end-to-end encrypted using the recipient's address details. Only the recipient can decrypt and consume it. + +## Fetching private notes + +The recipient fetches notes addressed to their tracked accounts: + +```rust +// Fetch with pagination (recommended for ongoing use) +client.fetch_private_notes().await?; + +// Or fetch all notes at once (useful for initial setup) +client.fetch_all_private_notes().await?; + +// View the fetched notes +let notes = client.get_input_notes(NoteFilter::All).await?; +for note in ¬es { + println!("Note: {:?}, Status: {:?}", note.id(), note.status()); +} +``` + +### Pagination + +`fetch_private_notes()` uses internal cursor-based pagination to avoid downloading duplicate notes across calls. Use this for periodic fetching. + +`fetch_all_private_notes()` fetches everything without pagination. Reserve this for special cases like initial setup or recovery. + +## Complete example + +```rust +// === Sender side === + +// 1. Create a private note via transaction +let payment = PaymentNoteDescription::new(vec![asset], sender_id, target_id); +let tx_request = TransactionRequestBuilder::new() + .build_pay_to_id(payment, None, NoteType::Private, client.rng())?; +let tx_result = client.new_transaction(sender_id, tx_request).await?; +client.submit_transaction(tx_result).await?; + +// 2. Send via transport +let output_notes = client.get_output_notes(NoteFilter::All).await?; +let note = output_notes.last().unwrap(); +client.send_private_note(note.clone().try_into()?, &recipient_address).await?; + +// === Recipient side === + +// 3. Fetch private notes +client.fetch_private_notes().await?; + +// 4. Consume the received note +let consumable = client.get_consumable_notes(Some(account_id)).await?; +let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); +let tx_request = TransactionRequestBuilder::new() + .build_consume_notes(account_id, note_ids)?; +let tx_result = client.new_transaction(account_id, tx_request).await?; +client.submit_transaction(tx_result).await?; +``` + +:::note +The client only fetches notes for tracked note tags. By default, tags are derived from account IDs. For increased privacy, use random tags and track them with `client.add_note_tag(tag)`. See [Tags](./tags.md). +::: diff --git a/docs/builder/client/rust-client/library/notes.md b/docs/builder/client/rust-client/library/notes.md new file mode 100644 index 00000000..874dcf2a --- /dev/null +++ b/docs/builder/client/rust-client/library/notes.md @@ -0,0 +1,67 @@ +--- +title: Notes +sidebar_position: 9 +--- + +# Working with Notes + +Notes are the primary way to transfer assets and data between accounts in the Miden network. This guide demonstrates how to work with notes using the Miden Client Rust library. + +For importing and exporting notes, see [Import](./import.md) and [Export](./export.md). For exchanging private notes between users, see [Note Transport](./note-transport.md). + +## List input notes + +```rust +// List all input notes +let notes = client.get_input_notes(NoteFilter::All).await?; + +for note in ¬es { + println!("Note ID: {:?}", note.id()); + println!("Status: {:?}", note.status()); +} +``` + +## Filter notes by status + +```rust +use miden_client::note::NoteFilter; + +let committed = client.get_input_notes(NoteFilter::Committed).await?; +let consumed = client.get_input_notes(NoteFilter::Consumed).await?; +let expected = client.get_input_notes(NoteFilter::Expected).await?; +let processing = client.get_input_notes(NoteFilter::Processing).await?; +``` + +### Note statuses + +| Status | Description | +|--------|-------------| +| `Expected` | Note has been imported or created but not yet confirmed on-chain | +| `Committed` | Note has been confirmed on-chain (after sync) | +| `Processing` | Note consumption proof has been submitted, awaiting confirmation | +| `Consumed` | Note has been consumed (after sync confirms the consumption) | + +## Get consumable notes + +Find notes that a specific account can consume: + +```rust +let consumable = client.get_consumable_notes(Some(account_id)).await?; + +for record in &consumable { + println!("Note: {:?}", record.note.id()); +} +``` + +Pass `None` to get consumable notes across all tracked accounts. + +## List output notes + +Output notes are notes created by your transactions (e.g., the P2ID note created when sending tokens): + +```rust +let output_notes = client.get_output_notes(NoteFilter::All).await?; + +for note in &output_notes { + println!("Output note: {:?}", note.id()); +} diff --git a/docs/builder/client/rust-client/library/sync.md b/docs/builder/client/rust-client/library/sync.md new file mode 100644 index 00000000..e41222c0 --- /dev/null +++ b/docs/builder/client/rust-client/library/sync.md @@ -0,0 +1,51 @@ +--- +title: Sync +sidebar_position: 11 +--- + +# Synchronizing State + +This guide demonstrates how to synchronize local state with the Miden network using the Miden Client Rust library. + +## Basic sync + +```rust +let sync_summary = client.sync_state().await?; + +println!("Synced to block: {}", sync_summary.block_num); +println!("New public notes: {}", sync_summary.new_public_notes); +println!("Committed notes: {}", sync_summary.committed_notes); +println!("Consumed notes: {}", sync_summary.consumed_notes); +println!("Updated accounts: {}", sync_summary.updated_accounts); +println!("Committed transactions: {}", sync_summary.committed_transactions); +``` + +## When to sync + +Sync after any operation that depends on network state: + +- **After submitting a transaction** — to confirm it was committed +- **Before consuming notes** — to verify notes are committed on-chain +- **After importing a note** — to transition it from `Expected` to `Committed` +- **Periodically** — to discover new public notes or track account updates + +## What sync updates + +The sync process queries the Miden node and updates local state: + +| Updated | Description | +|---------|-------------| +| Block headers | Latest chain state | +| Account state | Public account updates from the node | +| Note status | Transitions: `Expected` → `Committed`, `Processing` → `Consumed` | +| Transaction status | Transitions: `Pending` → `Committed` (or `Discarded`) | +| Note tags | Discovers new notes matching tracked tags | + +## Get current sync height + +Check the last synced block number without performing a sync: + +```rust +let height = client.get_sync_height().await?; +println!("Last synced block: {}", height); +``` diff --git a/docs/builder/client/rust-client/library/tags.md b/docs/builder/client/rust-client/library/tags.md new file mode 100644 index 00000000..325d65c4 --- /dev/null +++ b/docs/builder/client/rust-client/library/tags.md @@ -0,0 +1,65 @@ +--- +title: Tags +sidebar_position: 8 +--- + +# Working with Note Tags + +Note tags are used to specify how notes should be executed and who can consume them. They also serve as a fuzzy filter mechanism for retrieving note updates during sync operations. + +## Basic tag operations + +```rust +use miden_objects::note::NoteTag; + +// Add a tag +client.add_note_tag(NoteTag::from(12345u32)).await?; + +// Remove a tag +client.remove_note_tag(NoteTag::from(12345u32)).await?; + +// List all tags +let tags = client.get_note_tags().await?; +for record in &tags { + println!("Tag: {:?}, Source: {:?}", record.tag(), record.source()); +} +``` + +## Managing multiple tags + +```rust +use miden_objects::note::NoteTag; + +// Add multiple tags +let tags_to_add = [123u32, 456, 789]; +for tag in tags_to_add { + client.add_note_tag(NoteTag::from(tag)).await?; +} + +// List them +let all_tags = client.get_note_tags().await?; +println!("Tracking {} tags", all_tags.len()); + +// Remove some +client.remove_note_tag(NoteTag::from(123u32)).await?; +client.remove_note_tag(NoteTag::from(456u32)).await?; +``` + +## Tag sources and sync behavior + +Tags can come from different sources, tracked via `NoteTagRecord`: + +| Source | Description | +|--------|-------------| +| `Account` | Automatically added for accounts tracked by the client | +| `Note` | Automatically added for expected notes being tracked | +| `User` | Manually added by the user via `add_note_tag()` | + +During sync operations, the client uses all tracked tags to retrieve note-related updates from the network for notes with matching tags. + +## Important notes + +- Tags are `NoteTag` values (wrapping `u32`) +- Tags for tracked accounts and notes are managed automatically by the client +- Only user-added tags can be removed — system-generated tags (Account, Note sources) cannot be removed manually +- Use tags with [note transport](./note-transport.md) for increased privacy: add random tags instead of relying on default account-derived tags diff --git a/docs/builder/client/rust-client/library/transactions.md b/docs/builder/client/rust-client/library/transactions.md new file mode 100644 index 00000000..f2bc8c65 --- /dev/null +++ b/docs/builder/client/rust-client/library/transactions.md @@ -0,0 +1,44 @@ +--- +title: Transactions +sidebar_position: 7 +--- + +# Retrieving Transaction History + +This guide demonstrates how to retrieve and inspect transaction history using the Miden Client Rust library. + +## List all transactions + +```rust +let transactions = client.get_transactions().await?; + +for tx in &transactions { + println!("TX ID: {:?}", tx.id()); + println!("Account: {:?}", tx.account_id()); + println!("Status: {:?}", tx.transaction_status()); +} +``` + +## Transaction statuses + +Transactions follow this lifecycle: + +| Status | Description | +|--------|-------------| +| `Pending` | Transaction has been submitted but not yet confirmed | +| `Committed` | Transaction has been included in a block | +| `Discarded` | Transaction was not included and will not be processed | + +After executing and submitting a transaction, it starts as `Pending`. Call `sync_state()` to update the status. Once the node includes the transaction in a block, it becomes `Committed`. + +## Output notes + +Transactions may produce output notes (e.g., a pay-to-id transaction creates a note the recipient can consume): + +```rust +let output_notes = client.get_output_notes().await?; + +for note in &output_notes { + println!("Output note: {:?}", note.id()); +} +``` diff --git a/docs/builder/index.md b/docs/builder/index.md index 3affd88e..bead2d50 100644 --- a/docs/builder/index.md +++ b/docs/builder/index.md @@ -106,9 +106,9 @@ import DocCard from '@theme/DocCard'; diff --git a/docs/builder/tools/cli/_category_.yml b/docs/builder/tools/cli/_category_.yml index c7c5e8d5..0e4536df 100644 --- a/docs/builder/tools/cli/_category_.yml +++ b/docs/builder/tools/cli/_category_.yml @@ -1,3 +1,3 @@ label: CLI -position: 1 +position: 2 collapsed: true diff --git a/docs/builder/tools/cli/cli-troubleshooting.md b/docs/builder/tools/cli/cli-troubleshooting.md index 2b090f62..1ef9fb2c 100644 --- a/docs/builder/tools/cli/cli-troubleshooting.md +++ b/docs/builder/tools/cli/cli-troubleshooting.md @@ -5,7 +5,7 @@ sidebar_position: 3 ## Troubleshooting and transaction lifecycle (CLI) -This guide helps you troubleshoot common issues and understand the end-to-end lifecycle of transactions and notes in the Miden client. +This guide helps you troubleshoot common issues and understand the end-to-end lifecycle of transactions and notes in the Miden Client. ### TL;DR checklist diff --git a/docs/builder/tools/cli/get-started/_category_.yml b/docs/builder/tools/cli/get-started/_category_.yml new file mode 100644 index 00000000..496c8c7b --- /dev/null +++ b/docs/builder/tools/cli/get-started/_category_.yml @@ -0,0 +1,3 @@ +label: Getting Started +position: 2 +collapsed: true diff --git a/docs/builder/tools/cli/cli-config.md b/docs/builder/tools/cli/get-started/cli-config.md similarity index 99% rename from docs/builder/tools/cli/cli-config.md rename to docs/builder/tools/cli/get-started/cli-config.md index 45a19730..0f874bc4 100644 --- a/docs/builder/tools/cli/cli-config.md +++ b/docs/builder/tools/cli/get-started/cli-config.md @@ -1,9 +1,9 @@ --- title: Config -sidebar_position: 2 +sidebar_position: 1 --- -After installing the CLI (`cargo install miden-client-cli --locked`), use the client by running the following and adding the [relevant commands](index.md#commands): +After installing the CLI (`cargo install miden-client-cli --locked`), use the client by running the following and adding the [relevant commands](../index.md#commands): ```sh miden-client diff --git a/docs/builder/tools/cli/get-started/create-account-use-faucet.md b/docs/builder/tools/cli/get-started/create-account-use-faucet.md new file mode 100644 index 00000000..00e831ff --- /dev/null +++ b/docs/builder/tools/cli/get-started/create-account-use-faucet.md @@ -0,0 +1,153 @@ +--- +title: Create account +sidebar_position: 3 +--- + +In this section, we show you how to create a new local Miden account and how to receive funds from the public Miden faucet website. + +## Configure the Miden CLI + +The Miden CLI facilitates interaction with the Miden rollup and provides a way to execute and prove transactions. + +1. If you haven't already done so, open your terminal and create a new directory to store the Miden Client state. + + ```sh + mkdir miden-client + cd miden-client + ``` + +2. Install the Miden CLI. + + ```sh + cargo install miden-client-cli --locked + ``` + +3. Verify the installation: + + ```sh + miden-client --version + ``` + +## Create a new Miden account + +1. Create a new account of type `mutable` using the following command: + + ```sh + miden-client new-wallet --mutable + ``` + +2. List all created accounts by running the following command: + + ```sh + miden-client account -l + ``` + +Save the account ID for a future step. + +## Request tokens from the public faucet + +1. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). + +2. Copy the **Account ID** printed by the `miden-client account -l` command in the previous step. + +3. Paste this ID into the **Request test tokens** input field on the faucet website and click **Send Private Note**. + +:::tip +You can also click **Send Public Note**. If you do this, the note's details will be public and you will not need to download and import it, so you can skip to [Sync the client](#sync-the-client). +::: + +4. After a few seconds your browser should download a file called `note.mno` (mno = Miden note). It contains the funds the faucet sent to your address. + +5. Save this file on your computer, you will need it for the next step. + +## Import the note into the Miden Client + +1. Import the private note that you have received: + + ```sh + miden-client import /note.mno + ``` + +2. View the note's information: + + ```sh + miden-client notes + ``` + +:::tip The importance of syncing +The note is listed as `Expected` because you have received a private note but have not yet synced your view of the rollup to check that the note is the result of a valid transaction. Before consuming the note, you need to update your view of the rollup by syncing. +::: + +### Sync the client + +Run the `sync` command periodically to keep informed about updates on the node: + +```sh +miden-client sync +``` + +You will see something like this as output: + +```sh +State synced to block 179672 +New public notes: 0 +Committed notes: 1 +Tracked notes consumed: 0 +Tracked accounts updated: 0 +Locked accounts: 0 +Committed transactions: 0 +``` + +## Consume the note and receive the funds + +1. After syncing, the note should have a `Committed` status, confirming it exists at the rollup level: + + ```sh + miden-client notes + ``` + +2. Find your account and note ID: + + ```sh + miden-client account + miden-client notes + ``` + +3. Consume the note and add the funds to your account: + + ```sh + miden-client consume-notes --account + ``` + +4. The note is now `Processing`. Sync again to confirm: + + ```sh + miden-client sync + ``` + +5. After syncing, the note should show as `Consumed`: + + ```sh + miden-client notes + ``` + +You just created a client-side zero-knowledge proof locally on your machine and submitted it to the Miden rollup. + +:::tip +You only need to copy the first 7 characters after `0x` of the Note ID. +::: + +## View confirmations + +View your updated account's vault: + +```sh +miden-client account --show +``` + +You should now see your account's vault containing the funds sent by the faucet. + +## Debugging tips + +- Need a fresh start? All state is maintained in `store.sqlite3`, located in the directory defined in `miden-client.toml`. Delete this file to clear all state — it recreates on any command execution. +- Only execute `miden-client` from the directory containing your `miden-client.toml`. diff --git a/docs/builder/tools/cli/get-started/index.md b/docs/builder/tools/cli/get-started/index.md new file mode 100644 index 00000000..15110b4f --- /dev/null +++ b/docs/builder/tools/cli/get-started/index.md @@ -0,0 +1,18 @@ +--- +title: Getting started +sidebar_position: 2 +--- + +This section shows you how to get started with the Miden CLI by generating a new account, requesting funds from a public faucet, consuming private notes, and creating pay-to-id notes. + +By the end of this tutorial, you will have: + +- Installed and configured the Miden CLI. +- Connected to a Miden node. +- Created an account and requested funds from the faucet. +- Transferred assets between accounts by creating and consuming notes. + +## Prerequisites + +- [Rust](https://www.rust-lang.org/learn/get-started) version 1.88 or later. +- Install the CLI: `cargo install miden-client-cli --locked` diff --git a/docs/builder/tools/cli/get-started/p2p-private.md b/docs/builder/tools/cli/get-started/p2p-private.md new file mode 100644 index 00000000..d418ca92 --- /dev/null +++ b/docs/builder/tools/cli/get-started/p2p-private.md @@ -0,0 +1,95 @@ +--- +title: Private peer-to-peer transfer +sidebar_position: 5 +--- + +In this section, we show you how to make private transactions and send funds to another account using the Miden CLI. + +:::info Prerequisite +Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account and should *not* have reset the state of your local client. +::: + +## Create a second account + +1. Create a second account to send funds to. Previously, we created a `mutable` account (`Account A`). Now, create another `mutable` account (`Account B`): + + ```sh + miden-client new-wallet --mutable + ``` + +2. List the newly created accounts: + + ```sh + miden-client account -l + ``` + + You should see two accounts. + +## Transfer assets between accounts + +1. Transfer tokens from Account A to Account B: + + ```sh + miden-client send --sender --target --asset 50:: --note-type private + ``` + + :::note + The faucet account ID can be found on the [Miden faucet website](https://testnet.miden.io/) under the title **Miden faucet**. + ::: + + This generates a private Pay-to-ID (`P2ID`) note containing `50` tokens. + +2. Sync the accounts: + + ```sh + miden-client sync + ``` + +3. Get the note ID: + + ```sh + miden-client notes + ``` + +4. Have Account B consume the note: + + ```sh + miden-client consume-notes --account + ``` + + :::tip + It's possible to use a short version of the note ID: 7 characters after the `0x` is sufficient, e.g. `0x6ae613a`. + ::: + +5. Verify both accounts: + + ```sh + miden-client account --show + miden-client account --show + ``` + +## Using the note transport network + +The steps above assume that the client owns both accounts. To exchange notes with other users, the note transport network can be used. The sender (`Account A`) will need the address (bech32 string) of the recipient (`Account B`). + +After creating the note (step 1 above), get the created note ID with `miden-client notes --list`. Then send that note through the note transport network: + +```sh +miden-client notes --send +``` + +The recipient can then fetch the note: + +```sh +miden-client notes --fetch +``` + +The note will then be available to be consumed. + +:::note +The client will fetch notes for tracked note tags. By default, note tags are derived from the recipient's account ID. For increased privacy, use random tags and track them with `miden-client tags --add `. +::: + +## Clear data + +All state is maintained in `store.sqlite3`, located in the directory defined in `miden-client.toml`. To clear all state, delete this file. It recreates on any command execution. diff --git a/docs/builder/tools/cli/get-started/p2p-public.md b/docs/builder/tools/cli/get-started/p2p-public.md new file mode 100644 index 00000000..4b52f6b3 --- /dev/null +++ b/docs/builder/tools/cli/get-started/p2p-public.md @@ -0,0 +1,83 @@ +--- +title: Peer-to-peer transfer +sidebar_position: 4 +--- + +In this section, we show you how to execute transactions and send funds to another account using the Miden CLI and public notes. + +:::info Prerequisite +Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account and should *not* have reset the state of your local client. +::: + +## Create a second client + +This is an alternative to the [private P2P transactions](./p2p-private.md) process. + +In this tutorial, we use two different clients to simulate two different remote users who don't share local state. Use two terminals, each with their own state (using their own `miden-client.toml`). + +1. Create a new directory to store the new client. + + ```sh + mkdir miden-client-2 + cd miden-client-2 + ``` + +2. On the new client, create a new account with public storage: + + ```sh + miden-client new-wallet --mutable -s public + ``` + + We refer to this account as _Account C_. The account's storage mode is `public`, meaning its details are public and its latest state can be retrieved from the node. + +3. List and view the account: + + ```sh + miden-client account -l + ``` + +## Transfer assets between accounts + +1. Switch back to the first `miden-client` directory. From the first client, run: + + ```sh + miden-client send --sender --target --asset 50:: --note-type public + ``` + + :::note + The faucet account ID can be found on the [Miden faucet website](https://testnet.miden.io/) under the title **Miden faucet**. + ::: + + This generates a Pay-to-ID (`P2ID`) note containing `50` tokens. As the note is public, the second account can receive the details by syncing with the node. + +2. Sync the second client: + + ```sh + miden-client sync + ``` + +3. View the received note: + + ```sh + miden-client notes --list + ``` + +4. Have account C consume the note: + + ```sh + miden-client consume-notes --account + ``` + + :::tip + It's possible to use a short version of the note ID: 7 characters after the `0x` is sufficient, e.g. `0x6ae613a`. + ::: + +Account C has now consumed the note. Verify the new assets: + +```sh +miden-client account --show +``` + +## Clear state + +All state is maintained in `store.sqlite3`, located in the directory defined in `miden-client.toml`. To clear all state, delete this file. It recreates on any command execution. diff --git a/docs/builder/tools/cli/index.md b/docs/builder/tools/cli/index.md index 2b5abd48..32d42663 100644 --- a/docs/builder/tools/cli/index.md +++ b/docs/builder/tools/cli/index.md @@ -66,7 +66,7 @@ miden-client init --remote-prover-endpoint miden-client init --note-transport-endpoint ``` -More information on the configuration file can be found in the [configuration section](./cli-config.md). +More information on the configuration file can be found in the [configuration section](./get-started/cli-config.md). ### `account` @@ -323,7 +323,7 @@ miden-client address remove 0x17f13f4f83a8e8100c19d2961dfda2 mlcl1qple0ejnutx8zy #### Tips -For `send` and `consume-notes`, you can omit the `--sender` and `--account` flags to use the default account defined in the [config](./cli-config.md). If you omit the flag but have no default account defined in the config, you'll get an error instead. +For `send` and `consume-notes`, you can omit the `--sender` and `--account` flags to use the default account defined in the [config](./get-started/cli-config.md). If you omit the flag but have no default account defined in the config, you'll get an error instead. For every command which needs an account ID (either wallet or faucet), you can also provide a partial ID instead of the full ID for each account. So instead of diff --git a/package-lock.json b/package-lock.json index 07439766..523d226a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,6 @@ "": { "name": "new-site", "version": "0.0.0", - "hasInstallScript": true, "dependencies": { "@cmfcmf/docusaurus-search-local": "^2.0.0", "@cookbookdev/docsbot": "^4.25.15", @@ -21,7 +20,6 @@ "react-dom": "^19.0.0", "rehype-katex": "^7.0.1", "remark-math": "^6.0.0", - "repomix": "^0.3.1", "turndown": "^7.2.2", "yaml": "^2.8.1" }, @@ -1913,25 +1911,6 @@ "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", "license": "Apache-2.0" }, - "node_modules/@clack/core": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.2.tgz", - "integrity": "sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==", - "dependencies": { - "picocolors": "^1.0.0", - "sisteransi": "^1.0.5" - } - }, - "node_modules/@clack/prompts": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.1.tgz", - "integrity": "sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==", - "dependencies": { - "@clack/core": "0.4.2", - "picocolors": "^1.0.0", - "sisteransi": "^1.0.5" - } - }, "node_modules/@cmfcmf/docusaurus-search-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-2.0.0.tgz", @@ -4707,17 +4686,6 @@ "tailwindcss": "^3.0 || ^4.0" } }, - "node_modules/@hono/node-server": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.8.tgz", - "integrity": "sha512-0/g2lIOPzX8f3vzW1ggQgvG5mjtFBDBHFAzI5SFAi2DzSqS9luJwqg9T6O/gKYLi+inS7eNxBeIFkkghIPvrMA==", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, "node_modules/@iconify/types": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", @@ -4740,25 +4708,6 @@ "mlly": "^1.7.4" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "license": "MIT", @@ -5017,361 +4966,6 @@ "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", "license": "BSD-2-Clause" }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", - "dependencies": { - "@hono/node-server": "^1.19.7", - "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.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", - "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.0" - }, - "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==", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/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==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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==", - "engines": { - "node": ">=6.6.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==", - "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/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "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==", - "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==", - "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.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "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/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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==", - "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==", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "dependencies": { - "side-channel": "^1.1.0" - }, - "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==", - "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==", - "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==", - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/@monaco-editor/loader": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.6.1.tgz", @@ -5459,303 +5053,16 @@ "tslib": "^2.3.1" } }, - "node_modules/@napi-rs/nice": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", - "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", - "optional": true, - "engines": { - "node": ">= 10" + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.1.1", - "@napi-rs/nice-android-arm64": "1.1.1", - "@napi-rs/nice-darwin-arm64": "1.1.1", - "@napi-rs/nice-darwin-x64": "1.1.1", - "@napi-rs/nice-freebsd-x64": "1.1.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", - "@napi-rs/nice-linux-arm64-gnu": "1.1.1", - "@napi-rs/nice-linux-arm64-musl": "1.1.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", - "@napi-rs/nice-linux-s390x-gnu": "1.1.1", - "@napi-rs/nice-linux-x64-gnu": "1.1.1", - "@napi-rs/nice-linux-x64-musl": "1.1.1", - "@napi-rs/nice-openharmony-arm64": "1.1.1", - "@napi-rs/nice-win32-arm64-msvc": "1.1.1", - "@napi-rs/nice-win32-ia32-msvc": "1.1.1", - "@napi-rs/nice-win32-x64-msvc": "1.1.1" - } - }, - "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", - "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", - "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", - "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", - "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", - "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", - "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", - "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", - "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", - "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", - "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", - "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", - "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", - "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-openharmony-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", - "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", - "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", - "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", - "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { @@ -6924,41 +6231,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@secretlint/core": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-9.3.4.tgz", - "integrity": "sha512-ErIVHI6CJd191qdNKuMkH3bZQo9mWJsrSg++bQx64o0WFuG5nPvkYrDK0p/lebf+iQuOnzvl5HrZU6GU9a6o+Q==", - "dependencies": { - "@secretlint/profiler": "^9.3.4", - "@secretlint/types": "^9.3.4", - "debug": "^4.4.1", - "structured-source": "^4.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/@secretlint/profiler": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-9.3.4.tgz", - "integrity": "sha512-99WmaHd4dClNIm5BFsG++E6frNIZ3qVwg6s804Ql/M19pDmtZOoVCl4/UuzWpwNniBqLIgn9rHQZ/iGlIW3wyw==" - }, - "node_modules/@secretlint/secretlint-rule-preset-recommend": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-9.3.4.tgz", - "integrity": "sha512-RvzrLNN2A0B2bYQgRSRjh2dkdaIDuhXjj4SO5bElK1iBtJNiD6VBTxSSY1P3hXYaBeva7MEF+q1PZ3cCL8XYOA==", - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/@secretlint/types": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-9.3.4.tgz", - "integrity": "sha512-z9rdKHNeL4xa48+367RQJVw1d7/Js9HIQ+gTs/angzteM9osfgs59ad3iwVRhCGYbeUoUUDe2yxJG2ylYLaH3Q==", - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, "node_modules/@shikijs/core": { "version": "1.29.2", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz", @@ -7071,17 +6343,6 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@slorber/remark-comment": { "version": "1.0.0", "license": "MIT", @@ -7955,15 +7216,6 @@ "license": "MIT", "peer": true }, - "node_modules/@types/parse-path": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.1.0.tgz", - "integrity": "sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==", - "deprecated": "This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed.", - "dependencies": { - "parse-path": "*" - } - }, "node_modules/@types/prismjs": { "version": "1.26.5", "license": "MIT" @@ -8724,20 +7976,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binaryextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", - "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", - "dependencies": { - "editions": "^6.21.0" - }, - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/body-parser": { "version": "1.20.3", "license": "MIT", @@ -8783,11 +8021,6 @@ "version": "1.0.0", "license": "ISC" }, - "node_modules/boundary": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", - "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==" - }, "node_modules/boxen": { "version": "6.2.1", "license": "MIT", @@ -9249,31 +8482,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-table3": { "version": "0.6.5", "license": "MIT", @@ -9309,160 +8517,6 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, - "node_modules/clipboardy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", - "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", - "dependencies": { - "execa": "^8.0.1", - "is-wsl": "^3.1.0", - "is64bit": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/clipboardy/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/clipboardy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/clipboardy/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "license": "MIT", @@ -9783,18 +8837,6 @@ "version": "1.0.3", "license": "MIT" }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cose-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", @@ -11089,21 +10131,6 @@ "version": "0.2.0", "license": "MIT" }, - "node_modules/editions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", - "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", - "dependencies": { - "version-range": "^4.15.0" - }, - "engines": { - "ecmascript": ">= es5", - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/ee-first": { "version": "1.1.1", "license": "MIT" @@ -11194,17 +10221,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/error-ex": { "version": "1.3.4", "license": "MIT", @@ -11484,25 +10500,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/execa": { "version": "5.1.1", "license": "MIT", @@ -11570,20 +10567,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, "node_modules/express/node_modules/content-disposition": { "version": "0.5.4", "license": "MIT", @@ -11689,23 +10672,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fast-xml-parser": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.3.tgz", - "integrity": "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fastq": { "version": "1.19.1", "license": "ISC", @@ -12038,17 +11004,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "license": "MIT", @@ -12105,23 +11060,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-up": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", - "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^9.2.0" - } - }, - "node_modules/git-url-parse": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", - "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", - "dependencies": { - "git-up": "^8.1.0" - } - }, "node_modules/github-slugger": { "version": "1.5.0", "license": "ISC" @@ -12309,26 +11247,6 @@ "version": "2.0.1", "license": "MIT" }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, "node_modules/has-flag": { "version": "4.0.0", "license": "MIT", @@ -12769,15 +11687,6 @@ "react-is": "^16.7.0" } }, - "node_modules/hono": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.3.tgz", - "integrity": "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/hpack.js": { "version": "2.1.6", "license": "MIT", @@ -13283,37 +12192,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-installed-globally": { "version": "0.4.0", "license": "MIT", @@ -13379,11 +12257,6 @@ "node": ">=0.10.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==" - }, "node_modules/is-regexp": { "version": "1.0.0", "license": "MIT", @@ -13391,14 +12264,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-ssh": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", - "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", - "dependencies": { - "protocols": "^2.0.1" - } - }, "node_modules/is-stream": { "version": "2.0.1", "license": "MIT", @@ -13430,20 +12295,6 @@ "node": ">=12" } }, - "node_modules/is64bit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", - "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", - "dependencies": { - "system-architecture": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isarray": { "version": "0.0.1", "license": "MIT" @@ -13483,22 +12334,6 @@ "ws": "*" } }, - "node_modules/istextorbinary": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", - "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", - "dependencies": { - "binaryextensions": "^6.11.0", - "editions": "^6.21.0", - "textextensions": "^6.11.0" - }, - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", @@ -13570,14 +12405,6 @@ "@sideway/pinpoint": "^2.0.0" } }, - "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/js-sha256": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", @@ -13604,14 +12431,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jschardet": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.4.tgz", - "integrity": "sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/jsesc": { "version": "3.1.0", "license": "MIT", @@ -13634,11 +12453,6 @@ "version": "1.0.0", "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==" - }, "node_modules/json5": { "version": "2.2.3", "license": "MIT", @@ -13901,124 +12715,19 @@ "license": "MIT" }, "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", - "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" - }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "license": "MIT" }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } + "node_modules/lodash.memoize": { + "version": "4.1.2", + "license": "MIT" }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } + "node_modules/lodash.uniq": { + "version": "4.5.0", + "license": "MIT" }, "node_modules/longest-streak": { "version": "3.1.0", @@ -15358,17 +14067,6 @@ "node": ">=6" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mimic-response": { "version": "3.1.0", "license": "MIT", @@ -15982,26 +14680,6 @@ "version": "1.3.0", "license": "ISC" }, - "node_modules/parse-path": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", - "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", - "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", - "dependencies": { - "@types/parse-path": "^7.0.0", - "parse-path": "^7.0.0" - }, - "engines": { - "node": ">=14.13.0" - } - }, "node_modules/parse5": { "version": "7.3.0", "license": "MIT", @@ -16126,22 +14804,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/piscina": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.9.2.tgz", - "integrity": "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==", - "optionalDependencies": { - "@napi-rs/nice": "^1.0.1" - } - }, - "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==", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pkg-dir": { "version": "7.0.0", "license": "MIT", @@ -17542,11 +16204,6 @@ "version": "1.2.4", "license": "ISC" }, - "node_modules/protocols": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", - "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "license": "MIT", @@ -18808,138 +17465,6 @@ "node": ">=0.10" } }, - "node_modules/repomix": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/repomix/-/repomix-0.3.9.tgz", - "integrity": "sha512-Olo/vORZChL98HOC3tZaE5+kwSaoox8KoF9N+lfQRb7dWT4qNa/SLFHT40Xq54cbZ7l9qTIZhXWmU1d/AtwqGQ==", - "dependencies": { - "@clack/prompts": "^0.10.1", - "@modelcontextprotocol/sdk": "^1.11.0", - "@secretlint/core": "^9.3.1", - "@secretlint/secretlint-rule-preset-recommend": "^9.3.1", - "cli-spinners": "^2.9.2", - "clipboardy": "^4.0.0", - "commander": "^14.0.0", - "fast-xml-parser": "^5.2.0", - "git-url-parse": "^16.1.0", - "globby": "^14.1.0", - "handlebars": "^4.7.8", - "iconv-lite": "^0.6.3", - "istextorbinary": "^9.5.0", - "jschardet": "^3.1.4", - "json5": "^2.2.3", - "log-update": "^6.1.0", - "minimatch": "^10.0.1", - "picocolors": "^1.1.1", - "piscina": "^4.9.2", - "strip-comments": "^2.0.1", - "strip-json-comments": "^5.0.1", - "tiktoken": "^1.0.20", - "tree-sitter-wasms": "^0.1.12", - "web-tree-sitter": "^0.24.7", - "zod": "^3.24.3" - }, - "bin": { - "repomix": "bin/repomix.cjs" - }, - "engines": { - "node": ">=18.0.0", - "yarn": ">=1.22.22" - } - }, - "node_modules/repomix/node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", - "engines": { - "node": ">=20" - } - }, - "node_modules/repomix/node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/repomix/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repomix/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/repomix/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/repomix/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/repomix/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/repomix/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "license": "MIT", @@ -19003,46 +17528,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/retry": { "version": "0.13.1", "license": "MIT", @@ -19089,30 +17574,6 @@ "points-on-path": "^0.2.1" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "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/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/rtlcss": { "version": "4.3.0", "license": "MIT", @@ -19640,46 +18101,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/snake-case": { "version": "3.0.4", "license": "MIT", @@ -19916,14 +18337,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "license": "MIT", @@ -19941,25 +18354,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ] - }, - "node_modules/structured-source": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", - "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", - "dependencies": { - "boundary": "^2.0.0" - } - }, "node_modules/style-to-js": { "version": "1.1.17", "license": "MIT", @@ -20168,17 +18562,6 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/system-architecture": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", - "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tailwind-merge": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", @@ -20268,29 +18651,10 @@ "version": "2.20.3", "license": "MIT" }, - "node_modules/textextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", - "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", - "dependencies": { - "editions": "^6.21.0" - }, - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/thunky": { "version": "1.1.0", "license": "MIT" }, - "node_modules/tiktoken": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.22.tgz", - "integrity": "sha512-PKvy1rVF1RibfF3JlXBSP0Jrcw2uq3yXdgcEXtKTYn3QJ/cBRBHDnrJ5jHky+MENZ6DIPwNUGWpkVx+7joCpNA==" - }, "node_modules/tiny-invariant": { "version": "1.3.3", "license": "MIT" @@ -20348,14 +18712,6 @@ "node": ">=6" } }, - "node_modules/tree-sitter-wasms": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/tree-sitter-wasms/-/tree-sitter-wasms-0.1.13.tgz", - "integrity": "sha512-wT+cR6DwaIz80/vho3AvSF0N4txuNx/5bcRKoXouOfClpxh/qqrF4URNLQXbbt8MaAxeksZcZd1j8gcGjc+QxQ==", - "dependencies": { - "tree-sitter-wasms": "^0.1.11" - } - }, "node_modules/trim-lines": { "version": "3.0.1", "license": "MIT", @@ -20440,18 +18796,6 @@ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "license": "MIT" }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/undici": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", @@ -20504,17 +18848,6 @@ "node": ">=4" } }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unified": { "version": "11.0.5", "license": "MIT", @@ -20961,17 +19294,6 @@ "node": ">= 0.8" } }, - "node_modules/version-range": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", - "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/vfile": { "version": "6.0.3", "license": "MIT", @@ -21156,11 +19478,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/web-tree-sitter": { - "version": "0.24.7", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.7.tgz", - "integrity": "sha512-CdC/TqVFbXqR+C51v38hv6wOPatKEUGxa39scAeFSm98wIhZxAYonhRQPSMmfZ2w7JDI0zQDdzdmgtNk06/krQ==" - }, "node_modules/web-vitals": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", @@ -21493,11 +19810,6 @@ "version": "2.0.1", "license": "MIT" }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, "node_modules/wrap-ansi": { "version": "8.1.0", "license": "MIT", @@ -21634,22 +19946,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", - "peerDependencies": { - "zod": "^3.25 || ^4" - } - }, "node_modules/zwitch": { "version": "2.0.4", "license": "MIT", From bb196910119f65181ba9a2a067ac12ec312d1b11 Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 02:59:33 +0100 Subject: [PATCH 08/10] docs: fix Rust core label in mermaid diagrams to @miden-sdk/rust-sdk --- docs/builder/client/react-client/design.md | 2 +- docs/builder/client/web-client/design.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/builder/client/react-client/design.md b/docs/builder/client/react-client/design.md index 220645dd..bd156ca0 100644 --- a/docs/builder/client/react-client/design.md +++ b/docs/builder/client/react-client/design.md @@ -13,7 +13,7 @@ The React SDK is a pure TypeScript/React package that wraps the [WASM bridge](.. ```mermaid flowchart LR - A["Rust core
(miden-client)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] + A["Rust core
(@miden-sdk/rust-sdk)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] B -->|"peer dependency"| C["React SDK
(@miden-sdk/react-sdk)"] C --> D["Your React app"] ``` diff --git a/docs/builder/client/web-client/design.md b/docs/builder/client/web-client/design.md index a1de2ed8..90e65486 100644 --- a/docs/builder/client/web-client/design.md +++ b/docs/builder/client/web-client/design.md @@ -13,7 +13,7 @@ The TypeScript SDK is a pure TypeScript package that wraps the [WASM bridge](../ ```mermaid flowchart LR - A["Rust core
(miden-client)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] + A["Rust core
(@miden-sdk/rust-sdk)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] B -->|"npm dependency"| C["TypeScript SDK
(@miden-sdk/ts-sdk)"] C --> D["Your application"] ``` From d172117fbd49fc8a045978804f92296e8aa805dc Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 03:16:19 +0100 Subject: [PATCH 09/10] docs: remove synced content from repo, rely on CI ingestion --- docs/builder/client/_category_.yml | 4 - docs/builder/client/common-errors.md | 99 ----- docs/builder/client/index.md | 40 -- .../client/react-client/_category_.yml | 3 - docs/builder/client/react-client/design.md | 177 -------- docs/builder/client/react-client/examples.md | 49 --- docs/builder/client/react-client/features.md | 36 -- .../react-client/get-started/_category_.yml | 3 - .../react-client/get-started/create-wallet.md | 110 ----- .../get-started/external-signer.md | 100 ----- .../client/react-client/get-started/index.md | 28 -- .../react-client/get-started/send-receive.md | 117 ----- .../get-started/setup-provider.md | 63 --- docs/builder/client/react-client/index.md | 14 - docs/builder/client/react-client/install.md | 49 --- .../react-client/library/_category_.yml | 3 - .../client/react-client/library/accounts.md | 145 ------ .../client/react-client/library/index.md | 59 --- .../client/react-client/library/notes.md | 102 ----- .../client/react-client/library/provider.md | 90 ---- .../client/react-client/library/signers.md | 169 ------- .../client/react-client/library/sync.md | 95 ---- .../react-client/library/transactions.md | 185 -------- .../client/react-client/library/utilities.md | 114 ----- .../builder/client/rust-client/_category_.yml | 4 - docs/builder/client/rust-client/api-docs.md | 8 - docs/builder/client/rust-client/design.md | 80 ---- docs/builder/client/rust-client/examples.md | 87 ---- docs/builder/client/rust-client/features.md | 56 --- .../rust-client/get-started/_category_.yml | 3 - .../get-started/create-account-use-faucet.md | 166 ------- .../client/rust-client/get-started/index.md | 17 - .../rust-client/get-started/p2p-private.md | 144 ------ .../rust-client/get-started/p2p-public.md | 111 ----- docs/builder/client/rust-client/index.md | 25 -- .../client/rust-client/install-and-run.md | 53 --- .../client/rust-client/library/_category_.yml | 3 - .../client/rust-client/library/accounts.md | 50 --- .../client/rust-client/library/compile.md | 172 -------- .../client/rust-client/library/export.md | 40 -- .../client/rust-client/library/import.md | 72 --- .../client/rust-client/library/index.md | 82 ---- .../rust-client/library/new-accounts.md | 107 ----- .../rust-client/library/new-transactions.md | 186 -------- .../rust-client/library/note-transport.md | 104 ----- .../client/rust-client/library/notes.md | 67 --- .../client/rust-client/library/sync.md | 51 --- .../client/rust-client/library/tags.md | 65 --- .../rust-client/library/transactions.md | 44 -- .../client/theme/Admonition/Icon/Danger.tsx | 19 - .../client/theme/Admonition/Icon/Info.tsx | 20 - .../client/theme/Admonition/Icon/Note.tsx | 20 - .../client/theme/Admonition/Icon/Tip.tsx | 20 - .../client/theme/Admonition/Icon/Warning.tsx | 20 - .../client/theme/Admonition/Layout/index.tsx | 51 --- .../theme/Admonition/Layout/styles.module.css | 35 -- .../client/theme/Admonition/Type/Caution.tsx | 32 -- .../client/theme/Admonition/Type/Danger.tsx | 30 -- .../client/theme/Admonition/Type/Info.tsx | 30 -- .../client/theme/Admonition/Type/Note.tsx | 30 -- .../client/theme/Admonition/Type/Tip.tsx | 30 -- .../client/theme/Admonition/Type/Warning.tsx | 30 -- .../builder/client/theme/Admonition/Types.tsx | 31 -- .../builder/client/theme/Admonition/index.tsx | 21 - docs/builder/client/web-client/_category_.yml | 4 - docs/builder/client/web-client/api-docs.md | 8 - docs/builder/client/web-client/design.md | 149 ------- docs/builder/client/web-client/examples.md | 45 -- docs/builder/client/web-client/features.md | 36 -- .../web-client/get-started/_category_.yml | 3 - .../get-started/create-account-use-faucet.md | 140 ------ .../client/web-client/get-started/index.md | 28 -- .../web-client/get-started/mock-client.md | 172 -------- .../web-client/get-started/p2p-private.md | 162 ------- .../web-client/get-started/p2p-public.md | 128 ------ docs/builder/client/web-client/index.md | 15 - docs/builder/client/web-client/install.md | 37 -- .../client/web-client/library/_category_.yml | 3 - .../client/web-client/library/accounts.md | 105 ----- .../client/web-client/library/compile.md | 212 --------- .../client/web-client/library/export.md | 74 ---- .../client/web-client/library/import.md | 116 ----- .../client/web-client/library/index.md | 80 ---- .../builder/client/web-client/library/mock.md | 110 ----- .../client/web-client/library/new-accounts.md | 143 ------ .../web-client/library/new-transactions.md | 333 -------------- .../web-client/library/note-transport.md | 51 --- .../client/web-client/library/notes.md | 140 ------ .../builder/client/web-client/library/sync.md | 72 --- .../builder/client/web-client/library/tags.md | 73 ---- .../client/web-client/library/transactions.md | 86 ---- docs/builder/tools/cli/_category_.yml | 3 - docs/builder/tools/cli/cli-troubleshooting.md | 147 ------- .../tools/cli/get-started/_category_.yml | 3 - .../tools/cli/get-started/cli-config.md | 194 --------- .../get-started/create-account-use-faucet.md | 153 ------- docs/builder/tools/cli/get-started/index.md | 18 - .../tools/cli/get-started/p2p-private.md | 95 ---- .../tools/cli/get-started/p2p-public.md | 83 ---- docs/builder/tools/cli/index.md | 412 ------------------ 100 files changed, 7703 deletions(-) delete mode 100644 docs/builder/client/_category_.yml delete mode 100644 docs/builder/client/common-errors.md delete mode 100644 docs/builder/client/index.md delete mode 100644 docs/builder/client/react-client/_category_.yml delete mode 100644 docs/builder/client/react-client/design.md delete mode 100644 docs/builder/client/react-client/examples.md delete mode 100644 docs/builder/client/react-client/features.md delete mode 100644 docs/builder/client/react-client/get-started/_category_.yml delete mode 100644 docs/builder/client/react-client/get-started/create-wallet.md delete mode 100644 docs/builder/client/react-client/get-started/external-signer.md delete mode 100644 docs/builder/client/react-client/get-started/index.md delete mode 100644 docs/builder/client/react-client/get-started/send-receive.md delete mode 100644 docs/builder/client/react-client/get-started/setup-provider.md delete mode 100644 docs/builder/client/react-client/index.md delete mode 100644 docs/builder/client/react-client/install.md delete mode 100644 docs/builder/client/react-client/library/_category_.yml delete mode 100644 docs/builder/client/react-client/library/accounts.md delete mode 100644 docs/builder/client/react-client/library/index.md delete mode 100644 docs/builder/client/react-client/library/notes.md delete mode 100644 docs/builder/client/react-client/library/provider.md delete mode 100644 docs/builder/client/react-client/library/signers.md delete mode 100644 docs/builder/client/react-client/library/sync.md delete mode 100644 docs/builder/client/react-client/library/transactions.md delete mode 100644 docs/builder/client/react-client/library/utilities.md delete mode 100644 docs/builder/client/rust-client/_category_.yml delete mode 100644 docs/builder/client/rust-client/api-docs.md delete mode 100644 docs/builder/client/rust-client/design.md delete mode 100644 docs/builder/client/rust-client/examples.md delete mode 100644 docs/builder/client/rust-client/features.md delete mode 100644 docs/builder/client/rust-client/get-started/_category_.yml delete mode 100644 docs/builder/client/rust-client/get-started/create-account-use-faucet.md delete mode 100644 docs/builder/client/rust-client/get-started/index.md delete mode 100644 docs/builder/client/rust-client/get-started/p2p-private.md delete mode 100644 docs/builder/client/rust-client/get-started/p2p-public.md delete mode 100644 docs/builder/client/rust-client/index.md delete mode 100644 docs/builder/client/rust-client/install-and-run.md delete mode 100644 docs/builder/client/rust-client/library/_category_.yml delete mode 100644 docs/builder/client/rust-client/library/accounts.md delete mode 100644 docs/builder/client/rust-client/library/compile.md delete mode 100644 docs/builder/client/rust-client/library/export.md delete mode 100644 docs/builder/client/rust-client/library/import.md delete mode 100644 docs/builder/client/rust-client/library/index.md delete mode 100644 docs/builder/client/rust-client/library/new-accounts.md delete mode 100644 docs/builder/client/rust-client/library/new-transactions.md delete mode 100644 docs/builder/client/rust-client/library/note-transport.md delete mode 100644 docs/builder/client/rust-client/library/notes.md delete mode 100644 docs/builder/client/rust-client/library/sync.md delete mode 100644 docs/builder/client/rust-client/library/tags.md delete mode 100644 docs/builder/client/rust-client/library/transactions.md delete mode 100644 docs/builder/client/theme/Admonition/Icon/Danger.tsx delete mode 100644 docs/builder/client/theme/Admonition/Icon/Info.tsx delete mode 100644 docs/builder/client/theme/Admonition/Icon/Note.tsx delete mode 100644 docs/builder/client/theme/Admonition/Icon/Tip.tsx delete mode 100644 docs/builder/client/theme/Admonition/Icon/Warning.tsx delete mode 100644 docs/builder/client/theme/Admonition/Layout/index.tsx delete mode 100644 docs/builder/client/theme/Admonition/Layout/styles.module.css delete mode 100644 docs/builder/client/theme/Admonition/Type/Caution.tsx delete mode 100644 docs/builder/client/theme/Admonition/Type/Danger.tsx delete mode 100644 docs/builder/client/theme/Admonition/Type/Info.tsx delete mode 100644 docs/builder/client/theme/Admonition/Type/Note.tsx delete mode 100644 docs/builder/client/theme/Admonition/Type/Tip.tsx delete mode 100644 docs/builder/client/theme/Admonition/Type/Warning.tsx delete mode 100644 docs/builder/client/theme/Admonition/Types.tsx delete mode 100644 docs/builder/client/theme/Admonition/index.tsx delete mode 100644 docs/builder/client/web-client/_category_.yml delete mode 100644 docs/builder/client/web-client/api-docs.md delete mode 100644 docs/builder/client/web-client/design.md delete mode 100644 docs/builder/client/web-client/examples.md delete mode 100644 docs/builder/client/web-client/features.md delete mode 100644 docs/builder/client/web-client/get-started/_category_.yml delete mode 100644 docs/builder/client/web-client/get-started/create-account-use-faucet.md delete mode 100644 docs/builder/client/web-client/get-started/index.md delete mode 100644 docs/builder/client/web-client/get-started/mock-client.md delete mode 100644 docs/builder/client/web-client/get-started/p2p-private.md delete mode 100644 docs/builder/client/web-client/get-started/p2p-public.md delete mode 100644 docs/builder/client/web-client/index.md delete mode 100644 docs/builder/client/web-client/install.md delete mode 100644 docs/builder/client/web-client/library/_category_.yml delete mode 100644 docs/builder/client/web-client/library/accounts.md delete mode 100644 docs/builder/client/web-client/library/compile.md delete mode 100644 docs/builder/client/web-client/library/export.md delete mode 100644 docs/builder/client/web-client/library/import.md delete mode 100644 docs/builder/client/web-client/library/index.md delete mode 100644 docs/builder/client/web-client/library/mock.md delete mode 100644 docs/builder/client/web-client/library/new-accounts.md delete mode 100644 docs/builder/client/web-client/library/new-transactions.md delete mode 100644 docs/builder/client/web-client/library/note-transport.md delete mode 100644 docs/builder/client/web-client/library/notes.md delete mode 100644 docs/builder/client/web-client/library/sync.md delete mode 100644 docs/builder/client/web-client/library/tags.md delete mode 100644 docs/builder/client/web-client/library/transactions.md delete mode 100644 docs/builder/tools/cli/_category_.yml delete mode 100644 docs/builder/tools/cli/cli-troubleshooting.md delete mode 100644 docs/builder/tools/cli/get-started/_category_.yml delete mode 100644 docs/builder/tools/cli/get-started/cli-config.md delete mode 100644 docs/builder/tools/cli/get-started/create-account-use-faucet.md delete mode 100644 docs/builder/tools/cli/get-started/index.md delete mode 100644 docs/builder/tools/cli/get-started/p2p-private.md delete mode 100644 docs/builder/tools/cli/get-started/p2p-public.md delete mode 100644 docs/builder/tools/cli/index.md diff --git a/docs/builder/client/_category_.yml b/docs/builder/client/_category_.yml deleted file mode 100644 index 9c37f780..00000000 --- a/docs/builder/client/_category_.yml +++ /dev/null @@ -1,4 +0,0 @@ -label: Client -# Determines where this documentation section appears relative to other sections on the main documentation page (which is the parent of this folder in the miden-docs repository) -position: 5 -collapsed: true diff --git a/docs/builder/client/common-errors.md b/docs/builder/client/common-errors.md deleted file mode 100644 index 2dd8553d..00000000 --- a/docs/builder/client/common-errors.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Common Errors ---- - -# Troubleshooting and common errors - -This guide helps you troubleshoot common issues when using the Miden Client. - -## Connection and sync errors - -#### `RpcError::ConnectionError` -- **Cause:** Could not reach the Miden node. -- **Fix:** Check that the node endpoint in your configuration is correct and that the node is running. - -#### `RpcError::AcceptHeaderError` -- **Cause:** The node rejected the request due to a version mismatch between the client and node. -- **Fix:** Ensure your client version is compatible with the node version. Update one or the other to a compatible release. - -## Account errors - -#### `ClientError::AccountLocked` -- **Cause:** The account is locked because the client may be missing its latest state. This can happen when the account is shared across clients and another client executed a transaction. -- **Fix:** Run `sync` to fetch the latest state from the network. - -#### `ClientError::AccountNonceTooLow` -- **Cause:** The account you are trying to import has an older nonce than the version already tracked locally. -- **Fix:** Run `sync` to ensure your local state is current, or re-export the account from a more up-to-date source. - -#### `ClientError::AccountNotFoundOnChain` -- **Cause:** The account was not found on the network. It may not have been committed yet, or the ID is incorrect. -- **Fix:** Verify the account ID and ensure the account has been committed on chain. For new accounts, wait for the transaction that created it to be confirmed and run `sync`. - -#### `ClientError::AccountIsPrivate` -- **Cause:** Cannot retrieve private account details from the network. Private account state is not stored on chain. -- **Fix:** Private accounts can only be accessed locally. Use the account file export/import workflow to transfer private accounts between clients. - -#### `ClientError::AddNewAccountWithoutSeed` -- **Cause:** New accounts require a seed to derive their initial state. -- **Fix:** Use `Client::new_account()` (Rust) or `client.accounts.create()` (TypeScript) which generates the seed automatically. If importing manually, provide the seed. - -## Note errors - -#### `ClientError::NoteNotFoundOnChain` / `RpcError::NoteNotFound` -- **Cause:** The note has not been found on chain, or the note ID is incorrect. -- **Fix:** Verify the note ID, ensure it has been committed, and sync the client before retrying. - -#### `ClientError::NoConsumableNoteForAccount` -- **Cause:** No notes were found that the specified account can consume. -- **Fix:** Run `sync` to fetch the latest notes from the network. Verify that notes targeting this account have been committed on chain. - -#### `TransactionRequestError::InputNoteNotAuthenticated` -- **Cause:** The note needs an inclusion proof before it can be consumed as an authenticated input. -- **Fix:** Run `sync` to fetch the latest proofs from the network, then retry the transaction. - -## Transaction request errors - -#### `TransactionRequestError::NoInputNotesNorAccountChange` -- **Cause:** The transaction neither consumes input notes nor mutates tracked account state. -- **Fix:** Add at least one authenticated/unauthenticated input note or include an explicit account state update in the request. - -#### `TransactionRequestError::InvalidSenderAccount` -- **Cause:** The sender account is not tracked by this client. -- **Fix:** Import or create the account first, then retry the transaction. - -#### `TransactionRequestError::P2IDNoteWithoutAsset` -- **Cause:** A pay-to-ID (P2ID) note must transfer at least one asset to the target account. -- **Fix:** Add at least one fungible or non-fungible asset to the note. - -#### `TransactionRequestError::MissingAuthenticatedInputNote` -- **Cause:** A note ID included in `authenticated_input_notes` did not have a corresponding record in the store, or it was missing authentication data. -- **Fix:** Import or sync the note so its record and inclusion proof are present before building and executing the request. - -#### `TransactionRequestError::StorageSlotNotFound` -- **Cause:** The request referenced an account storage slot that does not exist. This often happens because the ABI layout is incorrectly addressed (the auth component is always the first component in the account component list). -- **Fix:** Verify the account ABI and component ordering, then adjust the slot index used in the transaction. - -## Transaction execution errors - -#### `ClientError::MissingOutputRecipients` -- **Cause:** The MASM program emitted an output note whose recipient was not listed in the expected output recipients. -- **Fix:** Reconcile the MASM recipient data with the note structs and update the expected recipients so they match the transaction outputs. - -#### `TransactionExecutorError::ForeignAccountNotAnchoredInReference` -- **Cause:** The foreign account proof was generated against a different block than the request's reference block. -- **Fix:** Re-fetch the foreign account proof anchored at the correct reference block and retry. - -#### `TransactionExecutorError::TransactionProgramExecutionFailed` -- **Cause:** The MASM kernel failed during execution (e.g., failed assertion or constraint violation). -- **Fix:** Re-run with debug mode enabled, capture VM diagnostics, and inspect the source manager output to understand why execution failed. - -## Store errors - -#### `ClientError::StoreError(AccountCommitmentAlreadyExists)` -- **Cause:** The final account commitment already exists locally, usually because the transaction was already applied. -- **Fix:** Sync to confirm the transaction status and avoid resubmitting it. If you need a clean slate for development, reset the store. - -#### `ClientError::RecencyConditionError` -- **Cause:** The transaction failed a recency check — the reference block is too old relative to the current chain tip. -- **Fix:** Sync to get the latest block data, then rebuild and resubmit the transaction. diff --git a/docs/builder/client/index.md b/docs/builder/client/index.md deleted file mode 100644 index cd6cb8ec..00000000 --- a/docs/builder/client/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Design -sidebar_position: 1 ---- - -# Miden Client - -The Miden Client SDK is organized as a layered stack. The Rust core is the single source of truth for all client logic. Browser-facing SDKs build on top of it through a WASM bridge layer, giving TypeScript and React developers native access to the full protocol without needing a Rust toolchain. - -```mermaid -graph TB - subgraph rust-sdk["rust-sdk"] - core["miden-client
Core Rust library
accounts · notes · transactions
proving · state sync"] - end - - subgraph wasm-bridge["wasm-bridge"] - bridge["@miden-sdk/wasm-bridge
WASM compilation + JS glue
Web Worker orchestration
IndexedDB store + keystore
type marshalling"] - end - - subgraph ts-sdk["ts-sdk"] - ts["@miden-sdk/ts-sdk
Idiomatic TypeScript wrapper
async/await API · type definitions"] - end - - subgraph react-sdk["react-sdk"] - react["@miden-sdk/react-sdk
React hooks + providers
Zustand state · signer integrations"] - end - - core -- "crates.io" --> bridge - bridge -- "npm" --> ts - bridge -- "npm" --> react -``` - -| Layer | Published as | Language | Purpose | -|-------|-------------|----------|---------| -| **[Rust SDK](./rust-client/index.md)** | `miden-client` (crates.io) | Rust | Core client library — account management, transaction building/execution/proving, state sync, node communication. `#![no_std]` compatible with trait-based DI for storage, RPC, proving, and key management | -| **WASM bridge** | `@miden-sdk/wasm-bridge` (npm) | Rust → WASM + JS | Compiles the Rust core to WebAssembly via `wasm-bindgen`. Manages Web Worker offloading, IndexedDB persistence, sync locking, and external signer support | -| **[TypeScript SDK](./web-client/index.md)** | `@miden-sdk/ts-sdk` (npm) | TypeScript | Pure TypeScript wrapper over the WASM bridge. Primary entry point for Node.js backends and non-React browser apps | -| **[React SDK](./react-client/index.md)** | `@miden-sdk/react-sdk` (npm) | TypeScript | React integration — hooks, context providers, Zustand state management, and wallet signer integrations | - -The TypeScript and React SDKs are siblings — both consume the WASM bridge directly, neither depends on the other. diff --git a/docs/builder/client/react-client/_category_.yml b/docs/builder/client/react-client/_category_.yml deleted file mode 100644 index 54db8066..00000000 --- a/docs/builder/client/react-client/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: React -position: 3 -collapsed: true diff --git a/docs/builder/client/react-client/design.md b/docs/builder/client/react-client/design.md deleted file mode 100644 index bd156ca0..00000000 --- a/docs/builder/client/react-client/design.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Design -sidebar_position: 4 ---- - -# Design - -This page explains how the React SDK is structured and how its pieces fit together at runtime. - -## How the SDK reaches the browser - -The React SDK is a pure TypeScript/React package that wraps the [WASM bridge](../index.md). It consumes `@miden-sdk/wasm-bridge` as a peer dependency and adds React-specific patterns — hooks, context providers, and Zustand state management — on top. - -```mermaid -flowchart LR - A["Rust core
(@miden-sdk/rust-sdk)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] - B -->|"peer dependency"| C["React SDK
(@miden-sdk/react-sdk)"] - C --> D["Your React app"] -``` - -The React SDK contains no Rust or WASM code of its own. From your perspective, `npm install @miden-sdk/react-sdk @miden-sdk/wasm-bridge` is all you need. - -## Runtime architecture - -At runtime, the SDK introduces three layers between your components and the WASM bridge: - -```mermaid -flowchart TB - subgraph App["Your React app"] - Components["React components"] - end - - subgraph ReactSDK["@miden-sdk/react-sdk"] - Hooks["Hooks layer
query + mutation hooks"] - Store["Zustand store
accounts · notes · sync
asset metadata · loading states"] - Provider["MidenProvider
client lifecycle · auto-sync
exclusive WASM access"] - end - - subgraph Worker["Web Worker thread"] - WASM["Rust client core
(WASM bridge)"] - WASM --> IDB["IndexedDB
store + keystore"] - WASM --> RPC["gRPC-web"] - end - - Components --> Hooks - Hooks --> Store - Hooks --> Provider - Provider -->|"runExclusive()
postMessage"| WASM - Store -.->|"re-renders on
state change"| Components - RPC --> Node["Miden node"] - RPC --> NT["Note transport"] -``` - -### Provider - -`MidenProvider` is the root of the SDK. It: - -1. **Initializes the WASM client** — loads the WebAssembly binary, creates the Web Worker, and connects to the configured RPC endpoint -2. **Manages auto-sync** — polls the Miden node at a configurable interval (default: 15s), updating the Zustand store after each sync -3. **Serializes WASM access** — all operations go through `runExclusive()`, which uses an `AsyncLock` to prevent concurrent WASM calls -4. **Detects external signers** — if a `SignerContext` is present above the provider, it creates the client with an external keystore instead of the default local one - -### Zustand store - -The SDK uses [Zustand](https://zustand.docs.pmnd.rs/) for centralized state: - -```mermaid -flowchart LR - subgraph Hooks["Selector hooks"] - direction TB - H1["useAccounts()"] - H2["useAccount(id)"] - H3["useNotes()"] - H4["useSyncState()"] - H5["useNoteStream()"] - end - - subgraph Store["MidenStore"] - direction TB - Accounts["Account cache"] - Notes["Note cache"] - Sync["Sync state"] - Assets["Asset metadata"] - Client["Client state"] - end - - H1 --> Accounts - H2 --> Accounts - H2 --> Assets - H3 --> Notes - H4 --> Sync - H5 --> Notes -``` - -| Store slice | Contents | -|-------------|----------| -| **Account cache** | `accountHeaders`, `accountDetails` | -| **Note cache** | `inputNotes`, `consumableNotes`, `noteFirstSeen` | -| **Sync state** | `syncHeight`, `isSyncing`, `lastSyncTime` | -| **Asset metadata** | `symbol`, `decimals` per faucet ID | -| **Client state** | `isReady`, `isInitializing`, `config` | - -Components subscribe to specific slices of the store via selector hooks, so they only re-render when their data changes — not on every sync cycle. - -### Hooks layer - -Hooks follow two patterns: - -**Query hooks** (`useAccounts`, `useAccount`, `useNotes`, `useNoteStream`, `useSyncState`, `useTransactionHistory`, `useAssetMetadata`) read from the Zustand store, auto-fetch on mount if the cache is empty, and re-fetch after each sync. - -**Mutation hooks** (`useSend`, `useConsume`, `useMint`, `useSwap`, `useCreateWallet`, `useCreateFaucet`, `useTransaction`) execute transactions through the provider's `runExclusive()`, track progress through stages, and refresh the store on completion. - -```mermaid -sequenceDiagram - participant C as Component - participant H as useSend() - participant P as MidenProvider - participant W as Web Worker (WASM) - participant N as Miden node - - C->>H: send({ from, to, amount }) - H->>H: stage = "executing" - H->>P: runExclusive(send) - P->>W: postMessage - W->>W: Build request + execute in VM - H->>H: stage = "proving" - W->>W: Generate ZK proof - H->>H: stage = "submitting" - W->>N: Submit proven transaction - N-->>W: Transaction ID - H->>H: stage = "complete" - H->>P: trigger sync + store refresh - P-->>C: re-render with updated state -``` - -## WASM concurrency safety - -The SDK is fully concurrency-safe out of the box. Multiple React components can issue queries and mutations simultaneously — the SDK serializes all WASM operations internally, so you never need to coordinate access yourself. Hooks can be called freely from any component without worrying about race conditions or conflicting operations. The SDK also handles deduplication of rapid user interactions (e.g., double-clicking a button), ensuring each action is processed exactly once. - -## External signer integration - -The SDK supports third-party wallet providers through a layered context pattern. A single signer provider can sit directly above `MidenProvider`, or multiple signers can be registered via `MultiSignerProvider`: - -```mermaid -flowchart TB - Para["ParaSignerProvider"] --> Multi["MultiSignerProvider
(optional)"] - Turnkey["TurnkeySignerProvider"] --> Multi - MidenFi["MidenFiSignerProvider"] --> Multi - - Multi -->|"forwards active SignerContext"| MP["MidenProvider"] - MP --> App["Your components"] - MP -.->|"creates client with external keystore"| WASM["Web Worker"] -``` - -When an external signer is present, `MidenProvider` automatically adapts its behavior: - -1. **Delegates signing** — transaction signing is handled by the external wallet provider instead of the local keystore -2. **Isolates storage** — each signer gets its own IndexedDB database, so accounts and state from different wallets never collide -3. **Configures account creation** — new accounts are created with the signer's key material and storage preferences - -For multi-signer apps, `MultiSignerProvider` maintains a registry of all `SignerSlot` children and forwards the active signer's context to `MidenProvider`. Users switch signers at runtime via `useMultiSigner().connectSigner(name)`. Single-signer apps can skip `MultiSignerProvider` entirely — a signer provider directly above `MidenProvider` still works. - -Built-in signer packages: `@miden-sdk/use-miden-para-react`, `@miden-sdk/miden-turnkey-react`, `@miden-sdk/miden-wallet-adapter-react`. - -## Configuration - -```tsx - -``` - -The provider also accepts `loadingComponent` and `errorComponent` props for customizing the WASM initialization UI. diff --git a/docs/builder/client/react-client/examples.md b/docs/builder/client/react-client/examples.md deleted file mode 100644 index 1feb84f8..00000000 --- a/docs/builder/client/react-client/examples.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Examples -sidebar_position: 6 ---- - -# Examples - -Code examples for common React SDK patterns, organized by topic. - -## Tutorials - -For guided walkthroughs, see the [Getting started](./get-started/index.md) tutorials: - -- [Set up the provider](./get-started/setup-provider.md) -- [Create a wallet](./get-started/create-wallet.md) -- [Send and receive tokens](./get-started/send-receive.md) -- [External signer](./get-started/external-signer.md) - -## Library reference examples - -Each library reference page contains code examples for its topic: - -### Provider and configuration - -- [MidenProvider setup and useMiden()](./library/provider.md) - -### Account operations - -- [Listing accounts, getting details, creating wallets and faucets](./library/accounts.md) - -### Transaction operations - -- [Sending, consuming, minting, swapping, and custom transactions](./library/transactions.md) - -### Note operations - -- [Listing notes, filtering, and real-time note streaming](./library/notes.md) - -### Sync and waiting - -- [Sync state, waiting for commits and notes, session accounts](./library/sync.md) - -### Signer integration - -- [External signer setup, useSigner, custom signer providers](./library/signers.md) - -### Utilities - -- [Amount formatting, note summaries, attachments, error handling](./library/utilities.md) diff --git a/docs/builder/client/react-client/features.md b/docs/builder/client/react-client/features.md deleted file mode 100644 index 2d236fe6..00000000 --- a/docs/builder/client/react-client/features.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Features -sidebar_position: 2 ---- - -# Features - -The Miden React SDK provides a complete toolkit for building React applications on the Miden rollup. - -### Query hooks - -Read blockchain state with auto-refreshing hooks that update after every sync: `useAccounts`, `useAccount`, `useNotes`, `useNoteStream`, `useSyncState`, `useTransactionHistory`, and `useAssetMetadata`. - -### Mutation hooks - -Build and submit transactions through hooks that manage the full execute → prove → submit lifecycle with built-in loading stages and error handling: `useSend`, `useMultiSend`, `useConsume`, `useMint`, `useSwap`, `useCreateWallet`, `useCreateFaucet`, and `useTransaction`. - -### Automatic state management - -A Zustand store manages all client state — accounts, notes, sync progress, asset metadata — and re-renders components efficiently when data changes. Background auto-sync keeps state fresh (configurable interval, default 15 seconds). - -### Transaction staging - -Every mutation hook exposes a `stage` property that tracks progress through `"idle"` → `"executing"` → `"proving"` → `"submitting"` → `"complete"`, enabling fine-grained UI feedback during long-running operations. - -### External signer integration - -First-class support for third-party wallet providers (Para, Turnkey, MidenFi) through a `SignerContext` that plugs into the provider tree. The SDK handles keystore delegation, account binding, and IndexedDB isolation automatically. - -### WASM concurrency safety - -The SDK serializes all WASM operations through an `AsyncLock` and `runExclusive()` pattern, preventing "recursive use of an object detected" errors that occur when multiple React components access the WASM bridge concurrently. - -### Browser-native - -Like the [TypeScript SDK](../web-client/index.md), all computation (proving, syncing, compilation) runs in a Web Worker off the main thread, keeping the React render loop responsive. diff --git a/docs/builder/client/react-client/get-started/_category_.yml b/docs/builder/client/react-client/get-started/_category_.yml deleted file mode 100644 index c8bcefa2..00000000 --- a/docs/builder/client/react-client/get-started/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Getting Started -position: 3 -collapsed: true diff --git a/docs/builder/client/react-client/get-started/create-wallet.md b/docs/builder/client/react-client/get-started/create-wallet.md deleted file mode 100644 index 851379a8..00000000 --- a/docs/builder/client/react-client/get-started/create-wallet.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Create a wallet -sidebar_position: 2 ---- - -# Create a wallet - -In this tutorial, you'll create a Miden wallet, request tokens from the public faucet, and display the balance — all through React hooks. - -:::info Prerequisites -Complete the [provider setup](./setup-provider.md) first. -::: - -## 1. Create an account - -Use the `useCreateWallet` hook: - -```tsx -import { useCreateWallet, useAccounts } from "@miden-sdk/react-sdk"; - -function CreateWallet() { - const { createWallet, wallet, isCreating, error } = useCreateWallet(); - const { wallets } = useAccounts(); - - if (wallets.length > 0) { - return

; - } - - return ( -
- - {wallet &&
Created: {wallet.id().toString()}
} - {error &&
Error: {error.message}
} -
- ); -} -``` - -## 2. Request tokens from the faucet - -1. Copy the account ID displayed after creation. -2. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). -3. Paste the account ID and click **Send Public Note**. - -:::tip -Use **Send Public Note** — public notes are discoverable via sync, so no file download is needed. -::: - -## 3. Consume the tokens - -After the faucet sends the note, the next auto-sync cycle will discover it. Use `useNotes` and `useConsume` to claim the tokens: - -```tsx -import { useNotes, useConsume } from "@miden-sdk/react-sdk"; - -function ClaimNotes({ accountId }: { accountId: string }) { - const { consumableNoteSummaries } = useNotes({ accountId }); - const { consume, isLoading, stage } = useConsume(); - - if (consumableNoteSummaries.length === 0) { - return
No notes to claim. Waiting for sync...
; - } - - const handleClaim = () => { - const noteIds = consumableNoteSummaries.map((s) => s.id); - consume({ accountId, notes: noteIds }); - }; - - return ( -
-
{consumableNoteSummaries.length} note(s) available
- -
- ); -} -``` - -## 4. Display the balance - -Use `useAccount` to read the wallet's assets: - -```tsx -import { useAccount, formatAssetAmount } from "@miden-sdk/react-sdk"; - -function Balance({ accountId }: { accountId: string }) { - const { account, assets, isLoading } = useAccount(accountId); - - if (isLoading) return
Loading...
; - if (!account) return
Account not found
; - - return ( -
-
Account: {account.bech32id()}
- {assets.map((asset) => ( -
- {asset.symbol ?? asset.assetId}: {formatAssetAmount(asset.amount, asset.decimals)} -
- ))} -
- ); -} -``` - -## Next steps - -- [Send and receive tokens](./send-receive.md) — transfer tokens between accounts diff --git a/docs/builder/client/react-client/get-started/external-signer.md b/docs/builder/client/react-client/get-started/external-signer.md deleted file mode 100644 index 014f828e..00000000 --- a/docs/builder/client/react-client/get-started/external-signer.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: External signer -sidebar_position: 4 ---- - -# External signer - -The React SDK supports third-party wallet providers through a `SignerContext`. When a signer is present, the SDK delegates key management and transaction signing to the external provider instead of the local keystore. - -## Built-in signer packages - -| Package | Provider | Auth method | -|---------|----------|-------------| -| `@miden-sdk/para` | Para | EVM wallets | -| `@miden-sdk/miden-turnkey-react` | Turnkey | Passkey authentication | -| `@miden-sdk/wallet-adapter-react` | MidenFi | Native wallet adapter | - -## Using a built-in signer - -Wrap `MidenProvider` with the signer provider: - -```tsx -import { MidenProvider } from "@miden-sdk/react-sdk"; -import { ParaSignerProvider } from "@miden-sdk/para"; - -function App() { - return ( - - - - - - ); -} -``` - -Inside your components, use the `useSigner` hook to access connection state: - -```tsx -import { useSigner } from "@miden-sdk/react-sdk"; - -function ConnectButton() { - const { isConnected, connect, disconnect, name } = useSigner(); - - if (isConnected) { - return ; - } - - return ; -} -``` - -All other hooks (`useAccounts`, `useSend`, etc.) work the same way — the SDK routes signing through the signer automatically. - -## Custom signer - -To integrate a wallet provider that doesn't have a built-in package, provide a `SignerContext` directly: - -```tsx -import { MidenProvider, SignerContext } from "@miden-sdk/react-sdk"; - -function App() { - const signerValue = { - name: "MyWallet", - storeName: `mywallet_${userAddress}`, - isConnected: true, - accountConfig: { - publicKeyCommitment: userPublicKeyCommitment, - storageMode: "private", - accountType: "RegularAccountUpdatableCode", - }, - signCb: async (pubKey, signingInputs) => { - // Route to your signing backend - return signature; - }, - connect: async () => { /* auth flow */ }, - disconnect: async () => { /* logout */ }, - }; - - return ( - - - - - - ); -} -``` - -Key properties: - -| Property | Description | -|----------|-------------| -| `signCb` | Async function that receives a public key and signing inputs, returns a signature | -| `accountConfig` | Account creation parameters (storage mode, type, optional custom components) | -| `storeName` | IndexedDB isolation key — use a unique value per user/wallet to prevent data collisions | - -## Next steps - -- [Library reference](../library/index.md) — detailed hooks and API documentation diff --git a/docs/builder/client/react-client/get-started/index.md b/docs/builder/client/react-client/get-started/index.md deleted file mode 100644 index 683d4570..00000000 --- a/docs/builder/client/react-client/get-started/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Getting started -sidebar_position: 0 ---- - -# Getting started - -This section walks you through building a basic Miden wallet interface with the React SDK — from provider setup to sending tokens. - -By the end of these tutorials, you will have: - -- Set up `MidenProvider` and connected to the Miden testnet -- Created a wallet and displayed its balance -- Sent and received tokens between accounts -- Integrated an external wallet signer - -## Prerequisites - -- [Node.js](https://nodejs.org/) v18 or later -- React 18+ project (e.g., via `create-react-app`, Vite, or Next.js) -- The SDK installed — see [Installation](../install.md) - -## Tutorials - -1. [Set up the provider](./setup-provider.md) — configure `MidenProvider` and verify the connection -2. [Create a wallet](./create-wallet.md) — create an account, request testnet tokens, and display the balance -3. [Send and receive tokens](./send-receive.md) — transfer tokens between accounts using hooks -4. [External signer](./external-signer.md) — integrate a third-party wallet provider diff --git a/docs/builder/client/react-client/get-started/send-receive.md b/docs/builder/client/react-client/get-started/send-receive.md deleted file mode 100644 index b8ba2b9b..00000000 --- a/docs/builder/client/react-client/get-started/send-receive.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Send and receive tokens -sidebar_position: 3 ---- - -# Send and receive tokens - -In this tutorial, you'll send tokens between two accounts using the `useSend` and `useConsume` hooks. - -:::info Prerequisites -- Complete the [Create a wallet](./create-wallet.md) tutorial first. -- You should have a funded wallet. -::: - -## 1. Create a second account - -```tsx -import { useCreateWallet } from "@miden-sdk/react-sdk"; - -function CreateRecipient() { - const { createWallet, wallet, isCreating } = useCreateWallet(); - - return ( -
- - {wallet &&
Recipient: {wallet.id().toString()}
} -
- ); -} -``` - -## 2. Send tokens - -Use the `useSend` hook. The `stage` property gives real-time feedback on the transaction lifecycle: - -```tsx -import { useSend } from "@miden-sdk/react-sdk"; - -function SendForm({ from, faucetId }: { from: string; faucetId: string }) { - const { send, isLoading, stage, error, result } = useSend(); - const [to, setTo] = useState(""); - const [amount, setAmount] = useState(""); - - const handleSend = () => { - send({ - from, - to, - assetId: faucetId, - amount: BigInt(amount), - noteType: "public", - }); - }; - - return ( -
- setTo(e.target.value)} /> - setAmount(e.target.value)} /> - - {result &&
Transaction: {result.txId.toString()}
} - {error &&
Error: {error.message}
} -
- ); -} -``` - -## 3. Receive and consume on the recipient - -After the next sync cycle, the public note appears for the recipient. Consume it: - -```tsx -import { useNotes, useConsume, formatNoteSummary } from "@miden-sdk/react-sdk"; - -function ReceiveNotes({ accountId }: { accountId: string }) { - const { consumableNoteSummaries } = useNotes({ accountId }); - const { consume, isLoading, stage } = useConsume(); - - return ( -
- {consumableNoteSummaries.map((note) => ( -
- {formatNoteSummary(note)} - -
- ))} -
- ); -} -``` - -## Private transfers - -To send a private note instead, set `noteType: "private"`: - -```tsx -await send({ - from: senderAccountId, - to: recipientAccountId, - assetId: faucetId, - amount: 50n, - noteType: "private", -}); -``` - -For cross-client private transfers, the note transport network delivers the note to the recipient. See the [TypeScript private transfer tutorial](../../web-client/get-started/p2p-private.md) for details on the underlying flow. - -## Next steps - -- [External signer](./external-signer.md) — integrate a third-party wallet provider diff --git a/docs/builder/client/react-client/get-started/setup-provider.md b/docs/builder/client/react-client/get-started/setup-provider.md deleted file mode 100644 index 8990b33e..00000000 --- a/docs/builder/client/react-client/get-started/setup-provider.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Set up the provider -sidebar_position: 1 ---- - -# Set up the provider - -Every React app using the Miden SDK needs a `MidenProvider` at the root. It initializes the WASM client, manages background sync, and provides context to all hooks. - -## 1. Wrap your app - -```tsx -import { MidenProvider } from "@miden-sdk/react-sdk"; - -function App() { - return ( - Loading Miden SDK...} - errorComponent={(error) =>
Failed to initialize: {error.message}
} - > - -
- ); -} -``` - -The provider initializes the WASM binary, creates a Web Worker, and connects to the Miden testnet. Until initialization completes, `loadingComponent` is shown. - -## 2. Check the connection - -Use `useMiden()` inside any child component to access the client state: - -```tsx -import { useMiden, useSyncState } from "@miden-sdk/react-sdk"; - -function Status() { - const { isReady } = useMiden(); - const { syncHeight } = useSyncState(); - - if (!isReady) return null; - - return
Connected — synced to block {syncHeight}
; -} -``` - -## 3. Configuration options - -```tsx - -``` - -:::tip -Auto-sync runs in the background at the configured interval. You can also trigger a manual sync with the `sync()` function from `useSyncState()` or `useMiden()`. -::: - -## Next steps - -- [Create a wallet](./create-wallet.md) — create an account and request testnet tokens diff --git a/docs/builder/client/react-client/index.md b/docs/builder/client/react-client/index.md deleted file mode 100644 index ee3be5fa..00000000 --- a/docs/builder/client/react-client/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: React ---- - -# Overview - -The Miden React SDK (`@miden-sdk/react-sdk`) provides React hooks, context providers, and Zustand-based state management for building Miden-powered applications. It follows conventions established by libraries like TanStack Query and wagmi — query hooks for reading data, mutation hooks for transactions, and a provider for client lifecycle. - -- [Installation](./install.md) — install the SDK and peer dependencies -- [Features](./features.md) — what the SDK provides -- [Getting started](./get-started/index.md) — step-by-step tutorials -- [Design](./design.md) — architecture and patterns -- [Library reference](./library/index.md) — detailed hooks and API documentation -- [Examples](./examples.md) — practical code examples diff --git a/docs/builder/client/react-client/install.md b/docs/builder/client/react-client/install.md deleted file mode 100644 index 089bc040..00000000 --- a/docs/builder/client/react-client/install.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Installation -sidebar_position: 1 ---- - -# Installation - -## Prerequisites - -- [Node.js](https://nodejs.org/) v18 or later -- React 18+ (`react` and `react-dom`) -- A WASM-capable browser (Chrome, Firefox, Safari, Edge) - -## Install the SDK - -```bash -npm install @miden-sdk/react-sdk @miden-sdk/wasm-bridge -# or -yarn add @miden-sdk/react-sdk @miden-sdk/wasm-bridge -``` - -`@miden-sdk/wasm-bridge` is a peer dependency that provides the WASM bridge and core bindings. - -## Verify the installation - -Wrap your app in `MidenProvider` and check that initialization succeeds: - -```tsx -import { MidenProvider, useMiden } from "@miden-sdk/react-sdk"; - -function Status() { - const { isReady, isInitializing, error } = useMiden(); - - if (isInitializing) return
Initializing WASM...
; - if (error) return
Error: {error.message}
; - if (isReady) return
Miden SDK ready
; - return null; -} - -function App() { - return ( - - - - ); -} -``` - -If you see "Miden SDK ready", you're good to go. diff --git a/docs/builder/client/react-client/library/_category_.yml b/docs/builder/client/react-client/library/_category_.yml deleted file mode 100644 index 57175926..00000000 --- a/docs/builder/client/react-client/library/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Library -position: 5 -collapsed: true diff --git a/docs/builder/client/react-client/library/accounts.md b/docs/builder/client/react-client/library/accounts.md deleted file mode 100644 index 1e8f8465..00000000 --- a/docs/builder/client/react-client/library/accounts.md +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Accounts -sidebar_position: 2 ---- - -# Accounts - -## useAccounts() - -List all tracked accounts, automatically categorized into wallets and faucets. - -```tsx -import { useAccounts } from "@miden-sdk/react-sdk"; - -function AccountList() { - const { accounts, wallets, faucets, isLoading, error, refetch } = useAccounts(); - - return ( -
-

Wallets ({wallets.length})

- {wallets.map((w) => ( -
{w.id().toString()}
- ))} -

Faucets ({faucets.length})

- {faucets.map((f) => ( -
{f.id().toString()}
- ))} -
- ); -} -``` - -Auto-fetches on mount and refreshes after each sync cycle. - -## useAccount(accountId) - -Get full account details including vault assets enriched with metadata (symbol, decimals). - -```tsx -import { useAccount, formatAssetAmount } from "@miden-sdk/react-sdk"; - -function AccountDetails({ accountId }: { accountId: string }) { - const { account, assets, isLoading, getBalance } = useAccount(accountId); - - if (isLoading) return
Loading...
; - if (!account) return
Not found
; - - return ( -
-
Address: {account.bech32id()}
-
Nonce: {account.nonce().toString()}
- {assets.map((asset) => ( -
- {asset.symbol ?? asset.assetId}: {formatAssetAmount(asset.amount, asset.decimals)} -
- ))} -
- ); -} -``` - -### Return value - -| Property | Type | Description | -|----------|------|-------------| -| `account` | `Account \| null` | Full account object | -| `assets` | `AssetWithMetadata[]` | Vault assets with symbol and decimals | -| `isLoading` | `boolean` | Loading state | -| `error` | `Error \| null` | Error state | -| `refetch` | `() => void` | Manual refresh | -| `getBalance` | `(assetId: string) => bigint` | Get balance for a specific asset | - -## useCreateWallet() - -Create a new wallet account. - -```tsx -import { useCreateWallet } from "@miden-sdk/react-sdk"; - -const { createWallet, wallet, isCreating, error, reset } = useCreateWallet(); - -const account = await createWallet({ - storageMode: "private", // "private" | "public" (default: "private") - mutable: true, // Code updatable (default: true) - authScheme: AuthScheme.AuthRpoFalcon512, // default - initSeed: new Uint8Array(32), // Optional deterministic seed -}); -``` - -## useCreateFaucet() - -Create a new faucet account for minting tokens. - -```tsx -import { useCreateFaucet } from "@miden-sdk/react-sdk"; - -const { createFaucet, faucet, isCreating, error, reset } = useCreateFaucet(); - -const account = await createFaucet({ - tokenSymbol: "TEST", - decimals: 8, // default: 8 - maxSupply: 10_000_000n, - storageMode: "public", // default for faucets -}); -``` - -## useImportAccount() - -Import an account by file, ID, or seed. - -```tsx -import { useImportAccount } from "@miden-sdk/react-sdk"; - -const { importAccount, account, isImporting, error, reset } = useImportAccount(); - -// Import by file -await importAccount({ type: "file", file: accountFile }); - -// Import by ID (public accounts only) -await importAccount({ type: "id", accountId: "0x1234..." }); - -// Import by seed (public accounts only) -await importAccount({ type: "seed", seed: initSeed, mutable: true }); -``` - -## useAssetMetadata(assetIds) - -Fetch token metadata (symbol, decimals) for a list of faucet IDs. Results are cached globally. - -```tsx -import { useAssetMetadata } from "@miden-sdk/react-sdk"; - -function TokenInfo({ assetIds }: { assetIds: string[] }) { - const { assetMetadata } = useAssetMetadata(assetIds); - - return ( -
- {assetIds.map((id) => { - const meta = assetMetadata.get(id); - return
{meta?.symbol ?? id} ({meta?.decimals ?? "?"} decimals)
; - })} -
- ); -} -``` diff --git a/docs/builder/client/react-client/library/index.md b/docs/builder/client/react-client/library/index.md deleted file mode 100644 index 18019827..00000000 --- a/docs/builder/client/react-client/library/index.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Library -sidebar_position: 0 ---- - -# Library - -The React SDK provides hooks organized into two categories: **query hooks** that read state, and **mutation hooks** that execute transactions. Both integrate with the Zustand store for automatic re-rendering. - -## Query hooks - -| Hook | Purpose | Reference | -|------|---------|-----------| -| `useAccounts()` | List all accounts, categorized into wallets and faucets | [Accounts](./accounts.md) | -| `useAccount(id)` | Get full account details, assets, and balance | [Accounts](./accounts.md) | -| `useNotes(filter?)` | List and filter notes with consumability info | [Notes](./notes.md) | -| `useNoteStream(options?)` | Temporal note tracking with built-in filtering | [Notes](./notes.md) | -| `useSyncState()` | Sync progress, block height, manual sync trigger | [Sync](./sync.md) | -| `useTransactionHistory(options?)` | Transaction history with status tracking | [Transactions](./transactions.md) | -| `useAssetMetadata(assetIds)` | Token metadata (symbol, decimals) by faucet ID | [Accounts](./accounts.md) | - -## Mutation hooks - -| Hook | Purpose | Reference | -|------|---------|-----------| -| `useCreateWallet()` | Create a new wallet account | [Accounts](./accounts.md) | -| `useCreateFaucet()` | Create a new faucet account | [Accounts](./accounts.md) | -| `useImportAccount()` | Import an account by file, ID, or seed | [Accounts](./accounts.md) | -| `useSend()` | Send tokens to another account | [Transactions](./transactions.md) | -| `useMultiSend()` | Send tokens to multiple recipients | [Transactions](./transactions.md) | -| `useInternalTransfer()` | Transfer between accounts in the same client | [Transactions](./transactions.md) | -| `useConsume()` | Consume specific notes | [Transactions](./transactions.md) | -| `useMint()` | Mint tokens from a faucet | [Transactions](./transactions.md) | -| `useSwap()` | Swap tokens between two faucets | [Transactions](./transactions.md) | -| `useTransaction()` | Execute an arbitrary transaction request | [Transactions](./transactions.md) | -| `useWaitForCommit()` | Wait for a transaction to be committed | [Sync](./sync.md) | -| `useWaitForNotes()` | Wait for notes to arrive for an account | [Sync](./sync.md) | - -## Provider and context - -| Hook/Component | Purpose | Reference | -|----------------|---------|-----------| -| `MidenProvider` | Root provider — client lifecycle, auto-sync, WASM access | [Provider](./provider.md) | -| `useMiden()` | Access client, sync function, `runExclusive()` | [Provider](./provider.md) | -| `useSigner()` | Access external signer connection state | [Signers](./signers.md) | -| `useMultiSigner()` | List, connect, and switch between multiple signers | [Signers](./signers.md) | -| `MultiSignerProvider` | Registry for multiple signer providers | [Signers](./signers.md) | -| `SignerSlot` | Registers a signer into the multi-signer registry | [Signers](./signers.md) | -| `SignerContext` | Context for custom signer integration | [Signers](./signers.md) | - -## Utilities - -| Utility | Purpose | Reference | -|---------|---------|-----------| -| `formatAssetAmount()` / `parseAssetAmount()` | Amount formatting and parsing | [Utilities](./utilities.md) | -| `getNoteSummary()` / `formatNoteSummary()` | Note summary extraction and display | [Utilities](./utilities.md) | -| `readNoteAttachment()` / `createNoteAttachment()` | Note attachment encoding/decoding | [Utilities](./utilities.md) | -| `normalizeAccountId()` / `accountIdsEqual()` | Account ID normalization and comparison | [Utilities](./utilities.md) | -| `MidenError` / `wrapWasmError()` | Typed error handling | [Utilities](./utilities.md) | diff --git a/docs/builder/client/react-client/library/notes.md b/docs/builder/client/react-client/library/notes.md deleted file mode 100644 index 9a403358..00000000 --- a/docs/builder/client/react-client/library/notes.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Notes -sidebar_position: 4 ---- - -# Notes - -## useNotes(options?) - -List and filter notes with consumability information. - -```tsx -import { useNotes, formatNoteSummary } from "@miden-sdk/react-sdk"; - -function NoteList({ accountId }: { accountId: string }) { - const { - notes, // All input notes - consumableNotes, // Notes ready to consume - noteSummaries, // Enriched with sender + assets - consumableNoteSummaries, // Consumable notes with summaries - isLoading, - error, - refetch, - } = useNotes({ accountId }); - - return ( -
- {consumableNoteSummaries.map((summary) => ( -
{formatNoteSummary(summary)}
- ))} -
- ); -} -``` - -### Filter options - -| Property | Type | Description | -|----------|------|-------------| -| `status` | `string` | `"all"` \| `"committed"` \| `"consumed"` \| `"expected"` \| `"processing"` | -| `accountId` | `string` | Filter consumable notes for a specific account | -| `sender` | `string` | Filter by sender account | -| `excludeIds` | `Set` | Exclude specific note IDs | - -Smart refetch: the hook only updates the Zustand store if note IDs actually changed, preventing unnecessary re-renders. - -## useNoteStream(options?) - -Temporal note tracking with built-in filtering. Designed for real-time UIs (e.g., payment notifications, trading interfaces) where you need to track when notes arrive and handle them progressively. - -```tsx -import { useNoteStream } from "@miden-sdk/react-sdk"; - -function NotificationFeed({ accountId }: { accountId: string }) { - const { - notes, // StreamedNote[] matching all filters - latest, // Most recent note - markHandled, // Exclude noteId from future renders - markAllHandled, // Mark all current notes as handled - snapshot, // Get { ids: Set, timestamp } for phase transitions - isLoading, - } = useNoteStream({ - status: "committed", - sender: faucetId, - since: Date.now() - 60_000, // Last minute only - amountFilter: (amount) => amount > 0n, - }); - - return ( -
- {notes.map((note) => ( -
- {note.amount.toString()} from {note.sender} - -
- ))} -
- ); -} -``` - -### StreamedNote - -| Property | Type | Description | -|----------|------|-------------| -| `id` | `string` | Note ID | -| `sender` | `string` | Sender address (bech32) | -| `amount` | `bigint` | Primary fungible asset amount | -| `assets` | `NoteAsset[]` | All assets in the note | -| `record` | `InputNoteRecord` | Full note record | -| `firstSeenAt` | `number` | When the SDK first observed this note (ms) | -| `attachment` | `bigint[] \| null` | Pre-decoded note attachment | - -### Options - -| Property | Type | Description | -|----------|------|-------------| -| `status` | `string` | Filter by note status | -| `sender` | `string` | Filter by sender account | -| `since` | `number` | Only notes seen after this timestamp (ms) | -| `excludeIds` | `Set` | Exclude specific note IDs | -| `amountFilter` | `(amount: bigint) => boolean` | Custom amount filter | diff --git a/docs/builder/client/react-client/library/provider.md b/docs/builder/client/react-client/library/provider.md deleted file mode 100644 index d67e86c5..00000000 --- a/docs/builder/client/react-client/library/provider.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Provider -sidebar_position: 1 ---- - -# Provider - -## MidenProvider - -The root provider that initializes the WASM client and provides context to all hooks. - -```tsx -import { MidenProvider } from "@miden-sdk/react-sdk"; - -Loading...} - errorComponent={(error) =>
Error: {error.message}
} -> - -
-``` - -### Props - -| Prop | Type | Description | -|------|------|-------------| -| `config` | `MidenConfig` | Client configuration (see below) | -| `loadingComponent` | `ReactNode` | Shown during WASM initialization | -| `errorComponent` | `ReactNode \| (error: Error) => ReactNode` | Shown if initialization fails | -| `children` | `ReactNode` | Your application | - -### MidenConfig - -| Property | Type | Default | Description | -|----------|------|---------|-------------| -| `rpcUrl` | `string` | — | `"devnet"` \| `"testnet"` \| `"localhost"` \| custom URL | -| `autoSyncInterval` | `number` | `15000` | Sync interval in ms. Set `0` to disable. | -| `prover` | `string` | `"local"` | `"local"` \| `"devnet"` \| `"testnet"` \| custom URL | -| `proverTimeoutMs` | `number` | — | Timeout for remote prover requests | -| `noteTransportUrl` | `string` | — | Note transport network endpoint | -| `seed` | `Uint8Array` | — | 32-byte seed for deterministic RNG | - -## useMiden() - -Access the client instance and core utilities. - -```tsx -import { useMiden } from "@miden-sdk/react-sdk"; - -function MyComponent() { - const { - client, // WebClient instance (null until ready) - isReady, // Client fully initialized - isInitializing, // Initialization in progress - error, // Initialization error - sync, // Manual sync function - runExclusive, // Execute WASM operations exclusively - } = useMiden(); - - // Use runExclusive for direct WASM access - const doSomething = async () => { - await runExclusive(async () => { - const account = await client.getAccount(accountId); - // WASM pointers only valid inside this callback - }); - }; -} -``` - -### `runExclusive(fn)` - -Queues a function to run with exclusive WASM access. Prevents concurrent WASM calls that would cause errors. All mutation hooks use this internally. - -```tsx -const { runExclusive } = useMiden(); - -// Safe — operations are serialized -await runExclusive(async () => { - await client.someWasmOperation(); -}); -``` - -:::warning -WASM object pointers (like `AccountId`, `NoteId`) are only valid within the `runExclusive` callback. Convert them to strings or numbers before returning. -::: diff --git a/docs/builder/client/react-client/library/signers.md b/docs/builder/client/react-client/library/signers.md deleted file mode 100644 index f6ddf4af..00000000 --- a/docs/builder/client/react-client/library/signers.md +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Signers -sidebar_position: 6 ---- - -# Signers - -The SDK supports external wallet providers through a `SignerContext` that plugs into the provider tree above `MidenProvider`. - -## useSigner() - -Access the current signer's connection state. - -```tsx -import { useSigner } from "@miden-sdk/react-sdk"; - -function WalletButton() { - const { isConnected, connect, disconnect, name } = useSigner(); - - if (isConnected) { - return ; - } - - return ; -} -``` - -### Return value - -| Property | Type | Description | -|----------|------|-------------| -| `isConnected` | `boolean` | Whether the signer is connected | -| `connect` | `() => Promise` | Trigger the signer's auth flow | -| `disconnect` | `() => Promise` | Disconnect the signer | -| `name` | `string` | Display name (e.g., "Para", "Turnkey") | - -## SignerContext - -The context interface that signer providers must implement. - -```tsx -interface SignerContextValue { - signCb: (pubKey: Uint8Array, signingInputs: Uint8Array) => Promise; - accountConfig: SignerAccountConfig; - storeName: string; - name: string; - isConnected: boolean; - connect: () => Promise; - disconnect: () => Promise; -} -``` - -| Property | Description | -|----------|-------------| -| `signCb` | Signing function — receives public key and signing inputs, returns signature bytes | -| `accountConfig` | Account creation params: `publicKeyCommitment`, `storageMode`, `accountType`, optional `customComponents` | -| `storeName` | IndexedDB isolation key — must be unique per user/wallet to prevent data collisions | -| `name` | Display name shown in UI | - -## Built-in signer packages - -| Package | Provider | Usage | -|---------|----------|-------| -| `@miden-sdk/use-miden-para-react` | Para (EVM wallets) | `` | -| `@miden-sdk/miden-turnkey-react` | Turnkey (passkeys) | `` | -| `@miden-sdk/miden-wallet-adapter-react` | MidenFi (native) | `` | - -## How it works - -When `MidenProvider` detects a `SignerContext` above it: - -1. Creates the client with `WebClient.createClientWithExternalKeystore()` instead of the default constructor -2. Routes all signing operations to the signer's `signCb` -3. Isolates IndexedDB storage using the signer's `storeName` -4. Binds account creation to the signer's `accountConfig` - -All hooks (`useCreateWallet`, `useSend`, etc.) work identically regardless of whether a local or external keystore is used. - -## Multi-signer support - -For dapps that support multiple wallet providers, wrap them with `MultiSignerProvider` and place a `SignerSlot` inside each one. Users can then switch between signers at runtime. - -### Setup - -```tsx -import { - MidenProvider, - MultiSignerProvider, - SignerSlot, -} from "@miden-sdk/react-sdk"; -import { ParaSignerProvider } from "@miden-sdk/use-miden-para-react"; -import { TurnkeySignerProvider } from "@miden-sdk/miden-turnkey-react"; -import { MidenFiSignerProvider } from "@miden-sdk/miden-wallet-adapter-react"; - -function App() { - return ( - - - - - - - - - - - - - - - ); -} -``` - -`MultiSignerProvider` is optional — single-signer apps continue to work with a signer provider directly above `MidenProvider`. - -### useMultiSigner() - -List registered signers and switch between them. - -```tsx -import { useMultiSigner } from "@miden-sdk/react-sdk"; - -function SignerSelector() { - const multiSigner = useMultiSigner(); - - return ( -
- {multiSigner?.signers.map((s) => ( - - ))} - -
- ); -} -``` - -### Return value - -`useMultiSigner()` returns `null` when used outside a `MultiSignerProvider`. - -| Property | Type | Description | -|----------|------|-------------| -| `signers` | `SignerContextValue[]` | All registered signer providers | -| `activeSigner` | `SignerContextValue \| null` | The currently connected signer, or `null` for local keystore mode | -| `connectSigner` | `(name: string) => Promise` | Switch to a signer by name — disconnects the previous signer and calls `connect()` on the new one | -| `disconnectSigner` | `() => Promise` | Disconnect the active signer and revert to local keystore mode | - -### SignerSlot - -A render-less component that registers its nearest ancestor's `SignerContext` into the `MultiSignerProvider` registry. Place one inside each signer provider: - -```tsx - - - -``` - -### How it works - -1. Each `SignerSlot` registers its parent signer into a shared registry -2. `MultiSignerProvider` forwards the active signer's `SignerContext` down to `MidenProvider` -3. When `connectSigner(name)` is called, the previous signer is disconnected and the new one is connected -4. When `disconnectSigner()` is called, `MidenProvider` sees `null` and reverts to local keystore mode -5. `MidenProvider` reinitializes the client with the appropriate keystore whenever the active signer changes diff --git a/docs/builder/client/react-client/library/sync.md b/docs/builder/client/react-client/library/sync.md deleted file mode 100644 index 052cb3c4..00000000 --- a/docs/builder/client/react-client/library/sync.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Sync -sidebar_position: 5 ---- - -# Sync - -## useSyncState() - -Access sync progress and trigger manual synchronization. - -```tsx -import { useSyncState } from "@miden-sdk/react-sdk"; - -function SyncStatus() { - const { syncHeight, isSyncing, lastSyncTime, error, sync } = useSyncState(); - - return ( -
-
Block: {syncHeight}
-
Last sync: {lastSyncTime ? new Date(lastSyncTime).toLocaleTimeString() : "never"}
- - {error &&
Sync error: {error.message}
} -
- ); -} -``` - -:::tip -Auto-sync runs in the background at the interval configured in `MidenProvider` (default: 15 seconds). Use `sync()` for manual triggers. -::: - -## useWaitForCommit() - -Wait for a transaction to be committed on chain. Polls until the transaction status changes or times out. - -```tsx -import { useWaitForCommit } from "@miden-sdk/react-sdk"; - -const { mutate: waitForCommit, isLoading, error } = useWaitForCommit(); - -await waitForCommit({ - transactionId: txId, - timeoutMs: 10000, // default: 10000 - intervalMs: 1000, // default: 1000 -}); -``` - -## useWaitForNotes() - -Wait for a minimum number of consumable notes to arrive for an account. Useful after requesting faucet tokens or receiving a transfer. - -```tsx -import { useWaitForNotes } from "@miden-sdk/react-sdk"; - -const { mutate: waitForNotes, isLoading, error } = useWaitForNotes(); - -await waitForNotes({ - accountId: walletId, - minCount: 1, // default: 1 - timeoutMs: 10000, // default: 10000 - intervalMs: 1000, // default: 1000 -}); -``` - -## useSessionAccount() - -Manage a temporary session wallet lifecycle: create → fund → consume → ready. Persists state in localStorage for recovery across page reloads. - -```tsx -import { useSessionAccount } from "@miden-sdk/react-sdk"; - -const { - initialize, // Start the create → fund → consume flow - sessionAccountId, // bech32 ID when ready, null otherwise - isReady, // true when funded and ready to use - step, // "idle" | "creating" | "funding" | "consuming" | "ready" - error, - reset, -} = useSessionAccount({ - fund: async (sessionAccountId) => { - // Your funding logic — e.g., send from main wallet - await send({ from: mainWalletId, to: sessionAccountId, assetId, amount: 100n }); - }, - assetId: faucetId, - pollIntervalMs: 3000, // default: 3000 - maxWaitMs: 60000, // default: 60000 - storagePrefix: "miden-session", // localStorage key prefix -}); - -// Start the session -await initialize(); -``` diff --git a/docs/builder/client/react-client/library/transactions.md b/docs/builder/client/react-client/library/transactions.md deleted file mode 100644 index d81a003e..00000000 --- a/docs/builder/client/react-client/library/transactions.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Transactions -sidebar_position: 3 ---- - -# Transactions - -All transaction hooks follow the same pattern: they return a mutation function, a `result`, loading state, a `stage` for progress tracking, and an `error`. Transactions auto-sync before executing (unless `skipSync: true`) and refresh the store on completion. - -### Transaction stages - -Every mutation hook exposes a `stage` property: - -`"idle"` → `"executing"` → `"proving"` → `"submitting"` → `"complete"` - -## useSend() - -Send tokens to another account. - -```tsx -import { useSend } from "@miden-sdk/react-sdk"; - -const { send, result, isLoading, stage, error, reset } = useSend(); - -await send({ - from: senderAccountId, - to: recipientAccountId, - assetId: faucetId, - amount: 100n, - noteType: "private", // "private" | "public" (default: "private") - recallHeight: 100, // Optional: block height for reclaim - timelockHeight: 90, // Optional: block height for timelock - attachment: [1n, 2n, 3n], // Optional: arbitrary data payload - skipSync: false, // Skip pre-sync (default: false) - sendAll: false, // Send entire balance (default: false) -}); -``` - -`result` contains `{ txId, note }` on success. - -## useMultiSend() - -Send tokens to multiple recipients in a single transaction. - -```tsx -import { useMultiSend } from "@miden-sdk/react-sdk"; - -const { mutate: multiSend, isLoading, stage, error } = useMultiSend(); - -await multiSend({ - from: senderAccountId, - assetId: faucetId, - recipients: [ - { to: "0xrecipient1...", amount: 50n }, - { to: "0xrecipient2...", amount: 30n, noteType: "public" }, - ], -}); -``` - -## useInternalTransfer() - -Transfer tokens between accounts managed by the same client. - -```tsx -import { useInternalTransfer } from "@miden-sdk/react-sdk"; - -const { mutate: transfer, isLoading, stage, error } = useInternalTransfer(); - -const { createTransactionId, consumeTransactionId, noteId } = await transfer({ - from: senderAccountId, - to: recipientAccountId, - assetId: faucetId, - amount: 100n, -}); -``` - -Also supports chained transfers through multiple accounts: - -```tsx -await transfer({ - from: senderAccountId, - recipients: [account1, account2, account3], // Pass-through chain - assetId: faucetId, - amount: 100n, -}); -``` - -## useConsume() - -Consume specific notes to receive their assets. - -```tsx -import { useConsume } from "@miden-sdk/react-sdk"; - -const { consume, result, isLoading, stage, error, reset } = useConsume(); - -await consume({ - accountId: walletId, - notes: [noteId1, noteId2], // Hex strings, NoteId objects, or InputNoteRecords -}); -``` - -## useMint() - -Mint tokens from a faucet. - -```tsx -import { useMint } from "@miden-sdk/react-sdk"; - -const { mint, result, isLoading, stage, error, reset } = useMint(); - -await mint({ - targetAccountId: recipientId, - faucetId: faucetId, - amount: 1000n, - noteType: "public", // default: "public" -}); -``` - -## useSwap() - -Swap tokens between two faucets. - -```tsx -import { useSwap } from "@miden-sdk/react-sdk"; - -const { swap, result, isLoading, stage, error, reset } = useSwap(); - -await swap({ - accountId: walletId, - offeredFaucetId: faucetA, - offeredAmount: 100n, - requestedFaucetId: faucetB, - requestedAmount: 200n, - noteType: "public", -}); -``` - -## useTransaction() - -Execute an arbitrary `TransactionRequest` — the escape hatch for custom transactions. - -```tsx -import { useTransaction } from "@miden-sdk/react-sdk"; - -const { execute, result, isLoading, stage, error, reset } = useTransaction(); - -// With a static request -await execute({ - accountId: walletId, - request: transactionRequest, -}); - -// With a factory function (receives the client for dynamic building) -await execute({ - accountId: walletId, - request: async (client) => { - // Build request dynamically - return new TransactionRequestBuilder() - .withCustomScript(script) - .build(); - }, -}); -``` - -## useTransactionHistory() - -Query transaction history with optional filtering. - -```tsx -import { useTransactionHistory } from "@miden-sdk/react-sdk"; - -// All transactions -const { records, isLoading } = useTransactionHistory(); - -// Single transaction by ID -const { record, status } = useTransactionHistory({ id: txId }); -// status: "pending" | "committed" | "discarded" - -// Filtered -const { records } = useTransactionHistory({ - filter: TransactionFilter.Uncommitted, - refreshOnSync: true, -}); -``` diff --git a/docs/builder/client/react-client/library/utilities.md b/docs/builder/client/react-client/library/utilities.md deleted file mode 100644 index 6e109fc7..00000000 --- a/docs/builder/client/react-client/library/utilities.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Utilities -sidebar_position: 7 ---- - -# Utilities - -## Amount formatting - -```tsx -import { formatAssetAmount, parseAssetAmount } from "@miden-sdk/react-sdk"; - -// bigint + decimals → display string -formatAssetAmount(1000000n, 8); // "0.01" -formatAssetAmount(100000000n, 8); // "1" - -// display string + decimals → bigint -parseAssetAmount("0.01", 8); // 1000000n -parseAssetAmount("1.5", 8); // 150000000n -``` - -## Note summaries - -```tsx -import { getNoteSummary, formatNoteSummary } from "@miden-sdk/react-sdk"; - -// Extract summary from an InputNoteRecord -const summary = getNoteSummary(note); -// { id, assets: NoteAsset[], sender?: string } - -// Format for display -formatNoteSummary(summary); // "1.5 TOKEN" or "1.5 TOKEN from miden1qy35..." -``` - -## Note attachments - -```tsx -import { readNoteAttachment, createNoteAttachment } from "@miden-sdk/react-sdk"; - -// Read pre-decoded attachment from a note -const attachment = readNoteAttachment(note); -// { values: bigint[], kind: "word" | "array" } | null - -// Create attachment for sending (≤4 values → word, >4 → array) -const data = createNoteAttachment([100n, 200n, 300n]); - -// Use in useSend: -await send({ from, to, assetId, amount: 50n, attachment: [100n, 200n] }); -``` - -## Account ID utilities - -```tsx -import { normalizeAccountId, accountIdsEqual, toBech32AccountId } from "@miden-sdk/react-sdk"; - -// Normalize hex or bech32 to consistent format -normalizeAccountId("0x1234..."); // normalized bech32 - -// Compare account IDs regardless of format -accountIdsEqual("0x1234...", "miden1qy35..."); // true - -// Convert to bech32 -toBech32AccountId("0x1234..."); // "miden1qy35..." -``` - -## Error handling - -The SDK wraps WASM errors into typed `MidenError` objects with actionable error codes. - -```tsx -import { MidenError, wrapWasmError } from "@miden-sdk/react-sdk"; - -try { - await send({ from, to, assetId, amount: 50n }); -} catch (err) { - if (err instanceof MidenError) { - switch (err.code) { - case "SEND_BUSY": - // Transaction already in progress - break; - case "WASM_SYNC_REQUIRED": - // Client needs to sync first - break; - case "WASM_NOT_INITIALIZED": - // Client not ready yet - break; - } - } -} -``` - -### Error codes - -| Code | Meaning | -|------|---------| -| `WASM_CLASS_MISMATCH` | WASM object type mismatch | -| `WASM_POINTER_CONSUMED` | WASM pointer already freed | -| `WASM_NOT_INITIALIZED` | Client not initialized | -| `WASM_SYNC_REQUIRED` | Client needs to sync | -| `SEND_BUSY` | A send operation is already in progress | -| `OPERATION_BUSY` | Another mutation is in progress | -| `UNKNOWN` | Unrecognized error | - -## Storage management - -```tsx -import { clearMidenStorage, migrateStorage } from "@miden-sdk/react-sdk"; - -// Clear all Miden IndexedDB data -await clearMidenStorage(); - -// Migrate storage between versions -await migrateStorage({ fromVersion: 1, toVersion: 2 }); -``` diff --git a/docs/builder/client/rust-client/_category_.yml b/docs/builder/client/rust-client/_category_.yml deleted file mode 100644 index ff26d637..00000000 --- a/docs/builder/client/rust-client/_category_.yml +++ /dev/null @@ -1,4 +0,0 @@ -label: Rust -# Determines where this documentation section appears relative to other sections in the parent folder -position: 1 -collapsed: true diff --git a/docs/builder/client/rust-client/api-docs.md b/docs/builder/client/rust-client/api-docs.md deleted file mode 100644 index 3db2d261..00000000 --- a/docs/builder/client/rust-client/api-docs.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: API -sidebar_position: 7 ---- - -:::note -The latest and complete reference for the Miden Client API can be found at [`Miden Client docs.rs`](https://docs.rs/miden-client/latest/miden_client/). -::: diff --git a/docs/builder/client/rust-client/design.md b/docs/builder/client/rust-client/design.md deleted file mode 100644 index 34aa31d7..00000000 --- a/docs/builder/client/rust-client/design.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Design -sidebar_position: 4 ---- - -The Miden Client has the following architectural components: - -- [Store](#store) -- [RPC client](#rpc-client) -- [Transaction executor](#transaction-executor) -- [Keystore](#keystore) -- [Note screener](#note-screener) -- [Note transport](#note-transport) - -:::tip - -- The RPC client and the store are Rust traits. -- This allow developers and users to easily customize their implementations. - -::: - -## Store - -The store is central to the client's design. - -It manages the persistence of the following entities: - -- Accounts; including their state history and related information such as vault assets and account code. -- Transactions and their scripts. -- Notes. -- Note tags. -- Block headers and chain information that the client needs to execute transactions and consume notes. - -Because Miden allows off-chain executing and proving, the client needs to know about the state of the blockchain at the moment of execution. To avoid state bloat, however, the client does not need to see the whole blockchain history, just the chain history intervals that are relevant to the user. - -The store can track any number of accounts, and any number of notes that those accounts might have created or may want to consume. - -## RPC client - -The RPC client communicates with the node through a defined set of gRPC methods. The provided client works both in `std` and `wasm` environments. - -The available gRPC methods are documented in the [Node gRPC Reference](https://docs.miden.xyz/miden-node/rpc). - -## Transaction executor - -The transaction executor uses the [Miden VM](https://0xmiden.github.io/miden-docs/imported/miden-vm/src/intro/main.html) to execute transactions. All transactions run within the [transaction kernel](https://0xmiden.github.io/miden-docs/imported/miden-base/src/transaction.html). - -When executing, the executor needs access to relevant blockchain history. The executor uses a `DataStore` interface for accessing this data. This means that there may be some coupling between the executor and the store. - -## Keystore - -The keystore is responsible for storing and managing the private keys of the accounts tracked by the client. - -These private keys are used by the executor to sign and authenticate transactions. Implementations for both rust and web keystores are provided. - -## Note Screener - -The note screener is used to check the consumability of notes by tracked accounts. It performs fast static checks (e.g. checking the inputs for well known notes) and also dry runs of consumption transactions. - -It can find the tracked accounts that can consume a note, and whether the note can be consumed at the moment or in the future. - -## State Sync component - -The state sync component encapsulates the logic for dealing with synchronization of the client state with the network. It repeatedly queries the node with sync state requests until the chain tip is reached. On every requests it updates the provided tracked elements (accounts, notes, transactions, etc.) and returns an updated state at the end which can be used to update the store (this component does not modify the store directly). - -The component also exposes a specific customizable callback which can be used to react to new note arrivals. - -## Note transport - -Access to the note transport network to exchange private notes is also provided. -The provided client uses gRPC methods to communicate with the note transport network, working both in `std` and `wasm` environments. - -Targeting privacy, notes are primarily exchanged using their tags as identifiers. By default, when notes are created the tag is derived from the recipient account ID, however the tag can also be random. - -The system is also prepared for end-to-end encryption (to be implemented). - -gRPC methods include: - -- `SendNote`: Sends a note to the note transport network. The recipient address is employed to encrypt the outgoing note (to be implemented). -- `FetchNotes`: Fetch notes from the network by note tag. A pagination mechanism using a monotonic-increasing cursor is also employed. The cursor is created by the network and used by the client to reduce the number of fetched notes (to avoid downloading already fetched notes). diff --git a/docs/builder/client/rust-client/examples.md b/docs/builder/client/rust-client/examples.md deleted file mode 100644 index 56e1ab0a..00000000 --- a/docs/builder/client/rust-client/examples.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Examples -sidebar_position: 6 ---- - -# Examples - -Code examples for common Rust library operations, organized by topic. - -## Tutorials - -For guided, end-to-end walkthroughs, see the [Getting started](./get-started/index.md) tutorials: - -- [Create account and use faucet](./get-started/create-account-use-faucet.md) -- [Public peer-to-peer transfer](./get-started/p2p-public.md) -- [Private peer-to-peer transfer](./get-started/p2p-private.md) - -## Library reference examples - -Each library reference page contains code examples for its topic: - -### Account operations - -- [Creating wallets, contracts, and faucets](./library/new-accounts.md) -- [Retrieving accounts and checking balances](./library/accounts.md) -- [Importing accounts](./library/import.md) -- [Exporting accounts](./library/export.md) - -### Transaction operations - -- [Minting, sending, consuming, and swapping](./library/new-transactions.md) — includes remote prover, custom scripts, and swaps -- [Retrieving transaction history](./library/transactions.md) - -### Note operations - -- [Listing, filtering, and consuming notes](./library/notes.md) -- [Sending and fetching private notes](./library/note-transport.md) - -### Other - -- [Compiling MASM components and transaction scripts](./library/compile.md) -- [Synchronizing state](./library/sync.md) -- [Managing note tags](./library/tags.md) - -## Prover fallback pattern - -When using a remote prover, network issues or server errors may cause proving to fail. A common pattern is to configure the client with a remote prover by default and fall back to local proving when remote proving fails. - -```rust -use std::sync::Arc; -use miden_client::{ - ClientError, - RemoteTransactionProver, - builder::ClientBuilder, - transaction::{LocalTransactionProver, ProvingOptions}, -}; - -// Create provers -let remote_prover = Arc::new(RemoteTransactionProver::new("https://prover.example.com")); -let local_prover = Arc::new(LocalTransactionProver::new(ProvingOptions::default())); - -// Build client with remote prover as default -let mut client = ClientBuilder::new() - .prover(remote_prover.clone()) - .store(store) - .rpc(rpc) - .authenticator(authenticator) - .build() - .await?; - -// Build transaction request -let tx_request = /* ... build your transaction request ... */; - -// Submit with fallback: try remote prover first, fall back to local on proving error -let tx_id = match client.submit_new_transaction(account_id, tx_request.clone()).await { - Ok(id) => id, - Err(ClientError::TransactionProvingError(_)) => { - println!("Remote proving failed, falling back to local prover..."); - client - .submit_new_transaction_with_prover(account_id, tx_request, local_prover.clone()) - .await? - } - Err(e) => return Err(e.into()), -}; - -println!("Transaction submitted: {}", tx_id); -``` diff --git a/docs/builder/client/rust-client/features.md b/docs/builder/client/rust-client/features.md deleted file mode 100644 index 63dd2df6..00000000 --- a/docs/builder/client/rust-client/features.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Features -sidebar_position: 3 ---- - -The `miden-client` library provides a comprehensive Rust API for interacting with the Miden rollup. - -### Transaction execution - -Build and execute transactions programmatically using `TransactionRequestBuilder`. The library supports standard transaction types (pay-to-id, swap, mint) through convenience builders, and custom transactions via arbitrary note scripts and arguments. - -```rust -let tx_request = TransactionRequestBuilder::new() - .build_pay_to_id(payment_description, None, NoteType::Private, client.rng())?; - -let result = client.new_transaction(sender_id, tx_request).await?; -client.submit_transaction(result).await?; -``` - -### Proof generation - -Generate client-side zero-knowledge proofs that validate transactions without revealing private data. The library supports: - -- **Local proving** — Generate proofs on the client machine using `LocalTransactionProver` -- **Remote proving** — Delegate proof generation to a remote prover via `RemoteTransactionProver` -- **Prover fallback** — Configure a remote prover as default with automatic fallback to local proving on failure - -The prover is a pluggable trait, allowing custom implementations. - -### Network interactivity - -Communicate with the Miden network through a gRPC-based RPC client: - -- **State sync** — `client.sync_state().await` fetches the latest blockchain state, updating accounts, notes, and transactions -- **Note transport** — Exchange private notes via the note transport network using `SendNote` and `FetchNotes` gRPC methods -- **Configurable endpoints** — Connect to testnet, devnet, localhost, or custom network endpoints - -### Account management - -Create and manage accounts using `AccountBuilder`: - -- **Account types** — `RegularAccountImmutableCode`, `RegularAccountUpdatableCode`, fungible/non-fungible faucets -- **Storage modes** — `Private` (state tracked locally, only commitments on-chain) or `Public` (state stored on-chain) -- **Key management** — Trait-based keystore for signing and authentication (filesystem keystore provided) -- **Components** — Attach `BasicWallet`, `AuthRpoFalcon512`, and custom components to accounts - -### Extensibility - -The library is designed around trait-based dependency injection: - -- **Store** — Pluggable persistence (SQLite implementation provided) -- **RPC client** — Pluggable network communication -- **Prover** — Pluggable proof generation -- **Keystore** — Pluggable key management - -This makes every component replaceable for testing, custom backends, or alternative environments. diff --git a/docs/builder/client/rust-client/get-started/_category_.yml b/docs/builder/client/rust-client/get-started/_category_.yml deleted file mode 100644 index 496c8c7b..00000000 --- a/docs/builder/client/rust-client/get-started/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Getting Started -position: 2 -collapsed: true diff --git a/docs/builder/client/rust-client/get-started/create-account-use-faucet.md b/docs/builder/client/rust-client/get-started/create-account-use-faucet.md deleted file mode 100644 index 4425db94..00000000 --- a/docs/builder/client/rust-client/get-started/create-account-use-faucet.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Create account -sidebar_position: 2 ---- - -In this tutorial, you'll create a Miden Client, generate a new account, request tokens from the public faucet, and consume the resulting note — all using the Rust library API. - -## Set up the project - -1. Create a new Rust project: - - ```sh - cargo new miden-getting-started - cd miden-getting-started - ``` - -2. Add dependencies to `Cargo.toml`: - - ```toml - [dependencies] - miden-client = { version = "0.14", features = ["tonic"] } - miden-client-sqlite-store = { version = "0.14" } - tokio = { version = "1", features = ["full"] } - rand = "0.8" - ``` - -## Create the client - -Instantiate a client connected to the Miden testnet: - -```rust -use std::sync::Arc; -use miden_client::builder::ClientBuilder; -use miden_client_sqlite_store::SqliteStore; - -#[tokio::main] -async fn main() -> Result<(), Box> { - // Create a SQLite store for local state persistence - let sqlite_store = SqliteStore::new("store.sqlite3".try_into()?).await?; - let store = Arc::new(sqlite_store); - - // Build a client pre-configured for testnet - let mut client = ClientBuilder::for_testnet() - .store(store) - .filesystem_keystore("keystore")? - .build() - .await?; - - Ok(()) -} -``` - -## Create a new account - -Use `AccountBuilder` to create a private wallet account: - -```rust -use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; -use miden_client::auth::AuthSecretKey; -use miden_client::crypto::SecretKey; -use miden_objects::account::auth::AuthRpoFalcon512; -use miden_objects::account::component::BasicWallet; - -// Generate a key pair for the account -let key_pair = SecretKey::with_rng(client.rng()); - -// Generate a random seed for the account -let init_seed: [u8; 32] = rand::random(); - -// Build the account -let new_account = AccountBuilder::new(init_seed) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Private) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - .with_component(BasicWallet) - .build()?; - -// Store the key and register the account with the client -let keystore = client.keystore(); -keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; -client.add_account(&new_account, false).await?; - -println!("Account created: {:?}", new_account.id()); -``` - -Save the printed account ID — you'll need it for the faucet step. - -## Request tokens from the public faucet - -1. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). -2. Paste your account ID into the **Request test tokens** field. -3. Choose an amount and click **Send Private Note**. -4. Download the `note.mno` file. - -:::tip -You can also click **Send Public Note**. If you do, the note details will be public and you can skip the import step — just sync the client directly. -::: - -## Import and sync - -If you received a private note file, import it: - -```rust -use std::path::Path; - -// Import the note from the downloaded file -client.import_note_from_file(Path::new("path/to/note.mno")).await?; -``` - -Sync the client to confirm the note exists on-chain: - -```rust -let sync_summary = client.sync_state().await?; -println!("Synced to block {}", sync_summary.block_num); -``` - -After syncing, the note's status changes from `Expected` to `Committed`, confirming it is the result of a valid on-chain transaction. - -## Consume the note - -Consume all available notes for your account to receive the faucet tokens: - -```rust -use miden_client::transaction::TransactionRequestBuilder; - -// Get consumable notes for the account -let consumable_notes = client.get_consumable_notes(Some(new_account.id())).await?; -let note_ids: Vec<_> = consumable_notes.iter().map(|n| n.note.id()).collect(); - -if !note_ids.is_empty() { - // Build a consume-notes transaction - let tx_request = TransactionRequestBuilder::new() - .build_consume_notes(new_account.id(), note_ids)?; - - // Execute and submit the transaction (this generates a ZK proof) - let tx_result = client.new_transaction(new_account.id(), tx_request).await?; - client.submit_transaction(tx_result).await?; - - println!("Notes consumed — ZK proof generated and submitted!"); -} -``` - -## Verify the balance - -Sync again to confirm the transaction, then check your account balance: - -```rust -client.sync_state().await?; - -let (account, _) = client.get_account(new_account.id()).await?; -println!("Account vault: {:?}", account.vault()); -``` - -You should see the faucet tokens in your account's vault. - -## Congratulations! - -You've created a Miden Client, generated an account, and executed your first client-side zero-knowledge proof using the Rust library. Next, try transferring assets between accounts: - -- [Public peer-to-peer transfer](./p2p-public.md) -- [Private peer-to-peer transfer](./p2p-private.md) - -## Debugging tips - -- All local state is stored in the SQLite database (the path you passed to `SqliteStore::new`). Delete the file for a fresh start. -- Enable debug mode when building the client: `.in_debug_mode(DebugMode::Enabled)` on `ClientBuilder`. diff --git a/docs/builder/client/rust-client/get-started/index.md b/docs/builder/client/rust-client/get-started/index.md deleted file mode 100644 index 44bcbc65..00000000 --- a/docs/builder/client/rust-client/get-started/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Getting started -sidebar_position: 1 ---- - -This section shows you how to build a Rust application that interacts with the Miden rollup using the `miden-client` library. - -By the end of these tutorials, you will have: - -- Created a Miden Client instance connected to testnet. -- Created an account and requested funds from the faucet. -- Transferred assets between accounts using the Rust API — both public and private notes. - -## Prerequisites - -- [Rust](https://www.rust-lang.org/learn/get-started) version 1.88 or later -- `miden-client` and `miden-client-sqlite-store` added to your `Cargo.toml` (see [Installation](../install-and-run.md)) diff --git a/docs/builder/client/rust-client/get-started/p2p-private.md b/docs/builder/client/rust-client/get-started/p2p-private.md deleted file mode 100644 index 91c91f91..00000000 --- a/docs/builder/client/rust-client/get-started/p2p-private.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Private peer-to-peer transfer -sidebar_position: 4 ---- - -In this tutorial, you'll transfer assets between two accounts using private notes and the Rust library API. - -:::info Prerequisite -Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account (Account A) and a working client. -::: - -## Create a second account - -Create a private account (Account B) within the same client: - -```rust -use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; -use miden_client::auth::AuthSecretKey; -use miden_client::crypto::SecretKey; -use miden_objects::account::auth::AuthRpoFalcon512; -use miden_objects::account::component::BasicWallet; - -let key_pair = SecretKey::with_rng(client.rng()); -let init_seed: [u8; 32] = rand::random(); - -let account_b = AccountBuilder::new(init_seed) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Private) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - .with_component(BasicWallet) - .build()?; - -let keystore = client.keystore(); -keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), account_b.id()).await?; -client.add_account(&account_b, false).await?; - -println!("Account B created: {:?}", account_b.id()); -``` - -## Send assets with a private note - -Build and submit a pay-to-id transaction from Account A to Account B using a private note: - -```rust -use miden_client::transaction::{TransactionRequestBuilder, PaymentNoteDescription}; -use miden_objects::note::NoteType; -use miden_objects::asset::FungibleAsset; -use miden_objects::account::AccountId; - -// Define the asset to send -let faucet_id = AccountId::from_hex("0x")?; -let asset = FungibleAsset::new(faucet_id, 50)?.into(); - -// Build the payment request -let payment = PaymentNoteDescription::new( - vec![asset], - account_a_id, // sender - account_b.id(), // target -); - -let tx_request = TransactionRequestBuilder::new().build_pay_to_id( - payment, - None, - NoteType::Private, // Private note — details not publicly visible - client.rng(), -)?; - -// Execute and submit -let tx_result = client.new_transaction(account_a_id, tx_request).await?; -client.submit_transaction(tx_result).await?; - -println!("Private P2ID note sent!"); -``` - -## Consume the private note - -Since both accounts are in the same client, Account B can discover the note by syncing: - -```rust -// Sync to update note state -client.sync_state().await?; - -// Get consumable notes for Account B -let consumable = client.get_consumable_notes(Some(account_b.id())).await?; -let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); - -if !note_ids.is_empty() { - let tx_request = TransactionRequestBuilder::new() - .build_consume_notes(account_b.id(), note_ids)?; - - let tx_result = client.new_transaction(account_b.id(), tx_request).await?; - client.submit_transaction(tx_result).await?; - - println!("Notes consumed by Account B!"); -} -``` - -## Verify - -Sync and check both accounts: - -```rust -client.sync_state().await?; - -let (acct_a, _) = client.get_account(account_a_id).await?; -let (acct_b, _) = client.get_account(account_b.id()).await?; - -println!("Account A vault: {:?}", acct_a.vault()); -println!("Account B vault: {:?}", acct_b.vault()); -``` - -## Using the note transport network - -When accounts belong to different users (separate clients), use the note transport network to exchange private notes: - -```rust -// Sender: after creating the note, get the output note ID -let output_notes = client.get_output_notes().await?; -let note_id = output_notes.last().unwrap().id(); - -// Send the note via the transport network (requires recipient's bech32 address) -client.send_note_via_transport(note_id, recipient_address).await?; - -// Recipient: fetch notes from the transport network -client.fetch_notes_from_transport().await?; - -// Then sync and consume as normal -client.sync_state().await?; -``` - -:::note -The client fetches notes for tracked note tags. By default, tags are derived from the recipient's account ID. For increased privacy, use random tags and track them explicitly. -::: - -## Congratulations! - -You've completed all the getting started tutorials. You can now: - -- Create accounts (private and public) -- Execute transactions with ZK proofs -- Transfer assets via public and private notes -- Use the note transport network for multi-user scenarios - -For more advanced patterns, see the [Library reference](../library/index.md) and [Examples](../examples.md). diff --git a/docs/builder/client/rust-client/get-started/p2p-public.md b/docs/builder/client/rust-client/get-started/p2p-public.md deleted file mode 100644 index b7811d4a..00000000 --- a/docs/builder/client/rust-client/get-started/p2p-public.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Peer-to-peer transfer -sidebar_position: 3 ---- - -In this tutorial, you'll transfer assets between two accounts using public notes and the Rust library API. - -:::info Prerequisite -Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account (Account A) and a working client. -::: - -## Create a second account - -Create a public account (Account C) so its state can be retrieved from the network: - -```rust -use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; -use miden_client::auth::AuthSecretKey; -use miden_client::crypto::SecretKey; -use miden_objects::account::auth::AuthRpoFalcon512; -use miden_objects::account::component::BasicWallet; - -let key_pair = SecretKey::with_rng(client.rng()); -let anchor_block = client.get_latest_epoch_block().await?; -let init_seed: [u8; 32] = rand::random(); - -let account_c = AccountBuilder::new(init_seed) - .anchor((&anchor_block).try_into()?) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Public) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - .with_component(BasicWallet) - .build()?; - -let keystore = client.keystore(); -keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), account_c.id()).await?; -client.add_account(&account_c, false).await?; - -println!("Account C created: {:?}", account_c.id()); -``` - -## Send assets with a public note - -Build and submit a pay-to-id transaction from Account A to Account C using a public note: - -```rust -use miden_client::transaction::{TransactionRequestBuilder, PaymentNoteDescription}; -use miden_objects::note::NoteType; -use miden_objects::asset::FungibleAsset; -use miden_objects::account::AccountId; - -// Define the asset to send -let faucet_id = AccountId::from_hex("0x")?; -let asset = FungibleAsset::new(faucet_id, 50)?.into(); - -// Build the payment request -let payment = PaymentNoteDescription::new( - vec![asset], - account_a_id, // sender - account_c.id(), // target -); - -let tx_request = TransactionRequestBuilder::new().build_pay_to_id( - payment, - None, - NoteType::Public, // Public note — recipient can discover it by syncing - client.rng(), -)?; - -// Execute and submit -let tx_result = client.new_transaction(account_a_id, tx_request).await?; -client.submit_transaction(tx_result).await?; - -println!("Public P2ID note sent!"); -``` - -## Receive and consume the note - -Since the note is public, Account C can discover it by syncing with the network: - -```rust -// Sync to discover the public note -client.sync_state().await?; - -// Get consumable notes for Account C -let consumable = client.get_consumable_notes(Some(account_c.id())).await?; -let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); - -if !note_ids.is_empty() { - let tx_request = TransactionRequestBuilder::new() - .build_consume_notes(account_c.id(), note_ids)?; - - let tx_result = client.new_transaction(account_c.id(), tx_request).await?; - client.submit_transaction(tx_result).await?; - - println!("Notes consumed by Account C!"); -} -``` - -## Verify - -Sync and check Account C's balance: - -```rust -client.sync_state().await?; - -let (account, _) = client.get_account(account_c.id()).await?; -println!("Account C vault: {:?}", account.vault()); -``` - -Account C should now hold the transferred tokens. diff --git a/docs/builder/client/rust-client/index.md b/docs/builder/client/rust-client/index.md deleted file mode 100644 index d6b52292..00000000 --- a/docs/builder/client/rust-client/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Rust -sidebar_position: 1 ---- - -# Rust client library - -The `miden-client` crate is the core Rust library for interacting with the Miden rollup. It provides a programmatic API for building applications that execute transactions, generate zero-knowledge proofs, manage accounts, and sync state with the network. - -## Key capabilities - -- **Transaction execution** — Build and execute transactions using `TransactionRequestBuilder` -- **Proof generation** — Generate client-side ZK proofs locally or delegate to a remote prover -- **Account management** — Create and track accounts with `AccountBuilder`, supporting both private and public storage modes -- **State sync** — Keep local state in sync with the Miden network via gRPC - -The library uses trait-based dependency injection for storage, RPC, proving, and key management, making each component pluggable and testable. - -## Getting started - -1. [Install](./install-and-run.md) the library as a dependency -2. Follow the [getting started tutorials](./get-started/index.md) to build your first Miden application -3. Explore the [library reference](./library/index.md) for detailed API patterns -4. Review the [design](./design.md) for architectural details -5. See the full [API documentation on docs.rs](https://docs.rs/miden-client/latest/miden_client/) diff --git a/docs/builder/client/rust-client/install-and-run.md b/docs/builder/client/rust-client/install-and-run.md deleted file mode 100644 index 3929ca6c..00000000 --- a/docs/builder/client/rust-client/install-and-run.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Installation -sidebar_position: 1 ---- - -## Prerequisites - -- [Rust](https://www.rust-lang.org/tools/install) version 1.88 or later. - -## Add the dependency - -Add `miden-client` to your project's `Cargo.toml`: - -```toml -[dependencies] -miden-client = { version = "0.14" } -``` - -### Feature flags - -The crate exposes several feature flags for optional functionality: - -- **`tonic`** — Enables gRPC-based RPC client (required for network communication) -- **`testing`** — Enables test utilities and mock implementations - -Enable features as needed: - -```toml -[dependencies] -miden-client = { version = "0.14", features = ["tonic", "testing"] } -``` - -### SQLite store - -For persistent storage, add the SQLite store crate: - -```toml -[dependencies] -miden-client = { version = "0.14" } -miden-client-sqlite-store = { version = "0.14" } -``` - -## Verify - -Confirm the dependency resolves correctly: - -```sh -cargo check -``` - -## Next steps - -Head to the [getting started tutorials](./get-started/index.md) to create your first account and execute a transaction using the Rust API. diff --git a/docs/builder/client/rust-client/library/_category_.yml b/docs/builder/client/rust-client/library/_category_.yml deleted file mode 100644 index 57175926..00000000 --- a/docs/builder/client/rust-client/library/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Library -position: 5 -collapsed: true diff --git a/docs/builder/client/rust-client/library/accounts.md b/docs/builder/client/rust-client/library/accounts.md deleted file mode 100644 index cde4825b..00000000 --- a/docs/builder/client/rust-client/library/accounts.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Accounts -sidebar_position: 1 ---- - -# Retrieving Accounts - -This guide demonstrates how to retrieve and inspect existing accounts using the Miden Client Rust library. - -## Get a single account - -```rust -let account_id = AccountId::from_hex("0x1234...")?; -let (account, _seed) = client.get_account(account_id).await?; - -println!("Account ID: {:?}", account.id()); -println!("Nonce: {:?}", account.nonce()); -println!("Vault: {:?}", account.vault()); -``` - -## List all accounts - -```rust -let accounts = client.get_accounts().await?; - -for (account, _seed) in &accounts { - println!("Account: {:?}", account.id()); -} -``` - -## Check account balance - -After syncing, inspect an account's vault to see its assets: - -```rust -let (account, _) = client.get_account(account_id).await?; - -for asset in account.vault().assets() { - match asset { - Asset::Fungible(fungible) => { - println!("Faucet: {:?}, Amount: {}", fungible.faucet_id(), fungible.amount()); - } - Asset::NonFungible(nft) => { - println!("NFT: {:?}", nft); - } - } -} -``` - -For importing and exporting accounts, see [Import](./import.md) and [Export](./export.md). diff --git a/docs/builder/client/rust-client/library/compile.md b/docs/builder/client/rust-client/library/compile.md deleted file mode 100644 index 2b31d24d..00000000 --- a/docs/builder/client/rust-client/library/compile.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Compile -sidebar_position: 3 ---- - -# Compiling MASM - -The Miden Client provides a `CodeBuilder` for compiling Miden Assembly (MASM) code into executable components, transaction scripts, and note scripts. - -## Get a CodeBuilder - -```rust -let code_builder = client.code_builder(); -``` - -Each call returns a fresh `CodeBuilder`, so libraries linked in one instance never leak into another. - -## Compile an account component - -Compile MASM source code into an `AccountComponentCode` for use in account creation: - -```rust -let component_code = client.code_builder() - .compile_account_component_code( - " - use miden::protocol::active_account - use miden::protocol::native_account - use miden::core::sys - - const COUNTER_SLOT = word(\"miden::tutorials::counter\") - - pub proc get_count - push.COUNTER_SLOT[0..2] exec.active_account::get_item - exec.sys::truncate_stack - end - - pub proc increment_count - push.COUNTER_SLOT[0..2] exec.active_account::get_item - add.1 - push.COUNTER_SLOT[0..2] exec.native_account::set_item - exec.sys::truncate_stack - end - " - )?; -``` - -The resulting `AccountComponentCode` can be passed to `AccountBuilder` when creating custom contract accounts. - -## Compile a transaction script - -### Without libraries - -```rust -let tx_script = client.code_builder() - .compile_tx_script( - " - use external_contract::counter_contract - begin - call.counter_contract::increment_count - end - " - )?; -``` - -### With linked libraries - -Link external libraries before compiling. Libraries can be linked dynamically (for on-chain contracts via FPI) or statically (for self-contained scripts): - -```rust -let mut cb = client.code_builder(); - -// Build a library from source -let library = cb.build_library( - "external_contract::counter_contract", - counter_contract_code, -)?; - -// Link dynamically (default for FPI — code fetched at prove time) -cb.link_dynamic_library(&library)?; - -// Or link statically (code copied into the script) -// cb.link_static_library(&library)?; - -let tx_script = cb.compile_tx_script( - " - use external_contract::counter_contract - begin - call.counter_contract::increment_count - end - " -)?; -``` - -#### Linking modes - -| Mode | Method | When to use | -|------|--------|-------------| -| Dynamic | `link_dynamic_library()` | FPI — the foreign contract lives on-chain; the prover fetches its code at prove time | -| Static | `link_static_library()` | Off-chain libraries that must be self-contained | - -You can also link raw module source code directly: - -```rust -let mut cb = client.code_builder(); -cb.link_module("external_contract::my_module", module_source_code)?; -let tx_script = cb.compile_tx_script("...")?; -``` - -## Compile a note script - -```rust -let note_script = client.code_builder() - .compile_note_script( - " - use.miden::note - begin - exec.note::get_inputs - # ... process inputs - end - " - )?; -``` - -## Full example: compile, create, execute - -```rust -use miden_client::builder::ClientBuilder; -use miden_client::account::AccountBuilder; - -// 1. Compile the contract component -let component_code = client.code_builder() - .compile_account_component_code(counter_code)?; - -// 2. Create the contract account -let (account, seed) = AccountBuilder::new(client.rng()) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Public) - .with_component(component_code, AccountComponentMetadata::new( - InitStorageData::default(), - AccountComponentMetadataVersion::latest(), - )?) - .build()?; - -client.add_account(&account, false).await?; - -// 3. Compile the transaction script -let mut cb = client.code_builder(); -let library = cb.build_library( - "external_contract::counter_contract", - counter_code, -)?; -cb.link_dynamic_library(&library)?; - -let tx_script = cb.compile_tx_script( - " - use external_contract::counter_contract - begin - call.counter_contract::increment_count - end - " -)?; - -// 4. Execute the transaction -let tx_request = TransactionRequestBuilder::new() - .with_custom_script(tx_script)? - .build()?; - -let tx_result = client.new_transaction(account.id(), tx_request).await?; -client.submit_transaction(tx_result).await?; -``` - -See [Creating transactions](./new-transactions.md) for more on `TransactionRequestBuilder`. diff --git a/docs/builder/client/rust-client/library/export.md b/docs/builder/client/rust-client/library/export.md deleted file mode 100644 index 6ed3f1e9..00000000 --- a/docs/builder/client/rust-client/library/export.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Export -sidebar_position: 5 ---- - -# Exporting Data - -This guide demonstrates how to export accounts and notes from the Miden Client. - -## Exporting notes - -Export a note by its ID: - -```rust -let note_data = client.export_note(note_id).await?; -``` - -Notes can be exported in different formats depending on how much data to include: - -| Format | Description | -|--------|-------------| -| ID only | Contains only the note ID (works for public notes that can be fetched from the network) | -| With details | Contains the note ID, metadata, and creation block number | -| Full | Contains the complete note with its inclusion proof | - -Exported notes can be shared with other users and [imported](./import.md) into their clients. - -## Exporting accounts - -Retrieve the full account state for export: - -```rust -let account = client.get_account(account_id).await?; -``` - -The returned `Account` object includes the full account state, code, and vault. It can be serialized and shared with another client via [import](./import.md). - -:::tip -For public accounts, the recipient can simply [import by ID](./import.md#import-by-account-id) instead of needing an exported file. -::: diff --git a/docs/builder/client/rust-client/library/import.md b/docs/builder/client/rust-client/library/import.md deleted file mode 100644 index 613c8fa5..00000000 --- a/docs/builder/client/rust-client/library/import.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Import -sidebar_position: 4 ---- - -# Importing Data - -This guide demonstrates how to import accounts and notes into the Miden Client. - -## Importing accounts - -### Import by account ID - -Import a public account from the network by its ID: - -```rust -let account_id = AccountId::from_hex("0x1234...")?; -client.import_account_by_id(account_id).await?; -``` - -This fetches the account's current state from the chain and stores it locally for tracking. - -### Import from an Account object - -Add an existing `Account` object to the client's store: - -```rust -client.add_account(&account, false).await?; -``` - -The second parameter controls whether to overwrite an existing account with the same ID. - -:::warning[Public accounts only] -Import-by-ID only works for **public accounts** — those created with `AccountStorageMode::Public`. Private account state is not available on-chain, so it cannot be fetched by ID. To transfer a private account between clients, export and import the `Account` object directly. -::: - -## Importing notes - -### Import from note files - -Import notes using `NoteFile` variants: - -```rust -use miden_client::note::NoteFile; - -let note_files = vec![ - NoteFile::NoteId(note_id), // Fetch full note from network -]; - -let imported_ids = client.import_notes(¬e_files).await?; -println!("Imported {} notes", imported_ids.len()); -``` - -### Note file types - -| Variant | Description | -|---------|-------------| -| `NoteFile::NoteId` | Contains only the note ID; full note is fetched from the network | -| `NoteFile::NoteDetails` | Contains note details, metadata, and creation block number | -| `NoteFile::NoteWithProof` | Contains the complete note with its inclusion proof | - -### Import from a `.mno` file - -Import a note exported as a `.mno` file (e.g., from the faucet): - -```rust -use std::path::Path; - -client.import_note_from_file(Path::new("path/to/note.mno")).await?; -``` - -After importing, [sync](./sync.md) the client to verify the note's inclusion on-chain. The note's status transitions from `Expected` to `Committed`. diff --git a/docs/builder/client/rust-client/library/index.md b/docs/builder/client/rust-client/library/index.md deleted file mode 100644 index 9ff6fd37..00000000 --- a/docs/builder/client/rust-client/library/index.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Library -sidebar_position: 0 ---- - -# Library - -The `miden-client` crate provides a Rust API for interacting with the Miden rollup. All operations go through the `Client` struct, created via `ClientBuilder`. - -## Client initialization - -The recommended way to create a client is using `ClientBuilder`. For standard networks, use the pre-configured constructors: - -```rust -use std::sync::Arc; -use miden_client::builder::ClientBuilder; -use miden_client_sqlite_store::SqliteStore; - -// Create store -let sqlite_store = SqliteStore::new("path/to/store".try_into()?).await?; -let store = Arc::new(sqlite_store); - -// Build client for testnet (pre-configured RPC, prover, and note transport) -let mut client = ClientBuilder::for_testnet() - .store(store) - .filesystem_keystore("path/to/keys")? - .build() - .await?; -``` - -Other network constructors: -- `ClientBuilder::for_testnet()` — Pre-configured for Miden testnet -- `ClientBuilder::for_devnet()` — Pre-configured for Miden devnet -- `ClientBuilder::for_localhost()` — Pre-configured for local development - -For custom configurations, use `ClientBuilder::new()` and configure each component: - -```rust -use std::sync::Arc; -use miden_client::builder::ClientBuilder; -use miden_client::rpc::{Endpoint, GrpcClient}; -use miden_client_sqlite_store::SqliteStore; - -let sqlite_store = SqliteStore::new("path/to/store".try_into()?).await?; -let store = Arc::new(sqlite_store); - -let endpoint = Endpoint::new("https".into(), "localhost".into(), Some(57291)); - -let mut client = ClientBuilder::new() - .grpc_client(&endpoint, None) - .store(store) - .filesystem_keystore("path/to/keys")? - // Optional: custom prover via .prover(Arc::new(prover)) - // Optional: note transport via .note_transport(Arc::new(nt_client)) - // Optional: debug mode via .in_debug_mode(DebugMode::Enabled) - .build() - .await?; -``` - -## API overview - -| Area | Purpose | Reference | -|------|---------|-----------| -| Accounts | Create, retrieve accounts | [Accounts](./accounts.md), [New accounts](./new-accounts.md) | -| Compile | Compile MASM scripts and components | [Compile](./compile.md) | -| Import / Export | Import and export accounts and notes | [Import](./import.md), [Export](./export.md) | -| Transactions | Build, execute, prove, submit transactions | [New transactions](./new-transactions.md), [Transactions](./transactions.md) | -| Tags | Manage note tags for sync filtering | [Tags](./tags.md) | -| Notes | List, filter, consume notes | [Notes](./notes.md) | -| Note Transport | Send and receive private notes | [Note Transport](./note-transport.md) | -| Sync | Synchronize local state with the network | [Sync](./sync.md) | - -## Dependencies - -Add to your `Cargo.toml`: - -```toml -[dependencies] -miden-client = { version = "0.14", features = ["tonic"] } -miden-client-sqlite-store = { version = "0.14" } -tokio = { version = "1", features = ["full"] } -``` diff --git a/docs/builder/client/rust-client/library/new-accounts.md b/docs/builder/client/rust-client/library/new-accounts.md deleted file mode 100644 index 258908f3..00000000 --- a/docs/builder/client/rust-client/library/new-accounts.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: New Accounts -sidebar_position: 2 ---- - -# Creating Accounts - -This guide demonstrates how to create different types of accounts using the Miden Client Rust library. - -## Creating a private wallet - -Private accounts store state locally — the rollup only keeps commitments, which guarantees privacy. - -```rust -use miden_client::account::{AccountBuilder, AccountStorageMode, AccountType}; -use miden_client::auth::AuthSecretKey; -use miden_client::crypto::SecretKey; -use miden_objects::account::auth::AuthRpoFalcon512; -use miden_objects::account::component::BasicWallet; - -let key_pair = SecretKey::with_rng(client.rng()); -let init_seed: [u8; 32] = rand::random(); - -let new_account = AccountBuilder::new(init_seed) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Private) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - .with_component(BasicWallet) - .build()?; - -// Store the key and register with the client -let keystore = client.keystore(); -keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; -client.add_account(&new_account, false).await?; - -println!("Account created: {:?}", new_account.id()); -``` - -Once created, the account is tracked locally and its state is automatically updated during sync. - -## Creating a public wallet - -Public accounts store their state on-chain. Other accounts can read their state directly (useful for foreign procedure invocation). - -```rust -let key_pair = SecretKey::with_rng(client.rng()); -let anchor_block = client.get_latest_epoch_block().await?; -let init_seed: [u8; 32] = rand::random(); - -let new_account = AccountBuilder::new(init_seed) - .anchor((&anchor_block).try_into()?) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Public) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - .with_component(BasicWallet) - .build()?; - -let keystore = client.keystore(); -keystore.add_key(&AuthSecretKey::RpoFalcon512(key_pair), new_account.id()).await?; -client.add_account(&new_account, false).await?; -``` - -:::note -Public accounts require an anchor block from the current epoch. The client fetches this with `get_latest_epoch_block()`. During sync, the client updates public account state by querying the node. -::: - -## Creating a mutable wallet - -Use `RegularAccountUpdatableCode` to create an account whose code can be updated after deployment: - -```rust -let new_account = AccountBuilder::new(init_seed) - .account_type(AccountType::RegularAccountUpdatableCode) - .storage_mode(AccountStorageMode::Private) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - .with_component(BasicWallet) - .build()?; -``` - -## Creating a faucet - -Faucets are special accounts that can mint fungible or non-fungible tokens: - -```rust -let new_faucet = AccountBuilder::new(init_seed) - .account_type(AccountType::FungibleFaucet) - .storage_mode(AccountStorageMode::Public) - .with_auth_component(AuthRpoFalcon512::new(key_pair.public_key())) - // Faucet-specific components would be added here - .build()?; -``` - -## Account types - -| Type | Description | -|------|-------------| -| `RegularAccountImmutableCode` | Standard wallet, code cannot be updated | -| `RegularAccountUpdatableCode` | Standard wallet, code can be updated after deployment | -| `FungibleFaucet` | Can mint fungible tokens | -| `NonFungibleFaucet` | Can mint non-fungible tokens | - -## Storage modes - -| Mode | Description | -|------|-------------| -| `AccountStorageMode::Private` | State tracked locally, only commitments on-chain (default) | -| `AccountStorageMode::Public` | Full state stored on-chain, readable by other accounts | diff --git a/docs/builder/client/rust-client/library/new-transactions.md b/docs/builder/client/rust-client/library/new-transactions.md deleted file mode 100644 index 903b65b5..00000000 --- a/docs/builder/client/rust-client/library/new-transactions.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: New Transactions -sidebar_position: 6 ---- - -# Creating Transactions - -This guide demonstrates how to create and submit transactions using the Miden Client Rust library. Transactions follow a two-step flow: execute, then submit. - -## Basic transaction flow - -Every transaction follows this pattern: - -```rust -// 1. Build a TransactionRequest -let tx_request = TransactionRequestBuilder::new() - .build_pay_to_id(payment, None, NoteType::Private, client.rng())?; - -// 2. Execute the transaction (produces a proof) -let tx_result = client.new_transaction(sender_id, tx_request).await?; - -// 3. Submit to the network -client.submit_transaction(tx_result).await?; -``` - -After submission, the transaction is tracked locally. Sync to confirm it has been committed on-chain. - -## Sending tokens (pay-to-id) - -Transfer fungible assets from one account to another: - -```rust -use miden_client::transaction::{TransactionRequestBuilder, PaymentNoteDescription}; -use miden_objects::note::NoteType; -use miden_objects::asset::FungibleAsset; -use miden_objects::account::AccountId; - -let faucet_id = AccountId::from_hex("0xFAUCET...")?; -let asset = FungibleAsset::new(faucet_id, 100)?.into(); - -let sender_id = AccountId::from_hex("0xSENDER...")?; -let target_id = AccountId::from_hex("0xTARGET...")?; - -let payment = PaymentNoteDescription::new( - vec![asset], - sender_id, - target_id, -); - -let tx_request = TransactionRequestBuilder::new().build_pay_to_id( - payment, - None, // Optional recall height - NoteType::Private, // or NoteType::Public - client.rng(), -)?; - -let tx_result = client.new_transaction(sender_id, tx_request).await?; -client.submit_transaction(tx_result).await?; -``` - -### Note types - -| Type | Description | -|------|-------------| -| `NoteType::Private` | Note details are not publicly visible; recipient needs the note data to consume | -| `NoteType::Public` | Note details are stored on-chain; recipient can discover it by syncing | - -### Recallable notes - -Pass a recall height to allow the sender to reclaim the note if the recipient hasn't consumed it: - -```rust -let tx_request = TransactionRequestBuilder::new().build_pay_to_id( - payment, - Some(100), // Sender can reclaim after block 100 - NoteType::Public, - client.rng(), -)?; -``` - -## Consuming notes - -Consume notes to receive assets into an account: - -```rust -// Get consumable notes for an account -let consumable = client.get_consumable_notes(Some(account_id)).await?; -let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); - -if !note_ids.is_empty() { - let tx_request = TransactionRequestBuilder::new() - .build_consume_notes(account_id, note_ids)?; - - let tx_result = client.new_transaction(account_id, tx_request).await?; - client.submit_transaction(tx_result).await?; -} -``` - -## Minting tokens - -Mint tokens from a faucet account: - -```rust -let faucet_id = AccountId::from_hex("0xFAUCET...")?; -let target_id = AccountId::from_hex("0xTARGET...")?; -let asset = FungibleAsset::new(faucet_id, 1000)?.into(); - -let payment = PaymentNoteDescription::new( - vec![asset], - faucet_id, - target_id, -); - -let tx_request = TransactionRequestBuilder::new().build_pay_to_id( - payment, - None, - NoteType::Public, - client.rng(), -)?; - -let tx_result = client.new_transaction(faucet_id, tx_request).await?; -client.submit_transaction(tx_result).await?; -``` - -## Swap transactions - -Create an atomic swap — offer one asset in exchange for another: - -```rust -let offered_asset = FungibleAsset::new(faucet_a_id, 100)?.into(); -let requested_asset = FungibleAsset::new(faucet_b_id, 200)?.into(); - -let tx_request = TransactionRequestBuilder::new().build_swap( - source_account_id, - offered_asset, - requested_asset, - NoteType::Public, - client.rng(), -)?; - -let tx_result = client.new_transaction(source_account_id, tx_request).await?; -client.submit_transaction(tx_result).await?; -``` - -When another account consumes the swap note, it receives the offered asset and the requested asset is removed from its vault into a new note the original account can consume. - -## Using a remote prover - -Offload proof generation to a remote prover for better performance: - -```rust -use miden_client::RemoteTransactionProver; - -let remote_prover = Arc::new(RemoteTransactionProver::new("https://prover.example.com")); - -// Build client with remote prover -let client = ClientBuilder::for_testnet() - .store(store) - .filesystem_keystore("path/to/keys")? - .prover(remote_prover) - .build() - .await?; - -// All transactions automatically use the remote prover -``` - -For fallback patterns (remote with local fallback), see [Examples](../examples.md). - -## Custom transactions - -Use `TransactionRequestBuilder` for full control over inputs, outputs, and scripts: - -```rust -let tx_request = TransactionRequestBuilder::new() - .with_custom_script(transaction_script)? - .with_own_output_notes(output_notes) - .with_expected_output_notes(expected_notes) - .build()?; - -let tx_result = client.new_transaction(account_id, tx_request).await?; -client.submit_transaction(tx_result).await?; -``` - -:::note -Custom transactions require understanding of the Miden VM instruction set and note scripts. -::: diff --git a/docs/builder/client/rust-client/library/note-transport.md b/docs/builder/client/rust-client/library/note-transport.md deleted file mode 100644 index 17fb1d07..00000000 --- a/docs/builder/client/rust-client/library/note-transport.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Note Transport -sidebar_position: 10 ---- - -# Note Transport - -The note transport layer allows you to send and receive private notes between users without exposing note details on-chain. This is useful when the sender and recipient don't share a local client. - -## Prerequisites - -Note transport must be configured when building the client: - -```rust -let mut client = ClientBuilder::for_testnet() - .store(store) - .filesystem_keystore("path/to/keys")? - .build() - .await?; - -// Check if transport is enabled -if client.is_note_transport_enabled() { - println!("Note transport is available"); -} -``` - -The pre-configured constructors (`for_testnet()`, `for_devnet()`) enable note transport automatically. For custom configurations, configure it via `ClientBuilder::new().note_transport(...)`. - -## Sending private notes - -After creating a private note via a transaction, send it to the recipient through the transport network: - -```rust -// The sender needs the recipient's bech32 address -let recipient_address: Address = "mtst1recipient...".parse()?; - -// Get the note from a recent transaction's output -let output_notes = client.get_output_notes(NoteFilter::All).await?; -let note = output_notes.last().unwrap(); - -// Send via the transport network -client.send_private_note(note.clone().try_into()?, &recipient_address).await?; -``` - -The note is end-to-end encrypted using the recipient's address details. Only the recipient can decrypt and consume it. - -## Fetching private notes - -The recipient fetches notes addressed to their tracked accounts: - -```rust -// Fetch with pagination (recommended for ongoing use) -client.fetch_private_notes().await?; - -// Or fetch all notes at once (useful for initial setup) -client.fetch_all_private_notes().await?; - -// View the fetched notes -let notes = client.get_input_notes(NoteFilter::All).await?; -for note in ¬es { - println!("Note: {:?}, Status: {:?}", note.id(), note.status()); -} -``` - -### Pagination - -`fetch_private_notes()` uses internal cursor-based pagination to avoid downloading duplicate notes across calls. Use this for periodic fetching. - -`fetch_all_private_notes()` fetches everything without pagination. Reserve this for special cases like initial setup or recovery. - -## Complete example - -```rust -// === Sender side === - -// 1. Create a private note via transaction -let payment = PaymentNoteDescription::new(vec![asset], sender_id, target_id); -let tx_request = TransactionRequestBuilder::new() - .build_pay_to_id(payment, None, NoteType::Private, client.rng())?; -let tx_result = client.new_transaction(sender_id, tx_request).await?; -client.submit_transaction(tx_result).await?; - -// 2. Send via transport -let output_notes = client.get_output_notes(NoteFilter::All).await?; -let note = output_notes.last().unwrap(); -client.send_private_note(note.clone().try_into()?, &recipient_address).await?; - -// === Recipient side === - -// 3. Fetch private notes -client.fetch_private_notes().await?; - -// 4. Consume the received note -let consumable = client.get_consumable_notes(Some(account_id)).await?; -let note_ids: Vec<_> = consumable.iter().map(|n| n.note.id()).collect(); -let tx_request = TransactionRequestBuilder::new() - .build_consume_notes(account_id, note_ids)?; -let tx_result = client.new_transaction(account_id, tx_request).await?; -client.submit_transaction(tx_result).await?; -``` - -:::note -The client only fetches notes for tracked note tags. By default, tags are derived from account IDs. For increased privacy, use random tags and track them with `client.add_note_tag(tag)`. See [Tags](./tags.md). -::: diff --git a/docs/builder/client/rust-client/library/notes.md b/docs/builder/client/rust-client/library/notes.md deleted file mode 100644 index 874dcf2a..00000000 --- a/docs/builder/client/rust-client/library/notes.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Notes -sidebar_position: 9 ---- - -# Working with Notes - -Notes are the primary way to transfer assets and data between accounts in the Miden network. This guide demonstrates how to work with notes using the Miden Client Rust library. - -For importing and exporting notes, see [Import](./import.md) and [Export](./export.md). For exchanging private notes between users, see [Note Transport](./note-transport.md). - -## List input notes - -```rust -// List all input notes -let notes = client.get_input_notes(NoteFilter::All).await?; - -for note in ¬es { - println!("Note ID: {:?}", note.id()); - println!("Status: {:?}", note.status()); -} -``` - -## Filter notes by status - -```rust -use miden_client::note::NoteFilter; - -let committed = client.get_input_notes(NoteFilter::Committed).await?; -let consumed = client.get_input_notes(NoteFilter::Consumed).await?; -let expected = client.get_input_notes(NoteFilter::Expected).await?; -let processing = client.get_input_notes(NoteFilter::Processing).await?; -``` - -### Note statuses - -| Status | Description | -|--------|-------------| -| `Expected` | Note has been imported or created but not yet confirmed on-chain | -| `Committed` | Note has been confirmed on-chain (after sync) | -| `Processing` | Note consumption proof has been submitted, awaiting confirmation | -| `Consumed` | Note has been consumed (after sync confirms the consumption) | - -## Get consumable notes - -Find notes that a specific account can consume: - -```rust -let consumable = client.get_consumable_notes(Some(account_id)).await?; - -for record in &consumable { - println!("Note: {:?}", record.note.id()); -} -``` - -Pass `None` to get consumable notes across all tracked accounts. - -## List output notes - -Output notes are notes created by your transactions (e.g., the P2ID note created when sending tokens): - -```rust -let output_notes = client.get_output_notes(NoteFilter::All).await?; - -for note in &output_notes { - println!("Output note: {:?}", note.id()); -} diff --git a/docs/builder/client/rust-client/library/sync.md b/docs/builder/client/rust-client/library/sync.md deleted file mode 100644 index e41222c0..00000000 --- a/docs/builder/client/rust-client/library/sync.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Sync -sidebar_position: 11 ---- - -# Synchronizing State - -This guide demonstrates how to synchronize local state with the Miden network using the Miden Client Rust library. - -## Basic sync - -```rust -let sync_summary = client.sync_state().await?; - -println!("Synced to block: {}", sync_summary.block_num); -println!("New public notes: {}", sync_summary.new_public_notes); -println!("Committed notes: {}", sync_summary.committed_notes); -println!("Consumed notes: {}", sync_summary.consumed_notes); -println!("Updated accounts: {}", sync_summary.updated_accounts); -println!("Committed transactions: {}", sync_summary.committed_transactions); -``` - -## When to sync - -Sync after any operation that depends on network state: - -- **After submitting a transaction** — to confirm it was committed -- **Before consuming notes** — to verify notes are committed on-chain -- **After importing a note** — to transition it from `Expected` to `Committed` -- **Periodically** — to discover new public notes or track account updates - -## What sync updates - -The sync process queries the Miden node and updates local state: - -| Updated | Description | -|---------|-------------| -| Block headers | Latest chain state | -| Account state | Public account updates from the node | -| Note status | Transitions: `Expected` → `Committed`, `Processing` → `Consumed` | -| Transaction status | Transitions: `Pending` → `Committed` (or `Discarded`) | -| Note tags | Discovers new notes matching tracked tags | - -## Get current sync height - -Check the last synced block number without performing a sync: - -```rust -let height = client.get_sync_height().await?; -println!("Last synced block: {}", height); -``` diff --git a/docs/builder/client/rust-client/library/tags.md b/docs/builder/client/rust-client/library/tags.md deleted file mode 100644 index 325d65c4..00000000 --- a/docs/builder/client/rust-client/library/tags.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Tags -sidebar_position: 8 ---- - -# Working with Note Tags - -Note tags are used to specify how notes should be executed and who can consume them. They also serve as a fuzzy filter mechanism for retrieving note updates during sync operations. - -## Basic tag operations - -```rust -use miden_objects::note::NoteTag; - -// Add a tag -client.add_note_tag(NoteTag::from(12345u32)).await?; - -// Remove a tag -client.remove_note_tag(NoteTag::from(12345u32)).await?; - -// List all tags -let tags = client.get_note_tags().await?; -for record in &tags { - println!("Tag: {:?}, Source: {:?}", record.tag(), record.source()); -} -``` - -## Managing multiple tags - -```rust -use miden_objects::note::NoteTag; - -// Add multiple tags -let tags_to_add = [123u32, 456, 789]; -for tag in tags_to_add { - client.add_note_tag(NoteTag::from(tag)).await?; -} - -// List them -let all_tags = client.get_note_tags().await?; -println!("Tracking {} tags", all_tags.len()); - -// Remove some -client.remove_note_tag(NoteTag::from(123u32)).await?; -client.remove_note_tag(NoteTag::from(456u32)).await?; -``` - -## Tag sources and sync behavior - -Tags can come from different sources, tracked via `NoteTagRecord`: - -| Source | Description | -|--------|-------------| -| `Account` | Automatically added for accounts tracked by the client | -| `Note` | Automatically added for expected notes being tracked | -| `User` | Manually added by the user via `add_note_tag()` | - -During sync operations, the client uses all tracked tags to retrieve note-related updates from the network for notes with matching tags. - -## Important notes - -- Tags are `NoteTag` values (wrapping `u32`) -- Tags for tracked accounts and notes are managed automatically by the client -- Only user-added tags can be removed — system-generated tags (Account, Note sources) cannot be removed manually -- Use tags with [note transport](./note-transport.md) for increased privacy: add random tags instead of relying on default account-derived tags diff --git a/docs/builder/client/rust-client/library/transactions.md b/docs/builder/client/rust-client/library/transactions.md deleted file mode 100644 index f2bc8c65..00000000 --- a/docs/builder/client/rust-client/library/transactions.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Transactions -sidebar_position: 7 ---- - -# Retrieving Transaction History - -This guide demonstrates how to retrieve and inspect transaction history using the Miden Client Rust library. - -## List all transactions - -```rust -let transactions = client.get_transactions().await?; - -for tx in &transactions { - println!("TX ID: {:?}", tx.id()); - println!("Account: {:?}", tx.account_id()); - println!("Status: {:?}", tx.transaction_status()); -} -``` - -## Transaction statuses - -Transactions follow this lifecycle: - -| Status | Description | -|--------|-------------| -| `Pending` | Transaction has been submitted but not yet confirmed | -| `Committed` | Transaction has been included in a block | -| `Discarded` | Transaction was not included and will not be processed | - -After executing and submitting a transaction, it starts as `Pending`. Call `sync_state()` to update the status. Once the node includes the transaction in a block, it becomes `Committed`. - -## Output notes - -Transactions may produce output notes (e.g., a pay-to-id transaction creates a note the recipient can consume): - -```rust -let output_notes = client.get_output_notes().await?; - -for note in &output_notes { - println!("Output note: {:?}", note.id()); -} -``` diff --git a/docs/builder/client/theme/Admonition/Icon/Danger.tsx b/docs/builder/client/theme/Admonition/Icon/Danger.tsx deleted file mode 100644 index ab14d7de..00000000 --- a/docs/builder/client/theme/Admonition/Icon/Danger.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React, { type ReactNode } from "react"; -import type { Props } from "@theme/Admonition/Icon/Danger"; - -export default function AdmonitionIconDanger(props: Props): ReactNode { - return ( - - - - ); -} diff --git a/docs/builder/client/theme/Admonition/Icon/Info.tsx b/docs/builder/client/theme/Admonition/Icon/Info.tsx deleted file mode 100644 index 59e48a52..00000000 --- a/docs/builder/client/theme/Admonition/Icon/Info.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { type ReactNode } from "react"; -import type { Props } from "@theme/Admonition/Icon/Info"; - -export default function AdmonitionIconInfo(props: Props): ReactNode { - return ( - - - - ); -} diff --git a/docs/builder/client/theme/Admonition/Icon/Note.tsx b/docs/builder/client/theme/Admonition/Icon/Note.tsx deleted file mode 100644 index d7c524b3..00000000 --- a/docs/builder/client/theme/Admonition/Icon/Note.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { type ReactNode } from "react"; -import type { Props } from "@theme/Admonition/Icon/Note"; - -export default function AdmonitionIconNote(props: Props): ReactNode { - return ( - - - - ); -} diff --git a/docs/builder/client/theme/Admonition/Icon/Tip.tsx b/docs/builder/client/theme/Admonition/Icon/Tip.tsx deleted file mode 100644 index 219bb8d0..00000000 --- a/docs/builder/client/theme/Admonition/Icon/Tip.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { type ReactNode } from "react"; -import type { Props } from "@theme/Admonition/Icon/Tip"; - -export default function AdmonitionIconTip(props: Props): ReactNode { - return ( - - - - ); -} diff --git a/docs/builder/client/theme/Admonition/Icon/Warning.tsx b/docs/builder/client/theme/Admonition/Icon/Warning.tsx deleted file mode 100644 index f96398d1..00000000 --- a/docs/builder/client/theme/Admonition/Icon/Warning.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { type ReactNode } from "react"; -import type { Props } from "@theme/Admonition/Icon/Warning"; - -export default function AdmonitionIconCaution(props: Props): ReactNode { - return ( - - - - ); -} diff --git a/docs/builder/client/theme/Admonition/Layout/index.tsx b/docs/builder/client/theme/Admonition/Layout/index.tsx deleted file mode 100644 index 7b2c170d..00000000 --- a/docs/builder/client/theme/Admonition/Layout/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { type ReactNode } from "react"; -import clsx from "clsx"; -import { ThemeClassNames } from "@docusaurus/theme-common"; - -import type { Props } from "@theme/Admonition/Layout"; - -import styles from "./styles.module.css"; - -function AdmonitionContainer({ - type, - className, - children, -}: Pick & { children: ReactNode }) { - return ( -
- {children} -
- ); -} - -function AdmonitionHeading({ icon, title }: Pick) { - return ( -
- {icon} - {/* {title} */} -
- ); -} - -function AdmonitionContent({ children }: Pick) { - return children ? ( -
{children}
- ) : null; -} - -export default function AdmonitionLayout(props: Props): ReactNode { - const { type, icon, title, children, className } = props; - return ( - - {title || icon ? : null} - {children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Layout/styles.module.css b/docs/builder/client/theme/Admonition/Layout/styles.module.css deleted file mode 100644 index 88df7e63..00000000 --- a/docs/builder/client/theme/Admonition/Layout/styles.module.css +++ /dev/null @@ -1,35 +0,0 @@ -.admonition { - margin-bottom: 1em; -} - -.admonitionHeading { - font: var(--ifm-heading-font-weight) var(--ifm-h5-font-size) / - var(--ifm-heading-line-height) var(--ifm-heading-font-family); - text-transform: uppercase; -} - -/* Heading alone without content (does not handle fragment content) */ -.admonitionHeading:not(:last-child) { - margin-bottom: 0.3rem; -} - -.admonitionHeading code { - text-transform: none; -} - -.admonitionIcon { - display: inline-block; - vertical-align: middle; - margin-right: 0.4em; -} - -.admonitionIcon svg { - display: inline-block; - height: 1.6em; - width: 1.6em; - fill: var(--ifm-alert-foreground-color); -} - -.admonitionContent > :last-child { - margin-bottom: 0; -} diff --git a/docs/builder/client/theme/Admonition/Type/Caution.tsx b/docs/builder/client/theme/Admonition/Type/Caution.tsx deleted file mode 100644 index b570a37a..00000000 --- a/docs/builder/client/theme/Admonition/Type/Caution.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/Admonition/Type/Caution'; -import AdmonitionLayout from '@theme/Admonition/Layout'; -import IconWarning from '@theme/Admonition/Icon/Warning'; - -const infimaClassName = 'alert alert--warning'; - -const defaultProps = { - icon: , - title: ( - - caution - - ), -}; - -// TODO remove before v4: Caution replaced by Warning -// see https://github.com/facebook/docusaurus/issues/7558 -export default function AdmonitionTypeCaution(props: Props): ReactNode { - return ( - - {props.children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Type/Danger.tsx b/docs/builder/client/theme/Admonition/Type/Danger.tsx deleted file mode 100644 index 49901fa9..00000000 --- a/docs/builder/client/theme/Admonition/Type/Danger.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/Admonition/Type/Danger'; -import AdmonitionLayout from '@theme/Admonition/Layout'; -import IconDanger from '@theme/Admonition/Icon/Danger'; - -const infimaClassName = 'alert alert--danger'; - -const defaultProps = { - icon: , - title: ( - - danger - - ), -}; - -export default function AdmonitionTypeDanger(props: Props): ReactNode { - return ( - - {props.children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Type/Info.tsx b/docs/builder/client/theme/Admonition/Type/Info.tsx deleted file mode 100644 index 018e0a16..00000000 --- a/docs/builder/client/theme/Admonition/Type/Info.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/Admonition/Type/Info'; -import AdmonitionLayout from '@theme/Admonition/Layout'; -import IconInfo from '@theme/Admonition/Icon/Info'; - -const infimaClassName = 'alert alert--info'; - -const defaultProps = { - icon: , - title: ( - - info - - ), -}; - -export default function AdmonitionTypeInfo(props: Props): ReactNode { - return ( - - {props.children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Type/Note.tsx b/docs/builder/client/theme/Admonition/Type/Note.tsx deleted file mode 100644 index c99e0385..00000000 --- a/docs/builder/client/theme/Admonition/Type/Note.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/Admonition/Type/Note'; -import AdmonitionLayout from '@theme/Admonition/Layout'; -import IconNote from '@theme/Admonition/Icon/Note'; - -const infimaClassName = 'alert alert--secondary'; - -const defaultProps = { - icon: , - title: ( - - note - - ), -}; - -export default function AdmonitionTypeNote(props: Props): ReactNode { - return ( - - {props.children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Type/Tip.tsx b/docs/builder/client/theme/Admonition/Type/Tip.tsx deleted file mode 100644 index 18604a5e..00000000 --- a/docs/builder/client/theme/Admonition/Type/Tip.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/Admonition/Type/Tip'; -import AdmonitionLayout from '@theme/Admonition/Layout'; -import IconTip from '@theme/Admonition/Icon/Tip'; - -const infimaClassName = 'alert alert--success'; - -const defaultProps = { - icon: , - title: ( - - tip - - ), -}; - -export default function AdmonitionTypeTip(props: Props): ReactNode { - return ( - - {props.children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Type/Warning.tsx b/docs/builder/client/theme/Admonition/Type/Warning.tsx deleted file mode 100644 index 61d9597b..00000000 --- a/docs/builder/client/theme/Admonition/Type/Warning.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, {type ReactNode} from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/Admonition/Type/Warning'; -import AdmonitionLayout from '@theme/Admonition/Layout'; -import IconWarning from '@theme/Admonition/Icon/Warning'; - -const infimaClassName = 'alert alert--warning'; - -const defaultProps = { - icon: , - title: ( - - warning - - ), -}; - -export default function AdmonitionTypeWarning(props: Props): ReactNode { - return ( - - {props.children} - - ); -} diff --git a/docs/builder/client/theme/Admonition/Types.tsx b/docs/builder/client/theme/Admonition/Types.tsx deleted file mode 100644 index 2a100190..00000000 --- a/docs/builder/client/theme/Admonition/Types.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import AdmonitionTypeNote from '@theme/Admonition/Type/Note'; -import AdmonitionTypeTip from '@theme/Admonition/Type/Tip'; -import AdmonitionTypeInfo from '@theme/Admonition/Type/Info'; -import AdmonitionTypeWarning from '@theme/Admonition/Type/Warning'; -import AdmonitionTypeDanger from '@theme/Admonition/Type/Danger'; -import AdmonitionTypeCaution from '@theme/Admonition/Type/Caution'; -import type AdmonitionTypes from '@theme/Admonition/Types'; - -const admonitionTypes: typeof AdmonitionTypes = { - note: AdmonitionTypeNote, - tip: AdmonitionTypeTip, - info: AdmonitionTypeInfo, - warning: AdmonitionTypeWarning, - danger: AdmonitionTypeDanger, -}; - -// Undocumented legacy admonition type aliases -// Provide hardcoded/untranslated retrocompatible label -// See also https://github.com/facebook/docusaurus/issues/7767 -const admonitionAliases: typeof AdmonitionTypes = { - secondary: (props) => , - important: (props) => , - success: (props) => , - caution: AdmonitionTypeCaution, -}; - -export default { - ...admonitionTypes, - ...admonitionAliases, -}; diff --git a/docs/builder/client/theme/Admonition/index.tsx b/docs/builder/client/theme/Admonition/index.tsx deleted file mode 100644 index 8f4225da..00000000 --- a/docs/builder/client/theme/Admonition/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React, {type ComponentType, type ReactNode} from 'react'; -import {processAdmonitionProps} from '@docusaurus/theme-common'; -import type {Props} from '@theme/Admonition'; -import AdmonitionTypes from '@theme/Admonition/Types'; - -function getAdmonitionTypeComponent(type: string): ComponentType { - const component = AdmonitionTypes[type]; - if (component) { - return component; - } - console.warn( - `No admonition component found for admonition type "${type}". Using Info as fallback.`, - ); - return AdmonitionTypes.info!; -} - -export default function Admonition(unprocessedProps: Props): ReactNode { - const props = processAdmonitionProps(unprocessedProps); - const AdmonitionTypeComponent = getAdmonitionTypeComponent(props.type); - return ; -} diff --git a/docs/builder/client/web-client/_category_.yml b/docs/builder/client/web-client/_category_.yml deleted file mode 100644 index 629e9ef2..00000000 --- a/docs/builder/client/web-client/_category_.yml +++ /dev/null @@ -1,4 +0,0 @@ -label: TypeScript -# Determines where this documentation section appears relative to other sections in the parent folder -position: 2 -collapsed: true diff --git a/docs/builder/client/web-client/api-docs.md b/docs/builder/client/web-client/api-docs.md deleted file mode 100644 index 120e0590..00000000 --- a/docs/builder/client/web-client/api-docs.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: API -sidebar_position: 7 ---- - -:::note -The latest and complete API reference for the Miden Web SDK can be found at the [TypeDoc API Reference](https://github.com/0xMiden/ts-sdk/blob/main/docs/typedoc/README.md). -::: diff --git a/docs/builder/client/web-client/design.md b/docs/builder/client/web-client/design.md deleted file mode 100644 index 90e65486..00000000 --- a/docs/builder/client/web-client/design.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Design -sidebar_position: 4 ---- - -# Design - -This page explains how the TypeScript SDK is structured and how its pieces fit together at runtime. - -## How the SDK reaches the browser - -The TypeScript SDK is a pure TypeScript package that wraps the [WASM bridge](../index.md) — a separate layer that compiles the [Rust client core](../rust-client/design.md) to WebAssembly and bundles it with browser infrastructure (Web Workers, IndexedDB, JS glue). The SDK itself contains no Rust or WASM code; it consumes the bridge as an npm dependency and provides the idiomatic TypeScript API you interact with. - -```mermaid -flowchart LR - A["Rust core
(@miden-sdk/rust-sdk)"] -->|"compiled to WASM"| B["WASM bridge
(@miden-sdk/wasm-bridge)"] - B -->|"npm dependency"| C["TypeScript SDK
(@miden-sdk/ts-sdk)"] - C --> D["Your application"] -``` - -From your perspective, `npm install` is all you need — the WASM binary, Web Worker script, and all bindings are bundled transitively. - -## Runtime architecture - -At runtime, the SDK splits work across two threads: - -```mermaid -flowchart TB - subgraph Main["Main thread (your app)"] - App["Application code"] --> API["MidenClient API
(thin proxy)"] - end - - subgraph Worker["Web Worker thread"] - Core["Rust client core
(WASM)"] - Core --> Store["IndexedDB
store"] - Core --> RPC["gRPC-web
RPC client"] - Core --> KS["IndexedDB
keystore"] - end - - API <-->|"postMessage"| Core - RPC <-->|"gRPC-web"| Node["Miden node"] - RPC <-->|"gRPC-web"| NT["Note transport
network"] -``` - -**Why a Web Worker?** Transaction proving and MASM compilation are CPU-intensive. Running them on the main thread would freeze the UI. The Web Worker keeps your application responsive while heavy operations run in the background. - -Every `MidenClient` instance owns one Web Worker. The TypeScript API you interact with is a thin proxy that serializes calls to the worker via `postMessage` and returns the results as promises. - -## Client API surface - -The `MidenClient` exposes a resource-based API — each domain area is grouped under a namespace: - -```mermaid -flowchart TB - Client["MidenClient"] - Client --> Accounts["client.accounts"] - Client --> Transactions["client.transactions"] - Client --> Notes["client.notes"] - Client --> Compile["client.compile"] - Client --> Tags["client.tags"] - Client --> Sync["client.sync()"] - - Accounts ~~~ A1["create · get · list
getDetails · getBalance
import · export
addAddress · removeAddress"] - Transactions ~~~ T1["mint · send · consume
consumeAll · swap · execute
submit · preview
list · waitFor"] - Notes ~~~ N1["get · list · listSent
listAvailable
import · export
sendPrivate · fetchPrivate"] - Compile ~~~ C1["component · txScript"] - Tags ~~~ TG1["add · remove · list"] -``` - -| Namespace | Responsibility | -|-----------|---------------| -| **`client.accounts`** | Account lifecycle: create wallets/faucets/contracts, retrieve state, check balances, import/export, manage addresses | -| **`client.transactions`** | Transaction lifecycle: build, execute, prove, submit, and track transactions. Supports mint, send, consume, swap, custom MASM scripts, and FPI | -| **`client.notes`** | Note management: list/filter input and output notes, import/export, send and fetch private notes via the note transport network | -| **`client.compile`** | MASM compilation: compile account components and transaction scripts in the browser, with library linking support | -| **`client.tags`** | Tag management: add/remove note tags that control which notes the client discovers during sync | -| **`client.sync()`** | State synchronization: pull the latest state from the Miden node and update local data | - -Top-level methods like `client.exportStore()`, `client.importStore()`, and `client.terminate()` handle store backup/restore and worker lifecycle. - -## Transaction lifecycle - -When you call a high-level method like `client.transactions.send()`, the SDK handles the full lifecycle automatically: - -```mermaid -sequenceDiagram - participant App as Your app - participant API as MidenClient - participant Worker as Web Worker (WASM) - participant Node as Miden node - - App->>API: transactions.send({ ... }) - API->>Worker: postMessage(send request) - Worker->>Worker: 1. Build TransactionRequest - Worker->>Worker: 2. Execute in Miden VM - Worker->>Worker: 3. Generate ZK proof - Worker->>Node: 4. Submit proven transaction - Node-->>Worker: Transaction ID - Worker->>Worker: 5. Store transaction + output notes - Worker-->>API: TransactionId - API-->>App: TransactionId -``` - -Steps 2–3 are the most expensive. For complex transactions, you can offload proving to a remote prover by passing `proverUrl` at client creation or a `prover` per-transaction. - -## Persistence - -The SDK uses [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) for all browser-side persistence — no server or filesystem needed. - -**Store** — persists the client's view of the blockchain: -- Account state (history, vault assets, code) -- Transactions and their scripts -- Input and output notes -- Note tags -- Block headers and chain data required for transaction execution - -Because Miden supports off-chain execution and proving, the client only stores the blockchain history intervals relevant to its tracked accounts — not the entire chain. - -**Keystore** — persists private keys for tracked accounts, stored separately from the main store. Keys are used to sign transactions during execution. - -Both databases are scoped to the browser origin, so different domains cannot access each other's data. - -## Network communication - -The SDK communicates with two external services: - -| Service | Protocol | Purpose | -|---------|----------|---------| -| **Miden node** | gRPC-web | Sync state, submit transactions, fetch public account data | -| **Note transport network** | gRPC-web | Exchange private notes between users | - -Standard gRPC uses HTTP/2 features that browsers don't expose directly. The SDK uses [gRPC-web](https://github.com/grpc/grpc-web), which works over HTTP/1.1 and HTTP/2, making it compatible with browser environments. A gRPC-web proxy (like Envoy) may be required in front of the Miden node depending on the deployment. - -## Resource management - -Each `MidenClient` holds a Web Worker thread and IndexedDB connections. In long-running applications (e.g., a wallet that switches between networks), it's important to release these resources: - -```typescript -// Explicit cleanup -client.terminate(); - -// Or automatic cleanup via TC39 Explicit Resource Management -{ - using client = await MidenClient.create(); - // client.terminate() called automatically at end of scope -} -``` - -After `terminate()`, all method calls throw `Error("Client terminated")`. diff --git a/docs/builder/client/web-client/examples.md b/docs/builder/client/web-client/examples.md deleted file mode 100644 index ad73d691..00000000 --- a/docs/builder/client/web-client/examples.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Examples -sidebar_position: 6 ---- - -# Examples - -Code examples for common SDK operations, organized by topic. - -## Tutorials - -For guided, end-to-end walkthroughs, see the [Getting started](./get-started/index.md) tutorials: - -- [Create account and use faucet](./get-started/create-account-use-faucet.md) -- [Public peer-to-peer transfer](./get-started/p2p-public.md) -- [Private peer-to-peer transfer](./get-started/p2p-private.md) -- [Mock client](./get-started/mock-client.md) - -## Library reference examples - -Each library reference page contains code examples for its topic: - -### Account operations - -- [Creating wallets, contracts, and faucets](./library/new-accounts.md) -- [Retrieving accounts and checking balances](./library/accounts.md) -- [Importing accounts](./library/import.md) -- [Exporting accounts](./library/export.md) - -### Transaction operations - -- [Minting, sending, consuming, and swapping](./library/new-transactions.md) — includes remote prover, custom scripts, and FPI -- [Retrieving transaction history](./library/transactions.md) - -### Note operations - -- [Listing, filtering, importing, and exporting notes](./library/notes.md) -- [Sending and fetching private notes](./library/note-transport.md) - -### Other - -- [Compiling MASM components and transaction scripts](./library/compile.md) -- [Synchronizing state](./library/sync.md) -- [Managing note tags](./library/tags.md) -- [Working with the mock client](./get-started/mock-client.md) diff --git a/docs/builder/client/web-client/features.md b/docs/builder/client/web-client/features.md deleted file mode 100644 index f118359e..00000000 --- a/docs/builder/client/web-client/features.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Features -sidebar_position: 2 ---- - -# Features - -The Miden Web SDK offers a range of functionality for interacting with the Miden rollup directly from the browser. - -### Transaction execution - -The SDK facilitates the execution of transactions on the Miden rollup, allowing users to transfer assets, mint new tokens, swap tokens, and perform custom operations using Miden Assembly scripts. - -### Proof generation - -The Miden rollup supports user-generated proofs which are key to ensuring the validity of transactions. The SDK contains the functionality for executing, proving, and submitting transactions — all within the browser using WebAssembly. - -For better performance on complex transactions, proving can be offloaded to a remote prover. - -### Network interactivity - -The SDK enables users to interact with the Miden network. This includes syncing with the latest blockchain data and managing account information. - -The SDK also supports connectivity with the Miden Note Transport network for the exchange of private notes (end-to-end encryption coming soon). - -### Account generation - -The SDK provides features for generating and tracking accounts within the Miden rollup ecosystem. Users can create wallets, faucets, and custom contract accounts, and track their state and transaction history. - -### MASM compilation - -The SDK includes a built-in compiler for Miden Assembly (MASM), enabling developers to compile account components and transaction scripts directly in the browser without external tooling. - -### Browser-native architecture - -The SDK is compiled from Rust to WebAssembly and uses a dedicated Web Worker to offload computationally intensive operations (proving, syncing, wallet creation) off the main thread, keeping the UI responsive. diff --git a/docs/builder/client/web-client/get-started/_category_.yml b/docs/builder/client/web-client/get-started/_category_.yml deleted file mode 100644 index c8bcefa2..00000000 --- a/docs/builder/client/web-client/get-started/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Getting Started -position: 3 -collapsed: true diff --git a/docs/builder/client/web-client/get-started/create-account-use-faucet.md b/docs/builder/client/web-client/get-started/create-account-use-faucet.md deleted file mode 100644 index 67a0b76d..00000000 --- a/docs/builder/client/web-client/get-started/create-account-use-faucet.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Create account -sidebar_position: 1 ---- - -# Create account and use faucet - -In this tutorial, you'll create a new Miden wallet using the TypeScript SDK, request tokens from the public faucet, and consume them into your account. - -## Prerequisites - -- Completed [Installation](../install.md) -- Access to the [Miden faucet website](https://faucet.testnet.miden.io/) - -## 1. Initialize the client - -Create a client connected to the Miden testnet: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -// createTestnet() pre-configures the RPC endpoint and enables auto-sync -const client = await MidenClient.createTestnet(); -``` - -## 2. Create a new wallet - -Create a mutable wallet with private storage (the default): - -```typescript -const wallet = await client.accounts.create(); - -console.log("Account ID:", wallet.id().toString()); -console.log("Is private:", wallet.isPrivate()); // true -console.log("Is faucet:", wallet.isFaucet()); // false -``` - -Save the account ID — you'll need it when requesting tokens from the faucet. - -## 3. Request tokens from the faucet - -1. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). -2. Paste your account ID into the **Request test tokens** field. -3. Choose an amount and click **Send Public Note**. - -:::tip -Click **Send Public Note** rather than **Send Private Note**. Public notes are discoverable via sync, so you won't need to download and import a note file. -::: - -## 4. Sync the client - -After the faucet sends the note, sync your client to discover it: - -```typescript -const summary = await client.sync(); - -console.log("Synced to block:", summary.blockNum()); -console.log("Committed notes:", summary.committedNotes()); -``` - -The sync retrieves the public note created by the faucet. - -## 5. Consume the note - -Consume all available notes for your wallet to receive the tokens: - -```typescript -const result = await client.transactions.consumeAll({ account: wallet }); - -console.log(`Consumed ${result.consumed} notes`); -if (result.txId) { - console.log("Transaction ID:", result.txId.toString()); -} -``` - -Wait for the transaction to be confirmed: - -```typescript -if (result.txId) { - await client.transactions.waitFor(result.txId.toHex()); -} -``` - -## 6. Verify the balance - -Sync again to get the updated state, then check the balance: - -```typescript -await client.sync(); - -// Use the faucet account ID from the faucet website -const balance = await client.accounts.getBalance(wallet, "0xFAUCET_ID..."); -console.log(`Balance: ${balance}`); -``` - -## Complete example - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - // Initialize - const client = await MidenClient.createTestnet(); - - // Create wallet - const wallet = await client.accounts.create(); - console.log("Account ID:", wallet.id().toString()); - - // --- Request tokens from the faucet website using the account ID above --- - - // Sync to discover the faucet note - await client.sync(); - - // Consume notes - const result = await client.transactions.consumeAll({ account: wallet }); - console.log(`Consumed ${result.consumed} notes`); - - // Wait for confirmation - if (result.txId) { - await client.transactions.waitFor(result.txId.toHex()); - } - - // Verify balance - await client.sync(); - const balance = await client.accounts.getBalance(wallet, "0xFAUCET_ID..."); - console.log(`Balance: ${balance}`); - - // Clean up - client.terminate(); -} catch (error) { - console.error("Error:", error.message); -} -``` - -## Next steps - -Now that you have tokens, try transferring them: - -- [Public peer-to-peer transfer](./p2p-public.md) — send tokens using public notes -- [Private peer-to-peer transfer](./p2p-private.md) — send tokens using private notes diff --git a/docs/builder/client/web-client/get-started/index.md b/docs/builder/client/web-client/get-started/index.md deleted file mode 100644 index 607c9ce9..00000000 --- a/docs/builder/client/web-client/get-started/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Getting started -sidebar_position: 0 ---- - -# Getting started - -This section shows you how to get started with the Miden Web SDK by creating accounts, requesting funds from a public faucet, and transferring assets between accounts — all from the browser using TypeScript. - -By the end of these tutorials, you will have: - -- Initialized the Miden Client in a web application -- Created an account and requested funds from the faucet -- Transferred assets between accounts using public and private notes -- Tested SDK workflows locally using the mock client - -## Prerequisites - -- [Node.js](https://nodejs.org/) v18 or later -- A WASM-capable browser (Chrome, Firefox, Safari, Edge) -- The SDK installed in your project — see [Installation](../install.md) - -## Tutorials - -1. [Create account and use faucet](./create-account-use-faucet.md) — create a wallet, request testnet tokens, and consume them -2. [Public peer-to-peer transfer](./p2p-public.md) — send tokens between accounts using public notes -3. [Private peer-to-peer transfer](./p2p-private.md) — send tokens privately with note transport -4. [Mock client](./mock-client.md) — test the full workflow locally without a network connection diff --git a/docs/builder/client/web-client/get-started/mock-client.md b/docs/builder/client/web-client/get-started/mock-client.md deleted file mode 100644 index 8a9c869c..00000000 --- a/docs/builder/client/web-client/get-started/mock-client.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Mock client -sidebar_position: 4 ---- - -# Mock client - -The mock client lets you test Miden SDK workflows entirely locally — no network connection or testnet access required. It simulates the Miden blockchain in-memory, making it ideal for development, testing, and experimentation. - -## How it differs from the real client - -The mock client provides the same resource-based API (`client.accounts.*`, `client.transactions.*`, etc.) with one key difference: the simulated environment does not create blocks automatically. You must call `client.proveBlock()` to advance the mock chain before syncing. - -## 1. Create the mock client - -```typescript -import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; - -const client = await MidenClient.createMock(); -``` - -## 2. Create a wallet and faucet - -Since there's no testnet faucet, you create your own faucet account: - -```typescript -const wallet = await client.accounts.create(); -const faucet = await client.accounts.create({ - type: AccountType.FungibleFaucet, - symbol: "TEST", - decimals: 8, - maxSupply: 10_000_000n -}); - -// Advance the chain so the accounts are committed -client.proveBlock(); -await client.sync(); -``` - -## 3. Mint tokens - -Mint tokens from your faucet to the wallet: - -```typescript -await client.transactions.mint({ - account: faucet, - to: wallet, - amount: 1000n -}); - -// Advance and sync -client.proveBlock(); -await client.sync(); -``` - -## 4. Consume notes - -Consume all available notes to receive the minted tokens: - -```typescript -const result = await client.transactions.consumeAll({ account: wallet }); -console.log(`Consumed ${result.consumed} notes`); - -// Advance and sync to confirm -client.proveBlock(); -await client.sync(); -``` - -## 5. Verify the balance - -```typescript -const balance = await client.accounts.getBalance(wallet, faucet); -console.log(`Balance: ${balance}`); // 1000 -``` - -## Complete example - -```typescript -import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.createMock(); - - // Create accounts - const wallet = await client.accounts.create(); - const faucet = await client.accounts.create({ - type: AccountType.FungibleFaucet, - symbol: "TEST", - decimals: 8, - maxSupply: 10_000_000n - }); - - client.proveBlock(); - await client.sync(); - - // Mint tokens - await client.transactions.mint({ - account: faucet, - to: wallet, - amount: 1000n - }); - - client.proveBlock(); - await client.sync(); - - // Consume notes - const result = await client.transactions.consumeAll({ account: wallet }); - console.log(`Consumed ${result.consumed} notes`); - - client.proveBlock(); - await client.sync(); - - // Verify balance - const balance = await client.accounts.getBalance(wallet, faucet); - console.log(`Balance: ${balance}`); - - client.terminate(); -} catch (error) { - console.error("Error:", error.message); -} -``` - -## Mock-only methods - -| Method | Description | -|--------|-------------| -| `client.proveBlock()` | Advance the mock chain by one block | -| `client.usesMockChain()` | Returns `true` for mock clients | -| `client.serializeMockChain()` | Serialize mock chain state for snapshot/restore | -| `client.serializeMockNoteTransportNode()` | Serialize mock note transport state | - -## Restoring from a snapshot - -You can save and restore mock chain state: - -```typescript -// Snapshot -const chainState = client.serializeMockChain(); -const transportState = client.serializeMockNoteTransportNode(); - -// Restore in a new client -const restored = await MidenClient.createMock({ - serializedMockChain: chainState, - serializedNoteTransport: transportState -}); -``` - -## Testing note transport - -The mock client includes a built-in note transport layer for testing private note delivery: - -```typescript -const client = await MidenClient.createMock(); - -// Send a private note -await client.notes.sendPrivate({ - noteId: "0xnote...", - to: "mtst1recipient..." -}); - -// Fetch private notes -await client.notes.fetchPrivate(); - -// List received notes -const notes = await client.notes.list(); -console.log(`Received ${notes.length} notes`); -``` - -## Next steps - -- [Library reference](../library/index.md) — detailed API documentation by topic -- [Examples](../examples.md) — practical code examples for common use cases diff --git a/docs/builder/client/web-client/get-started/p2p-private.md b/docs/builder/client/web-client/get-started/p2p-private.md deleted file mode 100644 index 6b771d47..00000000 --- a/docs/builder/client/web-client/get-started/p2p-private.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Private peer-to-peer transfer -sidebar_position: 3 ---- - -# Private peer-to-peer transfer - -In this tutorial, you'll send tokens between two accounts using private notes. Unlike public notes, private notes are not visible on-chain — only the note's commitment is recorded. This provides privacy for both the sender and recipient. - -:::info Prerequisites -- Complete the [Create account and use faucet](./create-account-use-faucet.md) tutorial first. -- You should have a funded wallet from that tutorial. -::: - -## 1. Set up sender and recipient - -Use the funded wallet from the previous tutorial as the sender, and create a new recipient wallet: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -const client = await MidenClient.createTestnet(); - -// Sender wallet (already funded) -const sender = await client.accounts.get("0xSENDER_ID..."); - -// Create a new recipient wallet (private storage by default) -const recipient = await client.accounts.create(); - -console.log("Sender:", sender.id().toString()); -console.log("Recipient:", recipient.id().toString()); -``` - -## 2. Send tokens with a private note - -Transfer tokens from the sender to the recipient using a private note: - -```typescript -const faucetId = "0xFAUCET_ID..."; - -const txId = await client.transactions.send({ - account: sender, - to: recipient, - token: faucetId, - amount: 50n, - type: "private" -}); - -console.log("Send transaction:", txId.toString()); -await client.transactions.waitFor(txId.toHex()); -``` - -## 3. Sync and consume - -Since both accounts are managed by the same client in this example, the private note details are already available locally. Sync and consume: - -```typescript -await client.sync(); - -const result = await client.transactions.consumeAll({ account: recipient }); -console.log(`Consumed ${result.consumed} notes`); - -if (result.txId) { - await client.transactions.waitFor(result.txId.toHex()); -} -``` - -## 4. Verify balances - -```typescript -await client.sync(); - -const senderBalance = await client.accounts.getBalance(sender, faucetId); -const recipientBalance = await client.accounts.getBalance(recipient, faucetId); - -console.log(`Sender balance: ${senderBalance}`); -console.log(`Recipient balance: ${recipientBalance}`); -``` - -## Using note transport for cross-client transfers - -When the sender and recipient use different clients (e.g., different users), the note transport network is needed to deliver the private note to the recipient. - -### Sender side - -After creating the private transaction, send the note through the note transport network: - -```typescript -// Get the note ID from the transaction's output notes -const sentNotes = await client.notes.listSent({ status: "committed" }); -const noteId = sentNotes[0].id().toString(); - -// Send via note transport — requires the recipient's bech32 address -await client.notes.sendPrivate({ - noteId: noteId, - to: "mtst1recipient..." -}); -``` - -### Recipient side - -The recipient fetches private notes and consumes them: - -```typescript -// Fetch private notes from the note transport network -await client.notes.fetchPrivate(); - -// Sync to update local state -await client.sync(); - -// Consume the received note -const result = await client.transactions.consumeAll({ account: recipient }); -console.log(`Consumed ${result.consumed} notes`); -``` - -:::note -The client fetches notes for tracked note tags. By default, note tags are derived from the recipient's account ID. For increased privacy, random tags can be used — track a specific tag with `client.tags.add(tag)`. -::: - -## Complete example - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.createTestnet(); - - const sender = await client.accounts.get("0xSENDER_ID..."); - const recipient = await client.accounts.create(); - const faucetId = "0xFAUCET_ID..."; - - // Send tokens via private note - const txId = await client.transactions.send({ - account: sender, - to: recipient, - token: faucetId, - amount: 50n, - type: "private" - }); - await client.transactions.waitFor(txId.toHex()); - - // Sync and consume - await client.sync(); - const result = await client.transactions.consumeAll({ account: recipient }); - if (result.txId) { - await client.transactions.waitFor(result.txId.toHex()); - } - - // Verify - await client.sync(); - const balance = await client.accounts.getBalance(recipient, faucetId); - console.log(`Recipient balance: ${balance}`); - - client.terminate(); -} catch (error) { - console.error("Error:", error.message); -} -``` - -## Next steps - -- [Mock client](./mock-client.md) — test the full workflow locally without a network connection diff --git a/docs/builder/client/web-client/get-started/p2p-public.md b/docs/builder/client/web-client/get-started/p2p-public.md deleted file mode 100644 index 004075c5..00000000 --- a/docs/builder/client/web-client/get-started/p2p-public.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Public peer-to-peer transfer -sidebar_position: 2 ---- - -# Public peer-to-peer transfer - -In this tutorial, you'll send tokens between two accounts using public notes. Public notes are discoverable by any client that syncs with the network, so the recipient doesn't need any out-of-band coordination. - -:::info Prerequisites -- Complete the [Create account and use faucet](./create-account-use-faucet.md) tutorial first. -- You should have a funded wallet from that tutorial. -::: - -## 1. Set up sender and recipient - -Use the funded wallet from the previous tutorial as the sender, and create a new wallet as the recipient: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -const client = await MidenClient.createTestnet(); - -// Sender wallet (already funded from faucet tutorial) -const sender = await client.accounts.get("0xSENDER_ID..."); - -// Create a new recipient wallet with public storage -const recipient = await client.accounts.create({ storage: "public" }); - -console.log("Sender:", sender.id().toString()); -console.log("Recipient:", recipient.id().toString()); -``` - -## 2. Send tokens with a public note - -Transfer tokens from the sender to the recipient using a public note: - -```typescript -const faucetId = "0xFAUCET_ID..."; - -const txId = await client.transactions.send({ - account: sender, - to: recipient, - token: faucetId, - amount: 50n, - type: "public" -}); - -console.log("Send transaction:", txId.toString()); -``` - -Wait for confirmation: - -```typescript -await client.transactions.waitFor(txId.toHex()); -``` - -## 3. Sync and consume on the recipient - -Sync the client to discover the public note, then consume it on the recipient account: - -```typescript -await client.sync(); - -const result = await client.transactions.consumeAll({ account: recipient }); -console.log(`Consumed ${result.consumed} notes`); - -if (result.txId) { - await client.transactions.waitFor(result.txId.toHex()); -} -``` - -## 4. Verify balances - -```typescript -await client.sync(); - -const senderBalance = await client.accounts.getBalance(sender, faucetId); -const recipientBalance = await client.accounts.getBalance(recipient, faucetId); - -console.log(`Sender balance: ${senderBalance}`); -console.log(`Recipient balance: ${recipientBalance}`); -``` - -## Complete example - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.createTestnet(); - - // Assume sender is already created and funded - const sender = await client.accounts.get("0xSENDER_ID..."); - const recipient = await client.accounts.create({ storage: "public" }); - const faucetId = "0xFAUCET_ID..."; - - // Send tokens via public note - const txId = await client.transactions.send({ - account: sender, - to: recipient, - token: faucetId, - amount: 50n, - type: "public" - }); - await client.transactions.waitFor(txId.toHex()); - - // Recipient syncs and consumes - await client.sync(); - const result = await client.transactions.consumeAll({ account: recipient }); - if (result.txId) { - await client.transactions.waitFor(result.txId.toHex()); - } - - // Verify - await client.sync(); - const balance = await client.accounts.getBalance(recipient, faucetId); - console.log(`Recipient balance: ${balance}`); - - client.terminate(); -} catch (error) { - console.error("Error:", error.message); -} -``` - -## Next steps - -- [Private peer-to-peer transfer](./p2p-private.md) — send tokens privately using note transport diff --git a/docs/builder/client/web-client/index.md b/docs/builder/client/web-client/index.md deleted file mode 100644 index 9e0e326a..00000000 --- a/docs/builder/client/web-client/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: TypeScript ---- - -# Overview - -The Miden Web SDK (`@miden-sdk/ts-sdk`) is a browser-focused toolkit for interacting with the Miden blockchain from web applications. It wraps core functionality from the Miden Rust client and compiles to WebAssembly with TypeScript bindings, making it ideal for wallets, dApps, and browser-based developer tools. - -- [Installation](./install.md) — install the SDK via NPM -- [Getting started](./get-started/index.md) — step-by-step tutorials -- [Features](./features.md) — what the SDK can do -- [Design](./design.md) — architecture and components -- [Library reference](./library/index.md) — detailed API usage by topic -- [Examples](./examples.md) — practical code examples -- [API reference](./api-docs.md) — TypeDoc API documentation diff --git a/docs/builder/client/web-client/install.md b/docs/builder/client/web-client/install.md deleted file mode 100644 index be7da618..00000000 --- a/docs/builder/client/web-client/install.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Installation -sidebar_position: 1 ---- - -# Installation - -## Prerequisites - -- [Node.js](https://nodejs.org/) v18 or later -- A WASM-capable browser (Chrome, Firefox, Safari, Edge) - -## Install the SDK - -```bash -npm install @miden-sdk/ts-sdk -# or -yarn add @miden-sdk/ts-sdk -``` - -## Verify the installation - -Create a quick test to confirm everything works: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -const client = await MidenClient.create(); -console.log("Miden SDK initialized successfully"); -client.terminate(); -``` - -If the client initializes without errors, you're ready to go. - -:::tip -Use `MidenClient.createTestnet()` to connect to the Miden testnet with sensible defaults (auto-sync enabled, testnet RPC endpoint pre-configured). -::: diff --git a/docs/builder/client/web-client/library/_category_.yml b/docs/builder/client/web-client/library/_category_.yml deleted file mode 100644 index 57175926..00000000 --- a/docs/builder/client/web-client/library/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Library -position: 5 -collapsed: true diff --git a/docs/builder/client/web-client/library/accounts.md b/docs/builder/client/web-client/library/accounts.md deleted file mode 100644 index db6e6aef..00000000 --- a/docs/builder/client/web-client/library/accounts.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Accounts -sidebar_position: 1 ---- - -# Retrieving Accounts with the Miden SDK - -This guide demonstrates how to retrieve and work with existing accounts using the Miden SDK. - -## Retrieving a Single Account - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Get account by hex string, bech32 string, or AccountId object - const account = await client.accounts.get("0x1234..."); - - if (!account) { - console.log("Account not found"); - return; - } - - console.log(account.id().toString()); - console.log(account.nonce().toString()); - console.log(account.isPublic()); - console.log(account.isFaucet()); -} catch (error) { - console.error("Failed to retrieve account:", error.message); -} -``` - -## Listing All Accounts - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - const accounts = await client.accounts.list(); - - for (const header of accounts) { - console.log(header.id().toString()); - console.log(header.nonce().toString()); - } -} catch (error) { - console.error("Failed to retrieve accounts:", error.message); -} -``` - -## Getting Account Details - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Returns { account, vault, storage, code, keys } in a single call - const details = await client.accounts.getDetails("0x1234..."); - - console.log(details.account.id().toString()); - console.log(details.vault); - console.log(details.storage); - console.log(details.code); - console.log(details.keys); -} catch (error) { - console.error("Failed to get account details:", error.message); -} -``` - -## Checking Account Balance - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Quick balance check (wraps accountReader) - const balance = await client.accounts.getBalance("0xACCOUNT...", "0xFAUCET..."); - console.log(`Balance: ${balance}`); -} catch (error) { - console.error("Failed to get balance:", error.message); -} -``` - -## Address Management - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - await client.accounts.addAddress("0xACCOUNT...", "mtst1address..."); - await client.accounts.removeAddress("0xACCOUNT...", "mtst1address..."); -} catch (error) { - console.error("Failed to manage address:", error.message); -} -``` - -> **Note:** `get()` returns `null` when an account is not found. All other methods (`getDetails()`, `getBalance()`, `export()`) throw `"Account not found: 0x..."` if the account doesn't exist. diff --git a/docs/builder/client/web-client/library/compile.md b/docs/builder/client/web-client/library/compile.md deleted file mode 100644 index dd4eff44..00000000 --- a/docs/builder/client/web-client/library/compile.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Compile -sidebar_position: 3 ---- - -# Compiling MASM with the Miden SDK - -`client.compile` exposes two methods for compiling Miden Assembly (MASM) code directly from the browser without needing a direct reference to the low-level `WasmWebClient`: - -| Method | Purpose | -|--------|---------| -| `compile.component({ code, slots })` | Compile MASM + storage slots into an `AccountComponent` for contract creation | -| `compile.txScript({ code, libraries? })` | Compile a transaction script, optionally linking inline libraries | - -Each call creates a **fresh `CodeBuilder`**, so libraries linked in one call never leak into another. - -## Compiling an Account Component - -```typescript -import { MidenClient, StorageSlot } from "@miden-sdk/ts-sdk"; - -const contractCode = ` - use miden::protocol::active_account - use miden::protocol::native_account - use miden::core::word - use miden::core::sys - - const COUNTER_SLOT = word("miden::tutorials::counter") - - pub proc get_count - push.COUNTER_SLOT[0..2] exec.active_account::get_item - exec.sys::truncate_stack - end - - pub proc increment_count - push.COUNTER_SLOT[0..2] exec.active_account::get_item - add.1 - push.COUNTER_SLOT[0..2] exec.native_account::set_item - exec.sys::truncate_stack - end -`; - -try { - const client = await MidenClient.create(); - - const component = await client.compile.component({ - code: contractCode, - slots: [StorageSlot.emptyValue("miden::tutorials::counter")] - }); - - // component is ready to pass to client.accounts.create() - console.log("Component compiled"); - - // Extract the hash of a specific procedure (needed for FPI) - const getCountHash = component.getProcedureHash("get_count"); - console.log("get_count hash:", getCountHash); -} catch (error) { - console.error("Compilation failed:", error.message); -} -``` - -## Compiling a Transaction Script - -### Without libraries - -```typescript -try { - const client = await MidenClient.create(); - - const script = await client.compile.txScript({ - code: ` - use external_contract::counter_contract - begin - call.counter_contract::increment_count - end - ` - }); - - // script is ready to pass to client.transactions.execute() -} catch (error) { - console.error("Script compilation failed:", error.message); -} -``` - -### With inline libraries - -Pass an array of `{ namespace, code, linking? }` objects. The compiler builds each library and links it automatically: - -```typescript -try { - const client = await MidenClient.create(); - - const script = await client.compile.txScript({ - code: ` - use external_contract::my_contract - use miden::core::sys - begin - call.my_contract::do_something - exec.sys::truncate_stack - end - `, - libraries: [ - { - namespace: "external_contract::my_contract", - code: myContractCode, - // linking: "dynamic" (default) | "static" - } - ] - }); -} catch (error) { - console.error("Script compilation failed:", error.message); -} -``` - -#### `linking` modes - -| Value | Behaviour | When to use | -|-------|-----------|-------------| -| `"dynamic"` (default) | Links without copying the library code into the script | FPI — the foreign contract lives on-chain; the prover fetches its code at prove time | -| `"static"` | Copies library code into the script | Off-chain libraries that must be self-contained | - -## Getting a Procedure Hash (for FPI) - -Foreign procedure invocation (FPI) requires knowing the **hash** of the target procedure. Compile the foreign contract's component and call `getProcedureHash()`: - -```typescript -try { - const client = await MidenClient.create(); - - const counterComponent = await client.compile.component({ - code: counterContractCode, - slots: [StorageSlot.emptyValue("miden::tutorials::counter")] - }); - - const getCountHash = counterComponent.getProcedureHash("get_count"); - - // Use the hash in the transaction script - const script = await client.compile.txScript({ - code: ` - use external_contract::count_reader_contract - use miden::core::sys - begin - push.${getCountHash} - push.${counterAccountId.suffix()} - push.${counterAccountId.prefix()} - call.count_reader_contract::copy_count - exec.sys::truncate_stack - end - `, - libraries: [ - { namespace: "external_contract::count_reader_contract", code: countReaderCode } - ] - }); -} catch (error) { - console.error("FPI script compilation failed:", error.message); -} -``` - -## Full Example: Compile → Create Contract → Execute Script - -```typescript -import { MidenClient, AccountType, AuthSecretKey, StorageSlot } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - await client.sync(); - - // 1. Compile the contract component - const component = await client.compile.component({ - code: counterCode, - slots: [StorageSlot.emptyValue("miden::tutorials::counter")] - }); - - // 2. Create the contract account - const seed = crypto.getRandomValues(new Uint8Array(32)); - const auth = AuthSecretKey.rpoFalconWithRNG(seed); - - const contract = await client.accounts.create({ - type: AccountType.ImmutableContract, - seed, - auth, - components: [component] - }); - - await client.sync(); - - // 3. Compile the transaction script - const script = await client.compile.txScript({ - code: ` - use external_contract::counter_contract - begin - call.counter_contract::increment_count - end - `, - libraries: [ - { namespace: "external_contract::counter_contract", code: counterCode } - ] - }); - - // 4. Execute the transaction - const txId = await client.transactions.execute({ - account: contract.id(), - script - }); - - console.log("Transaction ID:", txId.toHex()); -} catch (error) { - console.error("Failed:", error.message); -} -``` - -See [Creating transactions](./new-transactions.md) for full details on `transactions.execute()`. diff --git a/docs/builder/client/web-client/library/export.md b/docs/builder/client/web-client/library/export.md deleted file mode 100644 index 8274b5a0..00000000 --- a/docs/builder/client/web-client/library/export.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Export -sidebar_position: 5 ---- - -# Exporting Data with the Miden SDK - -This guide demonstrates how to export accounts, notes, and store data using the Miden SDK. - -## Exporting Notes - -Export a note with different levels of detail: - -```typescript -import { MidenClient, NoteExportFormat } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Export with just the note ID - const idExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Id }); - - // Export with full details including inclusion proof - const fullExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Full }); - - // Export with note details including metadata and creation block - const detailsExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Details }); -} catch (error) { - console.error("Failed to export note:", error.message); -} -``` - -Export formats: - -- `NoteExportFormat.Id` — Exports only the note ID (only works for public notes) -- `NoteExportFormat.Full` — Exports the complete note with its inclusion proof (requires the note to have an inclusion proof) -- `NoteExportFormat.Details` — Exports note details including metadata and the creation block number - -## Exporting Accounts - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const accountFile = await client.accounts.export("0x1234..."); - console.log("Account exported:", accountFile); -} catch (error) { - console.error("Failed to export account:", error.message); -} -``` - -Account files include the full account state, code, seed (if new), and tracked secret keys. - -## Exporting the Store - -Export the entire client store for backup or migration: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const snapshot = await client.exportStore(); - console.log("Store exported:", snapshot); - - // The snapshot has the shape { version: 1, data: ... } - // You can save this and later restore with client.importStore(snapshot) -} catch (error) { - console.error("Failed to export store:", error.message); -} -``` diff --git a/docs/builder/client/web-client/library/import.md b/docs/builder/client/web-client/library/import.md deleted file mode 100644 index 60f8efec..00000000 --- a/docs/builder/client/web-client/library/import.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Import -sidebar_position: 4 ---- - -# Importing Data with the Miden SDK - -This guide demonstrates how to import accounts, notes, and store data using the Miden SDK. - -## Importing Accounts - -### Importing by Account ID - -Import a public account by its ID (fetches state from the network): - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const account = await client.accounts.import("0x1234..."); - console.log("Imported account:", account.id().toString()); -} catch (error) { - console.error("Failed to import account:", error.message); -} -``` - -### Importing from an Account File - -Import an account that was previously exported: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // accountFile should be the result of a previous client.accounts.export() - const account = await client.accounts.import({ file: accountFile }); - console.log("Imported account:", account.id().toString()); -} catch (error) { - console.error("Failed to import account:", error.message); -} -``` - -### Importing a Public Account from Seed - -:::warning[Public accounts only] -Import-by-seed **only works for public accounts** — those originally created with `storage: "public"`. Private account state is not available on-chain, so it cannot be reconstructed from a seed alone. To transfer a private account between clients, use the [account file export/import](#importing-from-an-account-file) workflow instead. -::: - -Import a public account using an initialization seed: - -```typescript -import { MidenClient, AccountType, AuthScheme } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const account = await client.accounts.import({ - seed: initSeed, // Uint8Array - type: AccountType.MutableWallet, // AccountType.MutableWallet (default) or AccountType.ImmutableWallet - auth: AuthScheme.Falcon // Optional auth scheme - }); - console.log("Imported account:", account.id().toString()); -} catch (error) { - console.error("Failed to import public account:", error.message); -} -``` - -## Importing Notes - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // noteFile should be the result of a previous client.notes.export() - const noteId = await client.notes.import(noteFile); - console.log("Imported note:", noteId); -} catch (error) { - console.error("Failed to import note:", error.message); -} -``` - -### Note File Types - -There are three types of note files: - -1. **ID Note File** — Contains only the note ID and metadata -2. **Full Note File** — Contains complete note data including content and inclusion proof -3. **Details Note File** — Contains the note ID, metadata, and note details - -## Importing Store Data - -To import an entire store snapshot (overwrites current store): - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // snapshot should be the result of a previous client.exportStore() - await client.importStore(snapshot); - console.log("Store imported successfully"); -} catch (error) { - console.error("Failed to import store:", error.message); -} -``` - -:::warning -`importStore` is a destructive operation that completely overwrites the current store. Ensure you have a backup if needed. -::: diff --git a/docs/builder/client/web-client/library/index.md b/docs/builder/client/web-client/library/index.md deleted file mode 100644 index 9874e910..00000000 --- a/docs/builder/client/web-client/library/index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Library -sidebar_position: 0 ---- - -# Library - -The `@miden-sdk/ts-sdk` package provides a resource-based TypeScript API for interacting with the Miden rollup from the browser. - -## Client initialization - -The SDK provides several factory methods to create a client: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -// Default client (connects to localhost) -const client = await MidenClient.create(); - -// Testnet client (pre-configured RPC, auto-sync enabled) -const client = await MidenClient.createTestnet(); - -// Mock client (no network, for testing) -const client = await MidenClient.createMock(); - -// With custom options -const client = await MidenClient.create({ - rpcUrl: "http://localhost:57291", - autoSync: true, - proverUrl: "https://prover.example.com" -}); -``` - -## Resource-based API - -The client organizes functionality into resource namespaces: - -| Namespace | Purpose | Reference | -|-----------|---------|-----------| -| `client.accounts.*` | Create, retrieve, import, export accounts | [Accounts](./accounts.md), [New accounts](./new-accounts.md) | -| `client.transactions.*` | Mint, send, consume, swap, execute transactions | [New transactions](./new-transactions.md), [Transactions](./transactions.md) | -| `client.notes.*` | List, import, export, send/fetch private notes | [Notes](./notes.md), [Note transport](./note-transport.md) | -| `client.compile.*` | Compile MASM components and transaction scripts | [Compile](./compile.md) | -| `client.tags.*` | Manage note tags for sync filtering | [Tags](./tags.md) | -| `client.sync()` | Synchronize local state with the network | [Sync](./sync.md) | - -Additional top-level methods: - -| Method | Purpose | -|--------|---------| -| `client.importStore(snapshot)` | Import a store snapshot ([Import](./import.md)) | -| `client.exportStore()` | Export the store for backup ([Export](./export.md)) | -| `client.getSyncHeight()` | Get the current sync block height | -| `client.terminate()` | Release the Web Worker thread | - -## Resource management - -Each `MidenClient` holds a dedicated Web Worker thread. When you're done with a client instance, call `terminate()` to release the worker: - -```typescript -const client = await MidenClient.create({ rpcUrl }); - -// ... use the client ... - -// Clean up when done -client.terminate(); -``` - -Or use explicit resource management (TC39 proposal): - -```typescript -{ - using client = await MidenClient.create(); - // client.terminate() called automatically at end of scope -} -``` - -:::warning -After calling `terminate()`, all subsequent method calls will throw `Error("Client terminated")`. -::: diff --git a/docs/builder/client/web-client/library/mock.md b/docs/builder/client/web-client/library/mock.md deleted file mode 100644 index 2372bce7..00000000 --- a/docs/builder/client/web-client/library/mock.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Working with the mock client -draft: true -sidebar_position: 12 ---- - -# Working with the Mock Client - -The mock client is useful for testing and development, as it simulates interactions with the Miden blockchain without requiring a live network connection. - -The mock client provides the same resource-based API as the real client (`client.accounts.*`, `client.transactions.*`, etc.) plus mock-specific methods like `proveBlock()`. The simulated environment does not create blocks automatically, so `proveBlock()` must be called manually. - -## Basic Usage - -```typescript -import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; - -try { - // Create a mock client - const client = await MidenClient.createMock(); - - // Create accounts (same API as the real client) - const wallet = await client.accounts.create(); - const faucet = await client.accounts.create({ - type: AccountType.FungibleFaucet, - symbol: "TEST", - decimals: 8, - maxSupply: 10_000_000n - }); - - // Advance the mock chain - client.proveBlock(); - await client.sync(); - - // Mint tokens - await client.transactions.mint({ - account: faucet, - to: wallet, - amount: 1000n - }); - - // Advance and sync again - client.proveBlock(); - await client.sync(); - - // Consume all available notes - const result = await client.transactions.consumeAll({ account: wallet }); - console.log(`Consumed ${result.consumed} notes`); - - // Advance and sync to confirm - client.proveBlock(); - await client.sync(); - - // Check balance - const balance = await client.accounts.getBalance(wallet, faucet); - console.log(`Balance: ${balance}`); -} catch (error) { - console.error("Error:", error.message); -} -``` - -## Mock-Only Methods - -- `client.proveBlock()` — Advances the mock chain by one block -- `client.usesMockChain()` — Returns `true` for mock clients -- `client.serializeMockChain()` — Serializes mock chain state for snapshot/restore -- `client.serializeMockNoteTransportNode()` — Serializes mock note transport state - -## Restoring from Snapshot - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -// Create and use a mock client -const client = await MidenClient.createMock(); -// ... do some operations ... - -// Snapshot the state -const chainState = client.serializeMockChain(); -const transportState = client.serializeMockNoteTransportNode(); - -// Restore in a new client -const restored = await MidenClient.createMock({ - serializedMockChain: chainState, - serializedNoteTransport: transportState -}); -``` - -## Working with Note Transport - -The mock client includes a built-in note transport layer for testing private note delivery: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -const client = await MidenClient.createMock(); - -// Send a private note -await client.notes.sendPrivate({ - noteId: "0xnote...", - to: "mtst1recipient..." -}); - -// Fetch private notes -await client.notes.fetchPrivate(); - -// List received notes -const notes = await client.notes.list(); -console.log(`Received ${notes.length} notes`); -``` diff --git a/docs/builder/client/web-client/library/new-accounts.md b/docs/builder/client/web-client/library/new-accounts.md deleted file mode 100644 index 2b0e7cbd..00000000 --- a/docs/builder/client/web-client/library/new-accounts.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: New Accounts -sidebar_position: 2 ---- - -# Creating Accounts with the Miden SDK - -This guide demonstrates how to create and work with different types of accounts using the Miden SDK. - -## Creating a Regular Wallet Account - -```typescript -import { MidenClient, AccountType, AuthScheme } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Default wallet (private storage, mutable, Falcon auth) - const wallet = await client.accounts.create(); - - // Wallet with custom options - const wallet2 = await client.accounts.create({ - storage: "public", // "private" or "public" - type: AccountType.ImmutableWallet, // AccountType.MutableWallet (default) or AccountType.ImmutableWallet - auth: AuthScheme.ECDSA, // AuthScheme.Falcon (default) or AuthScheme.ECDSA - seed: "my-seed" // Optional deterministic seed (auto-hashed) - }); - - // Access account properties - console.log(wallet.id().toString()); // Unique identifier (hex) - console.log(wallet.nonce().toString()); // Current nonce (starts at 0) - console.log(wallet.isPublic()); // false - console.log(wallet.isPrivate()); // true - console.log(wallet.isFaucet()); // false - console.log(wallet.isRegularAccount()); // true -} catch (error) { - console.error("Failed to create wallet:", error.message); -} -``` - -## Creating a Custom Contract Account - -Custom contracts are regular accounts whose code is provided by the caller. Use `AccountType.ImmutableContract` (code cannot be updated after deployment) or `AccountType.MutableContract` (code can be updated). - -### Compiling the contract component - -Use `client.compile.component()` to compile Miden Assembly (MASM) code into an `AccountComponent`. See the [Compiler resource guide](./compile.md) for full details. - -```typescript -import { MidenClient, AccountType, AuthSecretKey, StorageSlot } from "@miden-sdk/ts-sdk"; - -const counterCode = ` - use miden::protocol::active_account - use miden::protocol::native_account - use miden::core::word - use miden::core::sys - - const COUNTER_SLOT = word("miden::tutorials::counter") - - pub proc get_count - push.COUNTER_SLOT[0..2] exec.active_account::get_item - exec.sys::truncate_stack - end - - pub proc increment_count - push.COUNTER_SLOT[0..2] exec.active_account::get_item - add.1 - push.COUNTER_SLOT[0..2] exec.native_account::set_item - exec.sys::truncate_stack - end -`; - -try { - const client = await MidenClient.create(); - - // Compile the MASM component (fresh CodeBuilder per call) - const component = await client.compile.component({ - code: counterCode, - slots: [StorageSlot.emptyValue("miden::tutorials::counter")] - }); - - // Generate a seed for deterministic account ID derivation - const seed = crypto.getRandomValues(new Uint8Array(32)); - - // auth must be kept by the caller for signing - const auth = AuthSecretKey.rpoFalconWithRNG(seed); - - // Create the contract — storage defaults to "public" for contracts - const contract = await client.accounts.create({ - type: AccountType.ImmutableContract, - seed, - auth, - components: [component] - }); - - console.log("Contract ID:", contract.id().toString()); - console.log("Is public:", contract.isPublic()); // true -} catch (error) { - console.error("Failed to create contract:", error.message); -} -``` - -### Storage mode - -Unlike wallets (which default to `"private"`), contracts default to `"public"` so other accounts can read their state for foreign procedure invocation (FPI). Pass `storage: "private"` to override. - -### Auth key - -`auth` must be a concrete `AuthSecretKey` object (not a string scheme). The caller must retain it — the client uses it for signing during `transactions.execute()`. - -## Creating a Faucet Account - -```typescript -import { MidenClient, AccountType, AuthScheme } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Create faucet — only required fields - const faucet = await client.accounts.create({ - type: AccountType.FungibleFaucet, - symbol: "TEST", - decimals: 8, - maxSupply: 10_000_000n // Accepts number or bigint - }); - - // With custom options - const faucet2 = await client.accounts.create({ - type: AccountType.FungibleFaucet, - symbol: "DAG", - decimals: 8, - maxSupply: 10_000_000n, - storage: "public", - auth: AuthScheme.Falcon - }); - - console.log(faucet.id().toString()); - console.log(faucet.isFaucet()); // true - console.log(faucet.isRegularAccount()); // false -} catch (error) { - console.error("Failed to create faucet:", error.message); -} -``` diff --git a/docs/builder/client/web-client/library/new-transactions.md b/docs/builder/client/web-client/library/new-transactions.md deleted file mode 100644 index 3ec07631..00000000 --- a/docs/builder/client/web-client/library/new-transactions.md +++ /dev/null @@ -1,333 +0,0 @@ ---- -title: New Transactions -sidebar_position: 9 ---- - -# Creating Transactions with the Miden SDK - -This guide demonstrates how to create and submit different types of transactions using the Miden SDK. We'll cover minting, sending, consuming, and swapping. - -## Basic Transaction Flow - -The simplified API handles the full transaction lifecycle automatically (execute, prove, submit). Each transaction method returns a transaction ID. - -```typescript -import { MidenClient, AccountType } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const faucet = await client.accounts.create({ - type: AccountType.FungibleFaucet, symbol: "TEST", decimals: 8, maxSupply: 10_000_000n - }); - const wallet = await client.accounts.create(); - - // Mint tokens — all steps handled automatically - const mintTxId = await client.transactions.mint({ - account: faucet, - to: wallet, - amount: 1000n - }); - console.log("Mint transaction:", mintTxId.toString()); - - // Wait for confirmation - await client.transactions.waitFor(mintTxId.toHex()); -} catch (error) { - console.error("Transaction failed:", error.message); -} -``` - -## Sending Tokens - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const txId = await client.transactions.send({ - account: senderWallet, - to: recipientWallet, - token: faucet, - amount: 100n, - type: "private", // "public" or "private" (default: "public") - reclaimAfter: 100, // Optional: block height for reclaim - timelockUntil: 90 // Optional: block height for timelock - }); - console.log("Send transaction:", txId.toString()); -} catch (error) { - console.error("Send failed:", error.message); -} -``` - -## Minting Tokens - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const txId = await client.transactions.mint({ - account: faucet, // The faucet account - to: wallet, // Recipient account - amount: 1000n, // Amount to mint - type: "private" // Optional (default: "public") - }); - console.log("Mint transaction:", txId.toString()); -} catch (error) { - console.error("Mint failed:", error.message); -} -``` - -## Consuming Notes - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Consume specific notes - const txId = await client.transactions.consume({ - account: wallet, - notes: [noteId1, noteId2] // Note IDs, InputNoteRecords, or Note objects - }); - - // Consume all available notes for an account - const result = await client.transactions.consumeAll({ account: wallet }); - console.log(`Consumed ${result.consumed} notes, ${result.remaining} remaining`); - if (result.txId) { - console.log("Transaction:", result.txId.toString()); - } - - // Limit the number of notes consumed - const limited = await client.transactions.consumeAll({ - account: wallet, - maxNotes: 5 - }); -} catch (error) { - console.error("Consume failed:", error.message); -} -``` - -## Swap Transactions - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const txId = await client.transactions.swap({ - account: wallet, - offer: { token: faucetA, amount: 100n }, - request: { token: faucetB, amount: 200n }, - type: "public" - }); - console.log("Swap transaction:", txId.toString()); -} catch (error) { - console.error("Swap failed:", error.message); -} -``` - -## Using a Remote Prover - -For better performance, offload proving to a remote prover: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - // Set a default prover URL for all transactions - const client = await MidenClient.create({ - proverUrl: "https://prover.example.com" - }); - - // All transactions automatically use the remote prover - const txId = await client.transactions.mint({ - account: faucet, - to: wallet, - amount: 1000n - }); - - // Or override per-transaction - const txId2 = await client.transactions.send({ - account: wallet, - to: recipient, - token: faucet, - amount: 100n, - prover: customProver // TransactionProver instance - }); -} catch (error) { - console.error("Transaction failed:", error.message); -} -``` - -:::note -Using a remote prover can significantly improve performance for complex transactions by offloading the computationally intensive proving work to a dedicated server. -::: - -## Waiting for Confirmation - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const txId = await client.transactions.mint({ - account: faucet, to: wallet, amount: 1000n - }); - - // Wait with default settings (60s timeout, 5s interval) - await client.transactions.waitFor(txId.toHex()); - - // Wait with custom options - await client.transactions.waitFor(txId.toHex(), { - timeout: 120_000, // 2 minutes - interval: 3_000, // Check every 3 seconds - onProgress: (status) => { - console.log(`Status: ${status}`); // "pending", "submitted", or "committed" - } - }); -} catch (error) { - console.error("Wait failed:", error.message); -} -``` - -## Transaction Preview - -Preview a transaction without submitting it: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const summary = await client.transactions.preview({ - operation: "send", - account: wallet, - to: recipient, - token: faucet, - amount: 100n - }); - console.log("Preview result:", summary); -} catch (error) { - console.error("Preview failed:", error.message); -} -``` - -## Custom Script Transactions - -Use `transactions.execute()` to run a custom MASM transaction script against an account. Compile the script first with [`client.compile.txScript()`](./compile.md). - -```typescript -import { MidenClient, AccountType, AuthSecretKey, StorageSlot } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Compile the script (and any libraries it depends on) - const script = await client.compile.txScript({ - code: ` - use external_contract::counter_contract - begin - call.counter_contract::increment_count - end - `, - libraries: [ - { namespace: "external_contract::counter_contract", code: counterContractCode } - ] - }); - - // Execute the script against the contract account - const txId = await client.transactions.execute({ - account: contractAccount.id(), - script - }); - - console.log("Transaction ID:", txId.toHex()); -} catch (error) { - console.error("Custom transaction failed:", error.message); -} -``` - -### Foreign Procedure Invocation (FPI) - -Pass `foreignAccounts` to allow the transaction to read state from other contracts: - -```typescript -try { - const client = await MidenClient.create(); - - // Get the procedure hash of the foreign contract's function - const counterComponent = await client.compile.component({ - code: counterContractCode, - slots: [StorageSlot.emptyValue("miden::tutorials::counter")] - }); - const getCountHash = counterComponent.getProcedureHash("get_count"); - - // Compile the FPI script - const script = await client.compile.txScript({ - code: ` - use external_contract::count_reader_contract - use miden::core::sys - begin - push.${getCountHash} - push.${counterAccount.id().suffix()} - push.${counterAccount.id().prefix()} - call.count_reader_contract::copy_count - exec.sys::truncate_stack - end - `, - libraries: [ - // "dynamic" linking (default) — foreign contract code lives on-chain - { namespace: "external_contract::count_reader_contract", code: countReaderCode } - ] - }); - - const txId = await client.transactions.execute({ - account: countReaderAccount.id(), - script, - foreignAccounts: [ - // Bare AccountRef — client fetches storage requirements automatically - counterAccount.id(), - // Or with explicit storage requirements: - // { id: counterAccount.id(), storage: requirements } - ] - }); - - console.log("FPI transaction:", txId.toHex()); -} catch (error) { - console.error("FPI transaction failed:", error.message); -} -``` - -### Advanced: Manual Transaction Request - -For full control over note inputs/outputs, build a `TransactionRequest` manually and call `submit()`: - -```typescript -import { MidenClient, TransactionRequestBuilder } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const request = new TransactionRequestBuilder() - .withCustomScript(transactionScript) - .withOwnOutputNotes(outputNotes) - .withExpectedOutputNotes(expectedNotes) - .build(); - - const txId = await client.transactions.submit(wallet, request); - console.log("Custom transaction:", txId.toString()); -} catch (error) { - console.error("Custom transaction failed:", error.message); -} -``` - -:::note -Custom transactions require understanding of the Miden VM and its instruction set. See the integration tests in [`new_transactions.test.ts`](https://github.com/0xMiden/wasm-bridge/blob/main/test/new_transactions.test.ts) for examples. -::: diff --git a/docs/builder/client/web-client/library/note-transport.md b/docs/builder/client/web-client/library/note-transport.md deleted file mode 100644 index 3c1ddf73..00000000 --- a/docs/builder/client/web-client/library/note-transport.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Note Transport -sidebar_position: 11 ---- - -# Note Transport with the Miden SDK - -This guide demonstrates how to use the note transport features in the Miden SDK. Note transport allows you to send and receive private notes using the Miden Note Transport network. - -## Sending Private Notes - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Send a private note to a recipient address - await client.notes.sendPrivate({ - noteId: "0xnote...", // ID of the note to send - to: "mtst1recipient..." // Recipient bech32 address - }); - - console.log("Private note sent successfully"); -} catch (error) { - console.error("Failed to send private note:", error.message); -} -``` - -## Fetching Private Notes - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Fetch private notes using pagination (default) - await client.notes.fetchPrivate(); - - // Or fetch all private notes at once - // (reserve for special cases like initial setup) - await client.notes.fetchPrivate({ mode: "all" }); - - // List the fetched notes - const notes = await client.notes.list(); - console.log(`Fetched ${notes.length} notes`); -} catch (error) { - console.error("Failed to fetch private notes:", error.message); -} -``` diff --git a/docs/builder/client/web-client/library/notes.md b/docs/builder/client/web-client/library/notes.md deleted file mode 100644 index 17d75cbd..00000000 --- a/docs/builder/client/web-client/library/notes.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Notes -sidebar_position: 6 ---- - -# Working with Notes in the Miden SDK - -This guide demonstrates how to work with notes in the Miden SDK. Notes are the primary way to transfer assets and data between accounts in the Miden network. - -## Listing Notes - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // List all input notes (received) - const allNotes = await client.notes.list(); - - // Filter by status - const committed = await client.notes.list({ status: "committed" }); - const consumed = await client.notes.list({ status: "consumed" }); - const expected = await client.notes.list({ status: "expected" }); - const processing = await client.notes.list({ status: "processing" }); - const unverified = await client.notes.list({ status: "unverified" }); - - // Filter by specific IDs - const specific = await client.notes.list({ ids: [noteId1, noteId2] }); - - for (const note of allNotes) { - console.log("Note ID:", note.id().toString()); - } -} catch (error) { - console.error("Failed to retrieve notes:", error.message); -} -``` - -## Retrieving a Single Note - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Get a single input note by ID (returns null if not found) - const note = await client.notes.get("0xnote..."); - if (note) { - console.log("Note ID:", note.id().toString()); - } -} catch (error) { - console.error("Failed to retrieve note:", error.message); -} -``` - -## Listing Sent Notes (Output Notes) - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // List all sent (output) notes - const sentNotes = await client.notes.listSent(); - - // Filter sent notes by status - const committedSent = await client.notes.listSent({ status: "committed" }); - - for (const note of sentNotes) { - console.log("Sent Note ID:", note.id().toString()); - } -} catch (error) { - console.error("Failed to retrieve sent notes:", error.message); -} -``` - -## Listing Consumable Notes - -Consumable notes are notes that can be spent by a specific account: - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - const wallet = await client.accounts.create(); - - // Get consumable notes for a specific account - const records = await client.notes.listAvailable({ account: wallet }); - - for (const record of records) { - console.log("Note ID:", record.inputNoteRecord().id().toString()); - for (const consumability of record.noteConsumability()) { - console.log("Account ID:", consumability.accountId().toString()); - } - } -} catch (error) { - console.error("Failed to retrieve consumable notes:", error.message); -} -``` - -## Importing and Exporting Notes - -```typescript -import { MidenClient, NoteExportFormat } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Import a note from a note file - const noteId = await client.notes.import(noteFile); - console.log("Imported note:", noteId); - - // Export a note - different formats available - const idExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Id }); - const fullExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Full }); - const detailsExport = await client.notes.export("0xnote...", { format: NoteExportFormat.Details }); -} catch (error) { - console.error("Failed to import/export note:", error.message); -} -``` - -Export formats: -- `NoteExportFormat.Id` — Exports only the note ID (only works for public notes) -- `NoteExportFormat.Full` — Exports the complete note with its inclusion proof -- `NoteExportFormat.Details` — Exports note details including metadata and creation block - -## Available Note Filter Statuses - -When listing notes, you can filter by these statuses: - -- `"committed"` — Notes committed to the blockchain -- `"consumed"` — Notes that have been spent -- `"expected"` — Notes expected to arrive -- `"processing"` — Notes currently being processed -- `"unverified"` — Unverified notes - -Or filter by specific IDs using `{ ids: [noteId1, noteId2] }`. diff --git a/docs/builder/client/web-client/library/sync.md b/docs/builder/client/web-client/library/sync.md deleted file mode 100644 index 4657cd65..00000000 --- a/docs/builder/client/web-client/library/sync.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Sync -sidebar_position: 7 ---- - -# Synchronizing State with the Miden SDK - -This guide demonstrates how to synchronize your local state with the Miden network. - -## Basic Synchronization - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - const syncSummary = await client.sync(); - - console.log("Current block number:", syncSummary.blockNum()); - console.log("Committed notes:", syncSummary.committedNotes()); - console.log("Updated accounts:", syncSummary.updatedAccounts()); - console.log("Committed transactions:", syncSummary.committedTransactions()); -} catch (error) { - console.error("Failed to sync state:", error.message); -} -``` - -## Sync with Timeout - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Sync with a 30-second timeout - const syncSummary = await client.sync({ timeout: 30_000 }); - - console.log("Synced to block:", syncSummary.blockNum()); -} catch (error) { - console.error("Sync timed out or failed:", error.message); -} -``` - -## Auto-Sync on Creation - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -// Client syncs automatically before returning -const client = await MidenClient.create({ autoSync: true }); - -// Or use createTestnet() which defaults to autoSync: true -const testnetClient = await MidenClient.createTestnet(); -``` - -## Get Current Sync Height - -```typescript -const height = await client.getSyncHeight(); -console.log("Current sync height:", height); -``` - -## Understanding the Sync Summary - -The `SyncSummary` object returned by `sync()` contains: - -- `blockNum()`: The current block number of the network -- `committedNotes()`: Array of note IDs that have been committed -- `updatedAccounts()`: Array of account IDs that have been updated -- `committedTransactions()`: Array of transaction IDs that have been committed diff --git a/docs/builder/client/web-client/library/tags.md b/docs/builder/client/web-client/library/tags.md deleted file mode 100644 index 7a6e88ff..00000000 --- a/docs/builder/client/web-client/library/tags.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Tags -sidebar_position: 8 ---- - -# Working with Note Tags in the Miden SDK - -Note tags are used to specify how notes should be executed and who can consume them. They also serve as a fuzzy filter mechanism for retrieving note updates during sync operations. - -## Basic Tag Operations - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Add a tag (accepts number) - await client.tags.add(12345); - - // Remove a tag - await client.tags.remove(12345); - - // List all tags (returns number[]) - const tags = await client.tags.list(); - console.log("Current tags:", tags); -} catch (error) { - console.error("Failed to manage tags:", error.message); -} -``` - -## Managing Multiple Tags - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Add multiple tags - const tagsToAdd = [123, 456, 789]; - for (const tag of tagsToAdd) { - await client.tags.add(tag); - } - - // List them - const allTags = await client.tags.list(); - console.log("All tags:", allTags); // [123, 456, 789] - - // Remove some - await client.tags.remove(123); - await client.tags.remove(456); -} catch (error) { - console.error("Failed to manage tags:", error.message); -} -``` - -## Tag Sources and Sync Behavior - -Tags can come from different sources: - -1. **Account Tags**: Automatically added for accounts being tracked by the client. -2. **Note Tags**: Automatically added for expected notes being tracked. -3. **User Tags**: Manually added by the user via `client.tags.add()`. - -During sync operations, the client uses these tags to retrieve note-related information for notes with matching tags. - -## Important Notes - -- Tags are `number` values (valid `u32` numbers) -- Tags for managed accounts are handled automatically by the client -- User-added tags can be removed, but system-generated tags cannot -- Use `NoteTag` helpers from WASM to compute tag values from faucet IDs diff --git a/docs/builder/client/web-client/library/transactions.md b/docs/builder/client/web-client/library/transactions.md deleted file mode 100644 index fdb1d800..00000000 --- a/docs/builder/client/web-client/library/transactions.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Transactions -sidebar_position: 10 ---- - -# Retrieving Transaction History with the Miden SDK - -This guide demonstrates how to retrieve and work with transaction history using the Miden SDK. - -## Listing All Transactions - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // List all transactions - const allTransactions = await client.transactions.list(); - - for (const tx of allTransactions) { - console.log("Transaction ID:", tx.id().toString()); - console.log("Account ID:", tx.accountId().toString()); - console.log("Block Number:", tx.blockNum().toString()); - - // Check transaction status - const status = tx.transactionStatus(); - if (status.isPending()) { - console.log("Status: Pending"); - } else if (status.isCommitted()) { - console.log("Status: Committed in block", status.getBlockNum()); - console.log("Committed at:", status.getCommitTimestamp()); - } else if (status.isDiscarded()) { - console.log("Status: Discarded"); - } - - // Account state changes - console.log("Initial State:", tx.initAccountState().toHex()); - console.log("Final State:", tx.finalAccountState().toHex()); - - // Notes information - console.log("Input Note Nullifiers:", tx.inputNoteNullifiers().map(n => n.toHex())); - console.log("Output Notes:", tx.outputNotes().toString()); - } -} catch (error) { - console.error("Failed to retrieve transactions:", error.message); -} -``` - -## Filtering Transactions - -```typescript -import { MidenClient } from "@miden-sdk/ts-sdk"; - -try { - const client = await MidenClient.create(); - - // Get uncommitted transactions - const uncommitted = await client.transactions.list({ status: "uncommitted" }); - for (const tx of uncommitted) { - console.log("Uncommitted:", tx.id().toString()); - } - - // Get specific transactions by ID - const specific = await client.transactions.list({ ids: [txId1, txId2] }); - - // Get expired transactions - const expired = await client.transactions.list({ expiredBefore: 1000 }); -} catch (error) { - console.error("Failed to filter transactions:", error.message); -} -``` - -## Transaction Statuses - -Transactions can have the following statuses: -- **Pending** — Transaction is waiting to be processed -- **Committed** — Transaction has been successfully included in a block -- **Discarded** — Transaction was discarded and will not be processed - -Check status using methods on the `TransactionStatus` object: -- `isPending()` — Returns `true` if the transaction is pending -- `isCommitted()` — Returns `true` if the transaction is committed -- `isDiscarded()` — Returns `true` if the transaction is discarded -- `getBlockNum()` — Returns the block number if committed, otherwise `null` -- `getCommitTimestamp()` — Returns the commit timestamp if committed, otherwise `null` diff --git a/docs/builder/tools/cli/_category_.yml b/docs/builder/tools/cli/_category_.yml deleted file mode 100644 index 0e4536df..00000000 --- a/docs/builder/tools/cli/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: CLI -position: 2 -collapsed: true diff --git a/docs/builder/tools/cli/cli-troubleshooting.md b/docs/builder/tools/cli/cli-troubleshooting.md deleted file mode 100644 index 1ef9fb2c..00000000 --- a/docs/builder/tools/cli/cli-troubleshooting.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -title: Troubleshooting -sidebar_position: 3 ---- - -## Troubleshooting and transaction lifecycle (CLI) - -This guide helps you troubleshoot common issues and understand the end-to-end lifecycle of transactions and notes in the Miden Client. - -### TL;DR checklist - -> Note: This section applies to the Miden CLI client. Guidance for the Rust and Web clients may differ. - -- Ensure you have a proper configuration setup: either a global config at `~/.miden/miden-client.toml` or a local config at `./.miden/miden-client.toml`. Local config takes priority if both exist. -- If you need a clean local state, delete the SQLite store file referenced by `store_filepath` (default: `.miden/store.sqlite3`). It will be recreated automatically on the next command. -- Verify your node RPC endpoint is reachable and correct in your configuration file (local `.miden/miden-client.toml` or global `~/.miden/miden-client.toml`). -- Run with debug output when troubleshooting: add `--debug` or set `MIDEN_DEBUG=true`. -- Run `miden-client sync` to refresh local state after errors involving missing data or outdated heights. - -### Enable debug output - -- CLI flag: `miden-client --debug ...` (overrides `MIDEN_DEBUG`) -- Environment variable: `MIDEN_DEBUG=true` - -When enabled, the transaction executor and script compiler emit debug logs that help diagnose MASM-level issues (you can also consult the Miden VM debugging instructions). - -### Typical CLI outputs when debugging - -```sh -# Enable debug output for a command -miden-client --debug send --sender --target --asset 100:: - -# Force non-interactive submission (e.g., CI) -miden-client send --force ... - -# Refresh local state -miden-client sync -``` - -If you see a gRPC error, it may include a status-derived kind (e.g. `Unavailable`, `InvalidArgument`) which narrows possible causes. - -### Common errors and how to resolve - -Below are representative errors you may encounter, their likely causes, and suggested fixes. - -#### `RpcError.GrpcError: Unavailable` / `DeadlineExceeded` -- Cause: Node is down, unreachable, or behind a load balancer that blocked the request. -- Fix: Check `rpc.endpoint` in your configuration file (local `.miden/miden-client.toml` or global `~/.miden/miden-client.toml`), verify the node is running/accessible, and retry. - -#### `RpcError.InvalidArgument` / `ExpectedDataMissing` / `InvalidResponse` -- Cause: Malformed request parameters or unexpected server response. -- Fix: Re-check command flags/inputs. If using partial IDs, ensure they map to a single entity. Update to the latest client if the server API has changed. - -#### Client/network compatibility mismatch -- Cause: Client and network versions or the genesis header commitment are incompatible. -- Symptoms: CLI may report messages like: - - ``` - accept header validation failed: server rejected request - please check your version and network settings - ``` - - or requests being rejected due to a mismatched genesis header commitment. -- Details: These are validated by the node by verifying client headers on gRPC requests. -- Fix: Ensure your client version matches the target network. Switch to the correct network or upgrade/downgrade the client accordingly. Verify the configured genesis header commitment matches the network, then retry. - -#### `ClientError.AccountDataNotFound()` -- Cause: The account is not known to the local store yet. -- Fix: Create/import the account first, or run `miden-client sync` to fetch it if it exists on-chain. - -#### `ClientError.AccountLocked()` -- Cause: Attempting to modify a locked account. -- Fix: Unlock or use another account as appropriate. - -#### `ClientError.StoreError(AccountCommitmentAlreadyExists(...))` -- Cause: Trying to apply a transaction whose final account commitment is already present locally. -- Fix: Ensure you are not re-applying the same transaction. Sync and check transaction status. - -#### `ClientError.NoteNotFoundOnChain()` / `RpcError.NoteNotFound()` -- Cause: The note has not been published/committed yet or the ID is incorrect. -- Fix: Verify the note ID. If it should exist, run `miden-client sync` and retry. - -#### `ClientError.TransactionInputError` / `TransactionScriptError` -- Cause: Invalid transaction inputs, script logic errors, or failing constraints. -- Fix: Run with `--debug` to collect execution logs. Validate input notes, foreign accounts, and script assumptions. - -#### `ClientError.TransactionProvingError` -- Cause: Local proving failed or remote prover returned an error. -- Fix: If using remote proving, verify `remote_prover_endpoint` is reachable and add `--delegate-proving`. Check prover logs. - -#### Recency/block delta errors -- Cause: Client is too far behind the network and validation enforces a max delta. -- Fix: Run `miden-client sync` or increase `max_block_number_delta` via `miden-client init --block-delta ` and re-run. - -### Transaction lifecycle (CLI-oriented overview) - -For the full protocol-level lifecycle, see the Miden book: [Transaction lifecycle](https://0xmiden.github.io/miden-docs/imported/miden-base/src/transaction.html#transaction-lifecycle). - -```mermaid -flowchart LR - A[Build Request] --> B[Validate Request] - A -.->|optional| C[Collect/Insert Input Notes] - A -.->|optional| D[Load Foreign Accounts] - B -.->|optional| K[Insert Public Note Recipients] - B --> E[Execute Transaction] - E --> F[Prove Transaction] - F --> G[Submit to Node] - G --> H[Track Locally] - - subgraph Tracking - H --> I[Update Account State] - H --> J[Update Notes/Tags] - end -``` - -Key states the CLI surfaces: - -- Transaction status: `Pending` (after execution), `Committed` (after node inclusion), `Discarded` (not included). -- Input notes: `Expected` → `Processing` → `Consumed` (after sync) or `Committed` if fetched with inclusion. - -### Configuration troubleshooting - -#### Config priority confusion -- **Issue**: Unclear which configuration is being used (local vs global) -- **Check**: Run commands from different directories to see if behavior changes -- **Local priority**: If `./.miden/miden-client.toml` exists, it overrides `~/.miden/miden-client.toml` -- **Fix**: Use `miden-client clear-config` to remove unwanted configurations, or `miden-client clear-config --global` to remove only global config. Note: Running `miden-client clear-config` without flags follows priority: if a local .miden folder exists, it removes only that one; if no local folder exists, it removes the global one. Use `--global` to specifically target the global configuration regardless of local config presence. - -#### Clean configuration reset -- **Complete reset**: Use `miden-client clear-config` to remove the active configuration (follows priority: local first, then global) -- **Selective reset**: Use `miden-client clear-config --global` to remove only global configuration while preserving local -- **Fresh start**: After clearing, run `miden-client init` (global) or `miden-client init --local` (local) to recreate - -### Recovery flow - -1. Re-run with `--debug` or `MIDEN_DEBUG=true` for richer logs. -2. Verify `rpc.endpoint` connectivity and timeouts. -3. Run `miden-client sync` to refresh local headers/notes. -4. If local DB is inconsistent for development purposes, delete the store file (`.miden/store.sqlite3` in local config or `~/.miden/store.sqlite3` in global config) and retry. -5. For configuration issues, use `miden-client clear-config` to reset config and `miden-client init` to recreate. -6. Adjust `max_block_number_delta` if strict recency checks block validation. -7. If proving errors persist with a remote prover, confirm `remote_prover_endpoint` and consider running locally to isolate the issue. - -### References - -- CLI debug flag and environment variable are documented in `CLI` and `Config` docs. -- Common error enums originate from the client and RPC layers. -- Protocol lifecycle: [Miden book — Transaction lifecycle](https://0xmiden.github.io/miden-docs/imported/miden-base/src/transaction.html#transaction-lifecycle) diff --git a/docs/builder/tools/cli/get-started/_category_.yml b/docs/builder/tools/cli/get-started/_category_.yml deleted file mode 100644 index 496c8c7b..00000000 --- a/docs/builder/tools/cli/get-started/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: Getting Started -position: 2 -collapsed: true diff --git a/docs/builder/tools/cli/get-started/cli-config.md b/docs/builder/tools/cli/get-started/cli-config.md deleted file mode 100644 index 0f874bc4..00000000 --- a/docs/builder/tools/cli/get-started/cli-config.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Config -sidebar_position: 1 ---- - -After installing the CLI (`cargo install miden-client-cli --locked`), use the client by running the following and adding the [relevant commands](../index.md#commands): - -```sh -miden-client -``` - -:::tip -Run `miden-client --help` for information on `miden` commands. -::: - -## Client Configuration - -We configure the client using a [TOML](https://en.wikipedia.org/wiki/TOML) file ([`miden-client.toml`]). The file gets created when running `miden-client init`, which creates a `.miden` directory structure to organize all client-related files. By default, this directory is located in the HOME path, i.e. at `~/.miden`. Running this command is optional, but can be done if you want to have more fine-grained control over the configuration of the `miden-client`. The TOML file can also be edited to use a different configuration for the client. - -```sh -store_filepath = ".miden/store.sqlite3" -secret_keys_directory = ".miden/keystore" -default_account_id = "0x012345678" -token_symbol_map_filepath = ".miden/token_symbol_map.toml" -remote_prover_endpoint = "http://localhost:8080" -package_directory = ".miden/packages" -max_block_number_delta = 256 - -[rpc] -endpoint = { protocol = "http", host = "localhost", port = 57291 } -timeout_ms = 10000 - -[note-transport] # optional -endpoint = "http://localhost:57292" -timeout_ms = 10000 -``` - -### Configuration Location and Priority - -The client supports both **global** and **local** configuration with intelligent priority handling: - -1. **Global Configuration** (default): Located at `~/.miden/miden-client.toml` in your home directory. The global directory location can be overridden with the `MIDEN_CLIENT_HOME` environment variable (see [Environment variables](#environment-variables)). -2. **Local Configuration** (project-specific): Located at `./.miden/miden-client.toml` in your current working directory - -**Priority Order**: Local configuration takes precedence over global configuration. If both exist, the client will use the local configuration and ignore the global one. - -### Initialization Options - -```bash -# Create global configuration (default behavior) -miden-client init - -# Create local configuration in current directory -miden-client init --local -``` - -The global configuration approach reduces per-project setup overhead while still allowing project-specific customization when needed. - -### Configuration Management - -#### Clear Command - -The `clear` command helps manage configuration by removing existing setups: - -```bash -# Remove local config if present, otherwise remove global config -miden-client clear - -# Force removal of global configuration only -miden-client clear --global -``` - -**Priority Behavior**: The clear command follows the same priority logic as config loading - it will remove the local configuration first if it exists, and only remove the global configuration if no local configuration is found. This ensures you don't accidentally lose both configurations at once. - -**Use Cases**: -- Resetting configuration between releases when changes require clean state -- Switching from local to global configuration (or vice versa) -- Troubleshooting configuration-related issues - -### RPC - -An `rpc` section is used to configure the connection to the Miden node. It contains the following fields: - -- `endpoint`: The endpoint of the Miden node. It can be a specific url (like `"https://rpc.devnet.miden.io"`) or a table with the following fields: - - `protocol`: The protocol used to connect to the node. It can be either `http` or `https`. - - `host`: The host of the node. It can be either an IP address or a domain name. - - `port`: The port of the node. It is an integer. - -This field can be set with the `--network` flag when running the `miden-client init` command. For example, to set the testnet endpoint, you can run: `miden-client init --network testnet`. - -:::note - -- Running the node locally for development is encouraged. -- However, the endpoint can point to any remote node. - ::: - -### Store and keystore - -The `store_filepath` field is used to configure the path to the SQLite database file used by the client. The `secret_keys_directory` field is used to configure the path to the directory where the keystore files are stored. The default values are `.miden/store.sqlite3` and `.miden/keystore`, respectively, organizing these files within the `.miden` directory structure. - -The store filepath can be set when running the `miden-client init` command with the `--store-path` flag. - -### Default account ID - -The `default_account_id` field contains the default account ID to be used by the client's command when no `account` is provided. It is a hexadecimal string that represents the account ID. The field is optional, and if not set, the client will set it once the first account is created. - -By default none is set, but you can set and unset it with: - -```sh -miden-client account --default #Sets default account -miden-client account --default none #Unsets default account -``` - -:::note -The account must be tracked by the client in order to be set as the default account. -::: - -You can also see the current default account ID with: - -```sh -miden-client account --default -``` - -### Token symbol map - -The `token_symbol_map_filepath` field is used to configure the path to the TOML file that contains the token symbol map. The token symbol map stores the faucet details for different token symbols. The default value is `.miden/token_symbol_map.toml`. - -This file must be updated manually with known token symbol mappings. A sample token symbol map file looks like this: - -```toml -# This addresses in this file are not real and are only for demonstration purposes. -ETH = { id = "0xa031cc137adecd54", decimals = 18 } -BTC = { id = "0x2f3c4b5e6a7b8c9d", decimals = 8 } -``` - -The `id` field is the faucet account ID and the `decimals` field is the number of decimals used by the token. - -When the client is configured with a token symbol map, any transaction command that specifies an asset can use the token symbol instead of the asset ID. For example, when specifying an asset normally you would use something like: -`1::0x2f3c4b5e6a7b8c9d` - -But if the faucet is included in the token symbol map (using the sample above as the mapping), you would use: -`0.00000001::BTC` - -Notice how the amount specified when using the token symbol takes into account the decimals of the token (`1` base unit of the token is `0.00000001` for BTC as it uses 8 decimals). - -### Remote prover endpoint - -The `remote_prover_endpoint` field is used to configure the usage of a remote prover. You can set a remote prover when calling the `miden-client prover` command with the `--remote-prover-endpoint` flag. The prover will be used for all transactions that are executed with the `miden` command. By default, no remote prover is used and all transactions are executed locally. - -### Package directory -`Packages` are Miden's native packaging format. -This structure contains the outputs of a compiled project, with all of its corresponding metadata. Specifically, a `Package` may contain the compiled MAST for an `Account Component` in the form of a `Library`. - -The `package_directory` field is used to configure the path to the directory where the account components are stored in package (`.masp`) form. The default value is `.miden/packages`. - -In this directory you can place the packages used to create the account components. These define the interface of the account that will be created. - -For more information on miden packages, see: -- [The mast-package crate](https://github.com/0xMiden/miden-vm/blob/next/crates/mast-package/README.md) -- [The Miden package's status article on the Miden compiler](https://0xmiden.github.io/compiler/appendix/known-limitations.html#packaging) - -### Block Delta - -The `max_block_number_delta` is an optional field that is used to configure the maximum number of blocks the client can be behind the network. - -If not set, the default behavior is to ignore the block difference between the client and the network. If set, the client will check this difference is within the specified maximum when validating a transaction. - -```sh -miden-client init --block-delta 256 -``` - -### Environment variables - -- `MIDEN_CLIENT_HOME`: Overrides the default global `.miden` directory (`~/.miden`). When set, all commands that reference the global directory will use the specified path instead. This is useful for keeping separate environments or storing the client data in a non-default location. For example: - - ```sh - export MIDEN_CLIENT_HOME=/path/to/custom/miden - miden-client init - ``` - - Note that this only affects the **global** directory. If a local `./.miden` directory exists, it still takes precedence over the global one (whether default or overridden). - -- `MIDEN_DEBUG`: When set to `true`, enables debug mode on the transaction executor and the script compiler. For any script that has been compiled and executed in this mode, debug logs will be output in order to facilitate MASM debugging ([these instructions](https://0xMiden.github.io/miden-vm/user_docs/assembly/debugging.html) can be used to do so). This variable can be overridden by the `--debug` CLI flag. - -### Note Transport - -A `note-transport` section is used to configure the connection to the Miden Note Transport node used in the exchange of private notes. It contains the following fields: -- `endpoint`: The endpoint of the Miden Note Transport node; -- `timeout-ms`: The timeout employed in client requests to the node. - -:::note -- Running the node locally for development is encouraged. -- However, the endpoint can point to any remote node. -::: diff --git a/docs/builder/tools/cli/get-started/create-account-use-faucet.md b/docs/builder/tools/cli/get-started/create-account-use-faucet.md deleted file mode 100644 index 00e831ff..00000000 --- a/docs/builder/tools/cli/get-started/create-account-use-faucet.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Create account -sidebar_position: 3 ---- - -In this section, we show you how to create a new local Miden account and how to receive funds from the public Miden faucet website. - -## Configure the Miden CLI - -The Miden CLI facilitates interaction with the Miden rollup and provides a way to execute and prove transactions. - -1. If you haven't already done so, open your terminal and create a new directory to store the Miden Client state. - - ```sh - mkdir miden-client - cd miden-client - ``` - -2. Install the Miden CLI. - - ```sh - cargo install miden-client-cli --locked - ``` - -3. Verify the installation: - - ```sh - miden-client --version - ``` - -## Create a new Miden account - -1. Create a new account of type `mutable` using the following command: - - ```sh - miden-client new-wallet --mutable - ``` - -2. List all created accounts by running the following command: - - ```sh - miden-client account -l - ``` - -Save the account ID for a future step. - -## Request tokens from the public faucet - -1. Navigate to the [Miden faucet website](https://faucet.testnet.miden.io/). - -2. Copy the **Account ID** printed by the `miden-client account -l` command in the previous step. - -3. Paste this ID into the **Request test tokens** input field on the faucet website and click **Send Private Note**. - -:::tip -You can also click **Send Public Note**. If you do this, the note's details will be public and you will not need to download and import it, so you can skip to [Sync the client](#sync-the-client). -::: - -4. After a few seconds your browser should download a file called `note.mno` (mno = Miden note). It contains the funds the faucet sent to your address. - -5. Save this file on your computer, you will need it for the next step. - -## Import the note into the Miden Client - -1. Import the private note that you have received: - - ```sh - miden-client import /note.mno - ``` - -2. View the note's information: - - ```sh - miden-client notes - ``` - -:::tip The importance of syncing -The note is listed as `Expected` because you have received a private note but have not yet synced your view of the rollup to check that the note is the result of a valid transaction. Before consuming the note, you need to update your view of the rollup by syncing. -::: - -### Sync the client - -Run the `sync` command periodically to keep informed about updates on the node: - -```sh -miden-client sync -``` - -You will see something like this as output: - -```sh -State synced to block 179672 -New public notes: 0 -Committed notes: 1 -Tracked notes consumed: 0 -Tracked accounts updated: 0 -Locked accounts: 0 -Committed transactions: 0 -``` - -## Consume the note and receive the funds - -1. After syncing, the note should have a `Committed` status, confirming it exists at the rollup level: - - ```sh - miden-client notes - ``` - -2. Find your account and note ID: - - ```sh - miden-client account - miden-client notes - ``` - -3. Consume the note and add the funds to your account: - - ```sh - miden-client consume-notes --account - ``` - -4. The note is now `Processing`. Sync again to confirm: - - ```sh - miden-client sync - ``` - -5. After syncing, the note should show as `Consumed`: - - ```sh - miden-client notes - ``` - -You just created a client-side zero-knowledge proof locally on your machine and submitted it to the Miden rollup. - -:::tip -You only need to copy the first 7 characters after `0x` of the Note ID. -::: - -## View confirmations - -View your updated account's vault: - -```sh -miden-client account --show -``` - -You should now see your account's vault containing the funds sent by the faucet. - -## Debugging tips - -- Need a fresh start? All state is maintained in `store.sqlite3`, located in the directory defined in `miden-client.toml`. Delete this file to clear all state — it recreates on any command execution. -- Only execute `miden-client` from the directory containing your `miden-client.toml`. diff --git a/docs/builder/tools/cli/get-started/index.md b/docs/builder/tools/cli/get-started/index.md deleted file mode 100644 index 15110b4f..00000000 --- a/docs/builder/tools/cli/get-started/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Getting started -sidebar_position: 2 ---- - -This section shows you how to get started with the Miden CLI by generating a new account, requesting funds from a public faucet, consuming private notes, and creating pay-to-id notes. - -By the end of this tutorial, you will have: - -- Installed and configured the Miden CLI. -- Connected to a Miden node. -- Created an account and requested funds from the faucet. -- Transferred assets between accounts by creating and consuming notes. - -## Prerequisites - -- [Rust](https://www.rust-lang.org/learn/get-started) version 1.88 or later. -- Install the CLI: `cargo install miden-client-cli --locked` diff --git a/docs/builder/tools/cli/get-started/p2p-private.md b/docs/builder/tools/cli/get-started/p2p-private.md deleted file mode 100644 index d418ca92..00000000 --- a/docs/builder/tools/cli/get-started/p2p-private.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Private peer-to-peer transfer -sidebar_position: 5 ---- - -In this section, we show you how to make private transactions and send funds to another account using the Miden CLI. - -:::info Prerequisite -Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account and should *not* have reset the state of your local client. -::: - -## Create a second account - -1. Create a second account to send funds to. Previously, we created a `mutable` account (`Account A`). Now, create another `mutable` account (`Account B`): - - ```sh - miden-client new-wallet --mutable - ``` - -2. List the newly created accounts: - - ```sh - miden-client account -l - ``` - - You should see two accounts. - -## Transfer assets between accounts - -1. Transfer tokens from Account A to Account B: - - ```sh - miden-client send --sender --target --asset 50:: --note-type private - ``` - - :::note - The faucet account ID can be found on the [Miden faucet website](https://testnet.miden.io/) under the title **Miden faucet**. - ::: - - This generates a private Pay-to-ID (`P2ID`) note containing `50` tokens. - -2. Sync the accounts: - - ```sh - miden-client sync - ``` - -3. Get the note ID: - - ```sh - miden-client notes - ``` - -4. Have Account B consume the note: - - ```sh - miden-client consume-notes --account - ``` - - :::tip - It's possible to use a short version of the note ID: 7 characters after the `0x` is sufficient, e.g. `0x6ae613a`. - ::: - -5. Verify both accounts: - - ```sh - miden-client account --show - miden-client account --show - ``` - -## Using the note transport network - -The steps above assume that the client owns both accounts. To exchange notes with other users, the note transport network can be used. The sender (`Account A`) will need the address (bech32 string) of the recipient (`Account B`). - -After creating the note (step 1 above), get the created note ID with `miden-client notes --list`. Then send that note through the note transport network: - -```sh -miden-client notes --send -``` - -The recipient can then fetch the note: - -```sh -miden-client notes --fetch -``` - -The note will then be available to be consumed. - -:::note -The client will fetch notes for tracked note tags. By default, note tags are derived from the recipient's account ID. For increased privacy, use random tags and track them with `miden-client tags --add `. -::: - -## Clear data - -All state is maintained in `store.sqlite3`, located in the directory defined in `miden-client.toml`. To clear all state, delete this file. It recreates on any command execution. diff --git a/docs/builder/tools/cli/get-started/p2p-public.md b/docs/builder/tools/cli/get-started/p2p-public.md deleted file mode 100644 index 4b52f6b3..00000000 --- a/docs/builder/tools/cli/get-started/p2p-public.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Peer-to-peer transfer -sidebar_position: 4 ---- - -In this section, we show you how to execute transactions and send funds to another account using the Miden CLI and public notes. - -:::info Prerequisite -Complete the [Create account](./create-account-use-faucet.md) tutorial first. You should have a funded account and should *not* have reset the state of your local client. -::: - -## Create a second client - -This is an alternative to the [private P2P transactions](./p2p-private.md) process. - -In this tutorial, we use two different clients to simulate two different remote users who don't share local state. Use two terminals, each with their own state (using their own `miden-client.toml`). - -1. Create a new directory to store the new client. - - ```sh - mkdir miden-client-2 - cd miden-client-2 - ``` - -2. On the new client, create a new account with public storage: - - ```sh - miden-client new-wallet --mutable -s public - ``` - - We refer to this account as _Account C_. The account's storage mode is `public`, meaning its details are public and its latest state can be retrieved from the node. - -3. List and view the account: - - ```sh - miden-client account -l - ``` - -## Transfer assets between accounts - -1. Switch back to the first `miden-client` directory. From the first client, run: - - ```sh - miden-client send --sender --target --asset 50:: --note-type public - ``` - - :::note - The faucet account ID can be found on the [Miden faucet website](https://testnet.miden.io/) under the title **Miden faucet**. - ::: - - This generates a Pay-to-ID (`P2ID`) note containing `50` tokens. As the note is public, the second account can receive the details by syncing with the node. - -2. Sync the second client: - - ```sh - miden-client sync - ``` - -3. View the received note: - - ```sh - miden-client notes --list - ``` - -4. Have account C consume the note: - - ```sh - miden-client consume-notes --account - ``` - - :::tip - It's possible to use a short version of the note ID: 7 characters after the `0x` is sufficient, e.g. `0x6ae613a`. - ::: - -Account C has now consumed the note. Verify the new assets: - -```sh -miden-client account --show -``` - -## Clear state - -All state is maintained in `store.sqlite3`, located in the directory defined in `miden-client.toml`. To clear all state, delete this file. It recreates on any command execution. diff --git a/docs/builder/tools/cli/index.md b/docs/builder/tools/cli/index.md deleted file mode 100644 index 32d42663..00000000 --- a/docs/builder/tools/cli/index.md +++ /dev/null @@ -1,412 +0,0 @@ ---- -title: CLI -sidebar_position: 1 ---- - -The following document lists the commands that the CLI currently supports. - -:::tip -Use `--help` as a flag on any command for more information. -::: - -## Usage - -Call a command on the `miden-client` like this: - -```sh -miden-client -``` - -Optionally, you can include the `--debug` flag to run the command with debug mode, which enables debug output logs from scripts that were compiled in this mode: - -```sh -miden-client --debug -``` - -Note that the debug flag overrides the `MIDEN_DEBUG` environment variable. - -## Commands - -### `init` - -Creates a configuration file for the client in the current directory. Running this command is optional, as the client will self-initialize by default. By default, the command uses the Testnet network. - -```sh -# This will create a config file named `miden-client.toml` using default values -# This file contains information useful for the CLI like the RPC provider and database path -miden-client init - -# You can set up the CLI for any of the default networks -miden-client init --network testnet -miden-client init --network devnet -miden-client init --network localhost - -# You can also specify a custom network -miden-client init --network 18.203.155.106 -# You can specify the port -miden-client init --network 18.203.155.106:8080 -# You can also specify the protocol (http/https) -miden-client init --network https://18.203.155.106 -# You can specify both -miden-client init --network https://18.203.155.106:1234 - -# You can use the --store-path flag to override the default store config -miden-client init --store-path db/store.sqlite3 - -# You can use the --block-delta flag to set maximum number of blocks the client can be behind -miden-client init --block-delta 250 - -# You can provide both flags -miden-client init --network 18.203.155.106 --store-path db/store.sqlite3 - -# You can set a remote prover to offload the proving process (along with the `--delegate-proving` flag in transaction commands) -miden-client init --remote-prover-endpoint - -# To enable the transport layer, specify the endpoint -miden-client init --note-transport-endpoint -``` - -More information on the configuration file can be found in the [configuration section](./get-started/cli-config.md). - -### `account` - -Inspect account details. - -#### Action Flags - -| Flags | Description | Short Flag | -| ---------------- | ------------------------------------------------ | ---------- | -| `--list` | List all accounts monitored by this client | `-l` | -| `--show ` | Show details of the account for the specified ID | `-s` | -| `--default ` | Manage the setting for the default account | `-d` | - -The `--show` flag also accepts a partial ID instead of the full ID. For example, instead of: - -```sh -miden-client account --show 0x8fd4b86a6387f8d8 -``` - -You can call: - -```sh -miden-client account --show 0x8fd4b86 -``` - -For the `--default` flag, if `` is "none" then the previous default account is cleared. If no `` is specified then the default account is shown. - -### `new-wallet` - -Creates a new wallet account. - -A basic wallet is comprised of a basic authentication component (for RPO Falcon signature verification), alongside a basic wallet component (for sending and receiving assets). - -This command has three optional flags: - -- `--storage-mode `: Used to select the storage mode of the account (private if not specified). It may receive "private" or "public". -- `--mutable`: Makes the account code mutable (it's immutable by default). -- `--extra-packages `: Specifies a list of file paths for packages holding account components to include in the account. If the packages contain placeholders, the CLI will prompt the user to enter the required data for instantiating storage appropriately. -- `--init-storage-data-path `: Specifies an optional file path to a TOML file containing key/value pairs used for initializing storage. Each key should map to a placeholder within the packages' component metadata. The CLI will prompt for any keys that are not present in the file. - -After creating an account with the `new-wallet` command, it is automatically stored and tracked by the client. This means the client can execute transactions that modify the state of accounts and track related changes by synchronizing with the Miden network. - -### `new-account` - -Creates a new account and saves it locally. - -An account may be composed of one or more components, each with its own storage and distinct functionality. This command lets you build a custom account by selecting an account type and optionally adding extra component packages. - -This command has four flags: - -- `--storage-mode `: Specifies the storage mode of the account. It accepts either "private" or "public", with "private" as the default. -- `--account-type `: Specifies the type of account to create. Accepted values are: - - `fungible-faucet` - - `non-fungible-faucet` - - `regular-account-immutable-code` - - `regular-account-updatable-code` -- `--packages `: Specifies a list of file paths for packages holding account components to include in the account. If the packages contain placeholders, the CLI will prompt the user to enter the required data for instantiating storage appropriately. -- `--init-storage-data-path `: Specifies an optional file path to a TOML file containing key/value pairs used for initializing storage. Each key should map to a placeholder within the packages' component metadata. The CLI will prompt for any keys that are not present in the file. - -After creating an account with the `new-account` command, the account is stored locally and tracked by the client, enabling it to execute transactions and synchronize state changes with the Miden network. - -#### Examples - -```bash -# Create a new wallet with default settings (private storage, immutable, no extra components) -miden-client new-wallet - -# Create a new wallet with public storage and a mutable code -miden-client new-wallet --storage-mode public --mutable - -# Create a new wallet that includes custom packages -miden-client new-wallet --extra-packages packages/custom-package.masp - -# Create a fungible faucet with interactive input -miden-client new-account --account-type fungible-faucet --packages packages/basic-fungible-faucet.masp - -# Create a fungible faucet with preset fields -miden-client new-account --account-type fungible-faucet --packages packages/basic-fungible-faucet.masp --init-storage-data-path init_data.toml -``` - -where `init_data.toml` is a TOML file with the following example content: -```toml -token_metadata.max_supply = 1000000000 -token_metadata.decimals = 6 -token_metadata.ticker = "TEST" -``` - -### `info` - -View a summary of the current client state. - -#### Action Flags - -| Flag | Description | Short Flag | -| -------------- | -------------------------------------------- | ---------- | -| `--rpc-status` | Display detailed RPC node status information | `-r` | - -When using the `--rpc-status` flag, the command displays additional information about the RPC node including: - -- Node version -- Genesis commitment -- Store connection status and chain tip -- Block producer status and chain tip - -### `notes` - -View and manage notes. Also, exchange private notes using the note transport network. - -#### Action Flags - -| Flags | Description | Short Flag | -| ----------------------- | -------------------------------------------------------- | ---------- | -| `--list []` | List input notes | `-l` | -| `--show ` | Show details of the input note for the specified note ID | `-s` | -| `--send
` | Send a note using the note transport network | | -| `--fetch` | Fetch notes from the note transport network | | - -The `--list` flag receives an optional filter: - expected: Only lists expected notes. - committed: Only lists committed notes. - consumed: Only lists consumed notes. - processing: Only lists processing notes. - consumable: Only lists consumable notes. An additional `--account-id ` flag may be added to only show notes consumable by the specified account. -If no filter is specified then all notes are listed. - -The `--show` flag also accepts a partial ID instead of the full ID. For example, instead of: - -```sh -miden-client notes --show 0x70b7ecba1db44c3aa75e87a3394de95463cc094d7794b706e02a9228342faeb0 -``` - -You can call: - -```sh -miden-client notes --show 0x70b7ec -``` - -To send a private note, the `--send` flag sends a note using the note transport network. -The note ID (hex, in full or a prefix) and recipient's address (bech32) must be provided. -The note is assumed to be stored in the store (e.g., imported using [`import`](#import)). - -You can call: - -```sh -miden-client notes --send 0xc1234567 mm1qpkdyek2c0ywwvzupakc7zlzty8qn2qnfc -``` - -To fetch private notes, the `--fetch` allows to download notes from the note transport network. -Only notes for tracked tags will be fetched (e.g. `miden-client tags --list`). -The downloaded notes will be added to the store. - -```sh -miden-client notes --fetch -``` - -### `sync` - -Sync the client with the latest state of the Miden network. Shows a brief summary at the end. - -### `tags` - -View and add tags. - -#### Action Flags - -| Flag | Description | Aliases | -| ---------------- | ----------------------------------------------------------- | ------- | -| `--list` | List all tags monitored by this client | `-l` | -| `--add ` | Add a new tag to the list of tags monitored by this client | `-a` | -| `--remove ` | Remove a tag from the list of tags monitored by this client | `-r` | - -### `tx` - -View transactions. - -#### Action Flags - -| Command | Description | Aliases | -| -------- | ------------------------- | ------- | -| `--list` | List tracked transactions | -l | - -After a transaction gets executed, two entities start being tracked: - -- The transaction itself: It follows a lifecycle from `Pending` (initial state) and `Committed` (after the node receives it). It may also be `Discarded` if the transaction was not included in a block. -- Output notes that might have been created as part of the transaction (for example, when executing a pay-to-id transaction). - -### Transaction creation commands - -#### `mint` - -Creates a note that contains a specific amount tokens minted by a faucet, that the target Account ID can consume. - -Usage: `miden-client mint --target --asset :: --note-type ` - -#### `consume-notes` - -Account ID consumes a list of notes, specified by their Note ID. - -Usage: `miden-client consume-notes --account [NOTES]` - -For this command, you can also provide a partial ID instead of the full ID for each note. So instead of - -```sh -miden-client consume-notes --account 0x70b7ecba1db44c3aa75e87a3394de95463cc094d7794b706e02a9228342faeb0 0x80b7ecba1db44c3aa75e87a3394de95463cc094d7794b706e02a9228342faeb0 -``` - -You can do: - -```sh -miden-client consume-notes --account 0x70b7ecb 0x80b7ecb -``` - -Additionally, you can optionally not specify note IDs, in which case any note that is known to be consumable by the executor account ID will be consumed. - -Either `Expected` or `Committed` notes may be consumed by this command, changing their state to `Processing`. It's state will be updated to `Consumed` after the next sync. - -#### `send` - -Sends assets to another account. Sender Account creates a note that a target Account ID can consume. The asset is identified by the tuple `(FAUCET ID, AMOUNT)`. The note can be configured to be recallable making the sender able to consume it after a height is reached. - -Usage: `miden-client send --sender --target --asset :: --note-type ` - -#### `swap` - -The source account creates a `SWAP` note that offers some asset in exchange for some other asset. When another account consumes that note, it will receive the offered asset amount and the requested asset will removed from its vault (and put into a new note which the first account can then consume). Consuming the note will fail if the account doesn't have enough of the requested asset. - -Usage: `miden-client swap --source --offered-asset :: --requested-asset :: --note-type ` - -### `address` - -View and manage addresses. - -#### Action Subcommands - -| Subcommand | Description | -| -------------------------------- | ---------------------------------------------------------------------------------------| -| `list ` | List all addresses or only for the specified account ID (default command) | -| `add ` | Bind an address for an interface for the specified account ID with optional tag length | -| `remove
` | Remove an address for the specified account ID | - -The `list` subcommand optionally takes an account ID to only show the addresses of that account, if it is not provided, it will show all addresses of all accounts. - -```sh -miden-client address list 0x17f13f4f83a8e8100c19d2961dfda2 -``` - -`add` and `remove` take the account ID as a mandatory argument, and also the interface of the address, this values can be: -- `BasicWallet`: The basic wallet interface. - -Note: the `Unspecified` denotes an address not bound to any interface, it's the default address for every account created. - -```sh -miden-client address add 0x17f13f4f83a8e8100c19d2961dfda2 BasicWallet 10 -``` - -```sh -miden-client address remove 0x17f13f4f83a8e8100c19d2961dfda2 mlcl1qple0ejnutx8zyp0cm0pme9wjfgqz0u9djq -``` - -#### Tips - -For `send` and `consume-notes`, you can omit the `--sender` and `--account` flags to use the default account defined in the [config](./get-started/cli-config.md). If you omit the flag but have no default account defined in the config, you'll get an error instead. - -For every command which needs an account ID (either wallet or faucet), you can also provide a partial ID instead of the full ID for each account. So instead of - -```sh -miden-client send --sender 0x80519a1c5e3680fc --target 0x8fd4b86a6387f8d8 --asset 100::0xa99c5c8764d4e011 -``` - -You can do: - -```sh -miden-client send --sender 0x80519 --target 0x8fd4b --asset 100::0xa99c5c8764d4e011 -``` - -:::note -The only exception is for using IDs as part of the asset, those should have the full faucet's account ID. -::: - -#### Transaction confirmation - -When creating a new transaction, a summary of the transaction updates will be shown and confirmation for those updates will be prompted: - -```sh -miden-client ... - -TX Summary: - -... - -Continue with proving and submission? Changes will be irreversible once the proof is finalized on the network (y/N) -``` - -This confirmation can be skipped in non-interactive environments by providing the `--force` flag (`miden-client send --force ...`). - -#### Delegated proving - -If a remote prover is configured, the CLI can offload the proving process to it. This is done by providing the `--delegate-proving` flag when creating a transaction. The CLI will then send the transaction to the remote prover for processing. - -### Importing and exporting - -#### `export` - -Export input note data to a binary file . - -| Flag | Description | Aliases | -| ----------------------------- | ------------------------------------- | ------- | -| `--filename ` | Desired filename for the binary file. | `-f` | -| `--export-type ` | Exported note type. | `-e` | - -##### Export type - -The user needs to specify how the note should be exported via the `--export-type` flag. The following options are available: - -- `id`: Only the note ID is exported. When importing, if the note ID is already tracked by the client, the note will be updated with missing information fetched from the node. This works for both public and private notes. If the note isn't tracked and the note is public, the whole note is fetched from the node and is stored for later use. -- `full`: The note is exported with all of its information (metadata and inclusion proof). When importing, the note is considered unverified. The note may not be consumed directly after importing as its block header will not be stored in the client. The block header will be fetched and be used to verify the note during the next sync. At this point the note will be committed and may be consumed. -- `partial`: The note is exported with minimal information and may be imported even if the note is not yet committed on chain. At the moment of importing the note, the client will check the state of the note by doing a note sync, using the note's tag. Depending on the response, the note will be either stored as "Expected" or "Committed". - -#### `import` - -Import entities managed by the client, such as accounts and notes. The type of entities is inferred. - -The `--overwrite` flag can be used when importing accounts. It allows the user to overwrite existing accounts with the same ID. This is useful when you want to update the account's information or replace it with a new version. - -### Executing scripts - -#### `exec` - -Execute the specified program against the specified account. - -| Flag | Description | Aliases | -| ----------------------------- | -------------------------------------------- | ------- | -| `--account ` | Account ID to use for the program execution. | `-a` | -| `--script-path ` | Path to script's source code to be executed. | `-s` | -| `--inputs-path ` | Path to the inputs file. | `-i` | -| `--hex-words` | Print the output stack grouped into words. | | - -The file referenced by `--inputs-path` should contain a TOML array of inline tables, where each table has two fields: - `key`: a 256-bit hexadecimal string representing a word to be used as a key for the input entry. The hexadecimal value must be prefixed with 0x. - `values`: an array of 64-bit unsigned integers representing field elements to be used as values for the input entry. Each integer must be written as a separate string, within double quotes. - -The input file should contain a TOML table called `inputs`, as in the following example: - -```toml -inputs = [ { key = "0x0000001000000000000000000000000000000000000000000000000000000000", values = ["13", "9"]}, { key = "0x0000000000000000000000000000000000000000000000000000000000000000" , values = ["1", "2"]}, ] -``` - -### `note-transport` - -Send and fetch private notes using the transport layer. From 12963f7e5cd3407768c95b3ef6a8ac61a6c61670 Mon Sep 17 00:00:00 2001 From: Wiktor Starczewski Date: Tue, 10 Mar 2026 03:18:45 +0100 Subject: [PATCH 10/10] chore: reset package-lock.json to main --- package-lock.json | 1838 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1771 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index 523d226a..07439766 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "new-site", "version": "0.0.0", + "hasInstallScript": true, "dependencies": { "@cmfcmf/docusaurus-search-local": "^2.0.0", "@cookbookdev/docsbot": "^4.25.15", @@ -20,6 +21,7 @@ "react-dom": "^19.0.0", "rehype-katex": "^7.0.1", "remark-math": "^6.0.0", + "repomix": "^0.3.1", "turndown": "^7.2.2", "yaml": "^2.8.1" }, @@ -1911,6 +1913,25 @@ "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", "license": "Apache-2.0" }, + "node_modules/@clack/core": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.2.tgz", + "integrity": "sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.1.tgz", + "integrity": "sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==", + "dependencies": { + "@clack/core": "0.4.2", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, "node_modules/@cmfcmf/docusaurus-search-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-2.0.0.tgz", @@ -4686,6 +4707,17 @@ "tailwindcss": "^3.0 || ^4.0" } }, + "node_modules/@hono/node-server": { + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.8.tgz", + "integrity": "sha512-0/g2lIOPzX8f3vzW1ggQgvG5mjtFBDBHFAzI5SFAi2DzSqS9luJwqg9T6O/gKYLi+inS7eNxBeIFkkghIPvrMA==", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@iconify/types": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", @@ -4708,6 +4740,25 @@ "mlly": "^1.7.4" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "license": "MIT", @@ -4966,6 +5017,361 @@ "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", "license": "BSD-2-Clause" }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", + "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", + "dependencies": { + "@hono/node-server": "^1.19.7", + "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.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "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.0" + }, + "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==", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/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==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "engines": { + "node": ">=6.6.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==", + "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/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "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==", + "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==", + "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.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "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==", + "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==", + "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==", + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@monaco-editor/loader": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.6.1.tgz", @@ -5053,36 +5459,323 @@ "tslib": "^2.3.1" } }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "optional": true, "engines": { - "node": ">= 16" + "node": ">= 10" }, "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" @@ -6231,6 +6924,41 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@secretlint/core": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-9.3.4.tgz", + "integrity": "sha512-ErIVHI6CJd191qdNKuMkH3bZQo9mWJsrSg++bQx64o0WFuG5nPvkYrDK0p/lebf+iQuOnzvl5HrZU6GU9a6o+Q==", + "dependencies": { + "@secretlint/profiler": "^9.3.4", + "@secretlint/types": "^9.3.4", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/@secretlint/profiler": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-9.3.4.tgz", + "integrity": "sha512-99WmaHd4dClNIm5BFsG++E6frNIZ3qVwg6s804Ql/M19pDmtZOoVCl4/UuzWpwNniBqLIgn9rHQZ/iGlIW3wyw==" + }, + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-9.3.4.tgz", + "integrity": "sha512-RvzrLNN2A0B2bYQgRSRjh2dkdaIDuhXjj4SO5bElK1iBtJNiD6VBTxSSY1P3hXYaBeva7MEF+q1PZ3cCL8XYOA==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/@secretlint/types": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-9.3.4.tgz", + "integrity": "sha512-z9rdKHNeL4xa48+367RQJVw1d7/Js9HIQ+gTs/angzteM9osfgs59ad3iwVRhCGYbeUoUUDe2yxJG2ylYLaH3Q==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, "node_modules/@shikijs/core": { "version": "1.29.2", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz", @@ -6343,6 +7071,17 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@slorber/remark-comment": { "version": "1.0.0", "license": "MIT", @@ -7216,6 +7955,15 @@ "license": "MIT", "peer": true }, + "node_modules/@types/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==", + "deprecated": "This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed.", + "dependencies": { + "parse-path": "*" + } + }, "node_modules/@types/prismjs": { "version": "1.26.5", "license": "MIT" @@ -7976,6 +8724,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/body-parser": { "version": "1.20.3", "license": "MIT", @@ -8021,6 +8783,11 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==" + }, "node_modules/boxen": { "version": "6.2.1", "license": "MIT", @@ -8461,61 +9228,240 @@ "dependencies": { "source-map": "~0.6.0" }, - "engines": { - "node": ">= 10.0" + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/clipboardy/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/clipboardy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "license": "MIT", + "node_modules/clipboardy/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "license": "MIT", + "node_modules/clipboardy/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.5", - "license": "MIT", + "node_modules/clipboardy/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { - "string-width": "^4.2.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=12" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "node_modules/clipboardy/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" + "node_modules/clipboardy/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/clone-deep": { "version": "4.0.1", @@ -8837,6 +9783,18 @@ "version": "1.0.3", "license": "MIT" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cose-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", @@ -10131,6 +11089,21 @@ "version": "0.2.0", "license": "MIT" }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/ee-first": { "version": "1.1.1", "license": "MIT" @@ -10221,6 +11194,17 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.4", "license": "MIT", @@ -10500,6 +11484,25 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/execa": { "version": "5.1.1", "license": "MIT", @@ -10567,6 +11570,20 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, "node_modules/express/node_modules/content-disposition": { "version": "0.5.4", "license": "MIT", @@ -10672,6 +11689,23 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.3.tgz", + "integrity": "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.19.1", "license": "ISC", @@ -11004,6 +12038,17 @@ "node": ">=6.9.0" } }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "license": "MIT", @@ -11060,6 +12105,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/git-up": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" + } + }, + "node_modules/git-url-parse": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", + "dependencies": { + "git-up": "^8.1.0" + } + }, "node_modules/github-slugger": { "version": "1.5.0", "license": "ISC" @@ -11247,6 +12309,26 @@ "version": "2.0.1", "license": "MIT" }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has-flag": { "version": "4.0.0", "license": "MIT", @@ -11687,6 +12769,15 @@ "react-is": "^16.7.0" } }, + "node_modules/hono": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.3.tgz", + "integrity": "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "license": "MIT", @@ -12192,6 +13283,37 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "license": "MIT", @@ -12257,6 +13379,11 @@ "node": ">=0.10.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==" + }, "node_modules/is-regexp": { "version": "1.0.0", "license": "MIT", @@ -12264,6 +13391,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "dependencies": { + "protocols": "^2.0.1" + } + }, "node_modules/is-stream": { "version": "2.0.1", "license": "MIT", @@ -12295,6 +13430,20 @@ "node": ">=12" } }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "0.0.1", "license": "MIT" @@ -12334,6 +13483,22 @@ "ws": "*" } }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", @@ -12405,6 +13570,14 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-sha256": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", @@ -12431,6 +13604,14 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jschardet": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.4.tgz", + "integrity": "sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/jsesc": { "version": "3.1.0", "license": "MIT", @@ -12453,6 +13634,11 @@ "version": "1.0.0", "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==" + }, "node_modules/json5": { "version": "2.2.3", "license": "MIT", @@ -12721,13 +13907,118 @@ "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "license": "MIT" }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "license": "MIT" + "node_modules/lodash.memoize": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "license": "MIT" + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/longest-streak": { "version": "3.1.0", @@ -14067,6 +15358,17 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "license": "MIT", @@ -14680,6 +15982,26 @@ "version": "1.3.0", "license": "ISC" }, + "node_modules/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", + "dependencies": { + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" + } + }, "node_modules/parse5": { "version": "7.3.0", "license": "MIT", @@ -14804,6 +16126,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/piscina": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.9.2.tgz", + "integrity": "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==", + "optionalDependencies": { + "@napi-rs/nice": "^1.0.1" + } + }, + "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==", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-dir": { "version": "7.0.0", "license": "MIT", @@ -16204,6 +17542,11 @@ "version": "1.2.4", "license": "ISC" }, + "node_modules/protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "license": "MIT", @@ -17465,6 +18808,138 @@ "node": ">=0.10" } }, + "node_modules/repomix": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/repomix/-/repomix-0.3.9.tgz", + "integrity": "sha512-Olo/vORZChL98HOC3tZaE5+kwSaoox8KoF9N+lfQRb7dWT4qNa/SLFHT40Xq54cbZ7l9qTIZhXWmU1d/AtwqGQ==", + "dependencies": { + "@clack/prompts": "^0.10.1", + "@modelcontextprotocol/sdk": "^1.11.0", + "@secretlint/core": "^9.3.1", + "@secretlint/secretlint-rule-preset-recommend": "^9.3.1", + "cli-spinners": "^2.9.2", + "clipboardy": "^4.0.0", + "commander": "^14.0.0", + "fast-xml-parser": "^5.2.0", + "git-url-parse": "^16.1.0", + "globby": "^14.1.0", + "handlebars": "^4.7.8", + "iconv-lite": "^0.6.3", + "istextorbinary": "^9.5.0", + "jschardet": "^3.1.4", + "json5": "^2.2.3", + "log-update": "^6.1.0", + "minimatch": "^10.0.1", + "picocolors": "^1.1.1", + "piscina": "^4.9.2", + "strip-comments": "^2.0.1", + "strip-json-comments": "^5.0.1", + "tiktoken": "^1.0.20", + "tree-sitter-wasms": "^0.1.12", + "web-tree-sitter": "^0.24.7", + "zod": "^3.24.3" + }, + "bin": { + "repomix": "bin/repomix.cjs" + }, + "engines": { + "node": ">=18.0.0", + "yarn": ">=1.22.22" + } + }, + "node_modules/repomix/node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "engines": { + "node": ">=20" + } + }, + "node_modules/repomix/node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/repomix/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repomix/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/repomix/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/repomix/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/repomix/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/repomix/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "license": "MIT", @@ -17528,6 +19003,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/retry": { "version": "0.13.1", "license": "MIT", @@ -17574,6 +19089,30 @@ "points-on-path": "^0.2.1" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "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/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/rtlcss": { "version": "4.3.0", "license": "MIT", @@ -18101,6 +19640,46 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/snake-case": { "version": "3.0.4", "license": "MIT", @@ -18337,6 +19916,14 @@ "node": ">=0.10.0" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "license": "MIT", @@ -18354,6 +19941,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ] + }, + "node_modules/structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "dependencies": { + "boundary": "^2.0.0" + } + }, "node_modules/style-to-js": { "version": "1.1.17", "license": "MIT", @@ -18562,6 +20168,17 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tailwind-merge": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", @@ -18651,10 +20268,29 @@ "version": "2.20.3", "license": "MIT" }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/thunky": { "version": "1.1.0", "license": "MIT" }, + "node_modules/tiktoken": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.22.tgz", + "integrity": "sha512-PKvy1rVF1RibfF3JlXBSP0Jrcw2uq3yXdgcEXtKTYn3QJ/cBRBHDnrJ5jHky+MENZ6DIPwNUGWpkVx+7joCpNA==" + }, "node_modules/tiny-invariant": { "version": "1.3.3", "license": "MIT" @@ -18712,6 +20348,14 @@ "node": ">=6" } }, + "node_modules/tree-sitter-wasms": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/tree-sitter-wasms/-/tree-sitter-wasms-0.1.13.tgz", + "integrity": "sha512-wT+cR6DwaIz80/vho3AvSF0N4txuNx/5bcRKoXouOfClpxh/qqrF4URNLQXbbt8MaAxeksZcZd1j8gcGjc+QxQ==", + "dependencies": { + "tree-sitter-wasms": "^0.1.11" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "license": "MIT", @@ -18796,6 +20440,18 @@ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "license": "MIT" }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", @@ -18848,6 +20504,17 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unified": { "version": "11.0.5", "license": "MIT", @@ -19294,6 +20961,17 @@ "node": ">= 0.8" } }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/vfile": { "version": "6.0.3", "license": "MIT", @@ -19478,6 +21156,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/web-tree-sitter": { + "version": "0.24.7", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.7.tgz", + "integrity": "sha512-CdC/TqVFbXqR+C51v38hv6wOPatKEUGxa39scAeFSm98wIhZxAYonhRQPSMmfZ2w7JDI0zQDdzdmgtNk06/krQ==" + }, "node_modules/web-vitals": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", @@ -19810,6 +21493,11 @@ "version": "2.0.1", "license": "MIT" }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, "node_modules/wrap-ansi": { "version": "8.1.0", "license": "MIT", @@ -19946,6 +21634,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, "node_modules/zwitch": { "version": "2.0.4", "license": "MIT",

8r$ZsNz=_E*yt&5-yZ_i-V!q z&z-4#`#j2Gn{tlYXA1oN%-=Rcs;B-UPADW*0VKdfeRf49=j+!AlJ%F>8PDY!Ym z0qDOl^)JF*K;F-&EPp>U)nj>I=pbV9p5=2-zcO)trsDDZld`x0(>}AtZVG{5*OB|I zRAL4aWzuL5xetwnB+vi2>Xbvhz;NFw*Y{W{M}<1-x4}L?c)DJSj>CI)E>7~SLG6$> zAAhs~+zsD@GmHx}5MM^$>{qd&+<_T<(-+UR){AiP3~na;2&{k%84P_2fV7qrjm>tQ zdDiWv7Po_^)u_j>g)pZ3+HM}b@#zqz+%p>p_w$Gd%IbR<)_>7DPT8l(E9=_%blrqy z_p)n=n|i1ED$BuMB{l;QRin>}?K;8ynG2i>j|}K}F%msn-s@FoWU`v;8}Oi*J?R;?UTBG%5}{M2ZWE?UigN0 z2OzmA0{*UL_t5gFf`zCZUbEYNp}N$&^;YO=P05Id~2~FpU zrv}H^ACo%%En#cS4Nl|-^O(a$R}17vXRmfS(i>9;XI@?l2|WSo*y$T^I=I0Za<*4W z#4OMrlCvI13@yF()Ml~x+vigU401t}yp~EE?wH)Q>E51GZdTt01$}Xh>|*Z#y@)t} zl`l*9&~l?lcfp2vaH|+zIZMwmt9(83A|&Vi4$1z>%|;-un|__sFH2L}uC`xr&VDrt zeE%0pzrWcaJ7YK}lo}^pId`d9WqtS8$%&;!A6UV`0G>VTGVc*RAwA|Hcf%0NPvH6m zNX>`?!s=V)$$3i$>qet9?Aj+_EK&*C z9&$ITIo{<)bq(?@`B%);i_1VjNBN9 zD}-3_1--n0+GsBL_B;sdL0Y4(9Gcb!@Lg}{}D`F~R74hen?cfATVL=te> zWVa^Wg-`E$n)6*&a@EnCu3b+H50k3sowFYN%DuWLzi=S}n__G;I%hTN?bs6rYwO0z zR_jeCK8uxX5>mL_=eJ;nK1IL9y>gpN5m}C?)XJPh;)|gJc(1~St06}74nDo*UbOX` zM>n*OwIa8b`#I{59frlJcGU~#1LJN7xOi_CTH|qDzc+bxTky1!kG#hZ8i>zQu@ry* zhkq#6`XS#1Q{rMdvaPRXC-ycw!fLs-s05-hmhQGS{uq>9V-YXsXa#9DLoFegEx4g; z39B&0Y1+hkh(Mf}fUJlnH*irF!}E@ zoq&|Gt_|P!%z$pez3IkLlbltX4iX~uy5;SBfU&c5)S8*Rfv*A0jjE)dGxOx8_+GM| zfB&1T78%anHc7iDz0wLBa+>b#DjHqLP$6I6F#qiNjsd*ff;;mR9}P^!ivfq|CAFiyj&Tnk_tOz)3jT90+P3=>*r@=cl_MlLcexGx$Rs;dXdqT zsBAK)fzMw{P?8_DB-!!aa_uxXyXOUV8*_Ku{Jw;{wGQ*{ziyn#rwv{k*^l}-$a+@2 zafp3%q6j_V38#w%7CTbq*Pl9pTdcTKC{|aVIoRolJ7GS$?K6SZ-M>7>O}sg;7kx9` z6ePT{1tA1Woc5FJ=s>!;Pxd$vg%N69cxJg(nDTsWtv$($sbtghx;lWfnH%A|v=pE^ zk-fgLsrbj$5a}YzmTA520SLll>{wtE^-va2Ng)Y3Dg;`hvNbe5eXpc6C`eq)@YhLa zlKb>>=O75L&;4@pGm5gOT1e3u&JD0lEO0bH01HkYt)JJ{{NJ^Is8u$|V+Y;oATah; z5`Ol^H&)i!|Eq2|RvONYUURedT(H+gFxN}1LA*cO5c{!zwp*-a8)_i0QgG)9h`Axh zDYVichGl$$_D9eOWpQ36W4_@gc++Aa1Mv;bs5vwkr3x~yqq+O95V{rUx9(X8+}+*1 zfa~l7!dSDKXl47bG)??m@fIg*m65EN-wrz&fQy%ou3v6<5~QnI5z z(s4LYK3$>!JA3?^IwqT_%u3*1vD=c=8H(oIM3Q*Db}lQ5PIBf?=^N&dENLXO#HQUC zV9aX2j#s2DSA}G4`TOkVfGq)^)}rpQla`_Qw`thFy(P3G6>1oL5Dt}fDAk;dJMf^E z(|n3(!L7Igv@nzedD^15N3Sf>1f&jbIkSfQ zM7U;gN~nSscrT|WhG+B+uR*=-3*!?ve8BzkabrQ5O4B=Rwdt7b;2)V6XH>KJT15r$!4&D250b zw>P|EKZ>P?X2<*ARfqQ8i+3v1L~KVcFFi3(U6wbLaB8iWWjDE>+EbDNy5^fLnqm)| zUOUM7T(9{f_^k0|$g$peSN5_Wh#1_)UZyWC6iy9_87t1aRl~C^$awwVd>l3?rJ)WZzrk&v!1^Ip%z)CuZG}swUB*@`V7T@6rc$85tbmwCIE$#s_ zGbr<#)T*PN7^y^Jl0l@Ge1~w(2XQm*n@BPgR7DnrvY~;ipQ?60&;@1-w2+Ij3Z zNRS>d*yo^b{PXdlH$82~up6#(#8B?LmkZ3a7X1XWcs~3)O8T!f1N^J%Q)I8*STinc zdH;_rIn(k>u2Me_!AjUON!<7LxW3!^jF|mLk}jzn#BYegg!5_= zWVV2@yg0j-N5Kj5HCg64AUdiA$FWg0Uvql!v8s-Hnja`5PizwFY>*pYUOX|uS)U74 zc9SzMH{wPw8^?7(3LKkCI(3CMyyUkC*>H6TEE}{8I$PqaIhXgEe_KzX0`9D~-j4bK z;S0f1l6FPD*GpyT(Mz%rawT*tl^JT%-o`mr4q-$Xw9iM?td*5$U)K(^Z1Ha*(lHq^)xzM0i!a`cu+PSrf_Izd0ws3@QN zwB6CmuZoeUym7q{`AvNbICa%}#fToPQ!gN{Lg&fx!*hACpl1PIJGNrlkzaL~WJ9^i zH(tS6VkGC6#yS2G(HH-=LIrua?5)=wjy$IRu$dW}vFn$2Qp%l01ohC=v9i803H%?Y zHs*t-?;~^8hLR5PzlBO5Z+)&QK&oCT-A|vQe#RNwg11bKLg@Uvq7@ZzbzSs%)MqHT zQb9Uabs7NhN{bEXeO4Macpuh8@gRU~n@^c6r$QrJJ&$k-Zjf4SW#A1*6{n@h+wI5q zFD;Ncm*snrms~LuWSexSbFy@JkKMg4@PDG%SVR1)93n@EJ7Q!fAZ?{p?k`$j%X&>kT^* z>^ead#Iooe12Nn$!2)-%XixRt7bk~1xPNtNnZ&x6`mLO2SH&rGlJ15Yc?!%|F=oc| zW_vf!-Q9ctHC(3*pB<%?%=w^eOGtDA|sa|I{`7N8mnS8?q=##vN20!CmZTW5QE1 z#El{WW_jR_z(W->2tA4%xD$=c*V()>IQN+F%e+W;d ze>gWiJ;kYP)cvEoqfdZil&kwX-H0~2F%AOB;{hwJp=IQ2a1*sph?#{MdHQ+OX>FQ= z9_f`sexuyX0%gUF137wDN)*e}Nza{Xe&_(2*mk|!VAdgHS~|o3?sJ~*v_ab~mE4X{ zn>X&-HStQD_D48oPB|u?F?@=_{mV8F-p>}{`BDPi&{iQKvTDS4ZJ){D6uf!uYEPC! z&W9c4XvmB4#6z-ec9ilNGsr5c7<9(@0;lw6?%-00`4O-?_I+Z`dOr@6ywa=B87*9yoiE!Tm(aT~ zX*n+g3A@EQtg!^J{!fHL5K?8vRsXwAJGg?|Se^HLywx2HufI;bM7MhvKFA^JB3l>mQ60_HwJ5FCvFzZS&A}Y= zbYfaAW+_m@E~lVHtBEH{UIulc-nNrtHHTf~IZ*f(XzR7i3MFmZG zpQfjqldM&wKA#~eI+g1g@i1%Fn*Lxf+Z^9QCHH%@p6~r!9oP$r2D?IH4>Qtw-#yYD z3466Hky&9lA)1o~H{26sh{f%TZ@(7N*Q27ZWi27;>z$gra!xS8G`X(hykK2+`!v2- zp2dtc%-PR2FfD5ztw~5}SMaOsg$UKtN9}voJ&$a1{U9_9BSiGY>nzF*e40G+o+{Qo zcr0_Z7k*saV^VB!<{2G3fJEL{89e|e$N@!@rH;i5Dvk# z#9IdhO0UOauDi}?ncyW~Hmv-b?kP^j3F*emN!~OlsCaXcM`cVk7~xIo9_XU)zU=G{ zHXw*H6~H#Iw`3HoB^%Y#BaJ+zi#o1W+XoEByw+Lwj<*7~!{p2K#P#Z{V&w9{)l1)a zD_C2j9aA`*Iw#pqEt~=EdI{*yxfdD%Tv|(B9UJirLrAh1!y?Ko1tQk^N}w?&XKCoo zi7%1D&3kUd@}lTd>~s8i1ysuHGM19znDsw@OH@ERA~j%+h5R>X z&VP80pVy&MxBl1^jy z+q-;*E>Ls1EQ(FMmMt*BD~3PO7YWBCr6k@T*(_tURWWw2Dogxc5ViuV!AzeneQDl3 zzL?o`%wFMAQc72_!AeUG0qbcM|E1@zues`F(4f3nM_p&N#C(Ny7Z&R)AbUFlJ!W+sN38J1s0s13V? zAfXq?z@6T>8HBkWSCd^fmf?idE5Qs|ge9f0gc&0XF= z3G^bD&94`4j}EHrr$6M%zn+jaX4GWlNr)-b!OZ77NvpLmUJO4|VxQ*k-p_h40Kn?6 z2af^IvDQ(+^y0PWwmwd6!3IBQLUtYH#qaY6d(MrCiWh>zV{aHD5A4BIeMbd$wJ-z(|Et%XYxfUD(TGiAm+kmyT!uzFV>@$`r4-F*$u zFCo2#Q}tPBmo}e9Bw@-ar*ufGAr$BRP%Oxy*4UizxQ0CdU5e-Z-EI%`WSH*NYj=1c z5Mn$`AGoy8y33kNqm)M*Rh0QiU3N{5~}L3p=b*Y2F+ z7g*AjPIe4huUU^Ve>Ea;a&t@KzMxoTZ{JGx>A4>=u?t=H(g;>{S5w=9fuveXr8izF zurb?VHyqR*Yv^TdCfq(DonzXJE1Yz0W=F;57f^uxDFM%Uo2G?+wjG#7H*@;5HdGbo zU>VD8M^gF{YxJg^k73`lEBX{(wsAbX?dYj@H4=~4*OSy%hN=37guzzlSXyX>f4*RJ zoB53d%DI)ug(<4c(hjUHW7vk|)U0Pl!L($wtypUY`u(L5PhumN3`HUR-C8b~oTlyt zZS^Oe)9Ps_VWNxuq)p|S&c#-&vDW9VSQDpF&=GCpzXmD{osGAfKge}&KCa+wX(`im zAZ8Hi^Tr1l4ZLu zonU`jjk12%0rz!w##2{uLsM5ZFK}dja9mHvw2=>VJm4H@xY;BCD-;JS6q&fsjbD+O z>%A2C=}w583dp%&B9A5COY2Rjf*Z6lsUtFxmit~#)|aT%-yjGCjo#?(&r99Mva%z< zyXt*(zf1dZYqZ@4&C|Eqnf3`3@A|kJa^hUxxXC}3M3Zh6n-^QCC$N}5wvyUlJ!fQ% z;Xhw2LhjGPOQ%#?o$`v{s127UQlzOP*wn0c8V$3YH<^;1w_87Rg&N7t`pey<%0dbY zf1K_^_w}{n8zCs{^>*<>X!o^-6T!h_n(zSx(7LQ4As>u^UzN z6eo@^AULO~7w9My6WY~xIetS%$hedz+RZPIRv0&!urTR17u6HgMP`iVmf98zAJf?Z zsbVP>NP}b9f($W;x+SHY011Ll&+hWKWR4}$mevrPNEI1AP_<|)8)X}zOwx%@1PYJY z<0YqrIXud|zkv6gX$Bl!@6}+*p#!-Z2L+~)@gZ)|r575N zOe2HF71#i{_=q?26Ww%2_|dxlrZJl4tB$1Xtw(EJfis{N!ea!p!dN70wp=nLNc@a4 zBda?Y=UwKsYf&k>5dGqV!c^5vS>5SCZUdo2QPjsg<>EK925}R#uN*^zhrHr>1!$op z5wb_W%iB$XRnASPhBsb{QPER>)E1?rSSx$B$I6V-z8Fk(Zz+@T*ZeSK2Jffo0)c-* zFP&b?IiC3v$B|%B3`l69{h zTvIDVX2tmZzf?&Rh~vbkO+HO>@80UQ+oHdU3A~bAdeR@It5By5N%;Omi_66$DqqwG z;__w}U?^4@+^*uaOtL>y+zYZdKN+lM-?fqDs79q7g+T>47#De^#J=T)2r@~s916)d z>~FXj&IhW?;AYw8t-HS!da0aKpCaO_I%kQ6yW9QYm6X(IXA4G9lIhOvc~+gyP@(Xp z#AtqQfn_qrjez}AT%Fx*5x6Pi_Ug=EGG6UxY&I>UL~hMEpqgE4m0;dpVI@f(WDmgN zxwq<}{k}fXQJHc>M|h5k@veUgS;FkAHRuPPoy=>3I4vKQHu0QfJ5?-f;RBl4)dFq3t;x< zp2e(2Np`!pH+X&fV|`=Wj%u@z*0cxEjU97SKnZK>cxPr8xw(<2qqu(ag84Vn?d-Th zf5jt&OGy&`xE&SmS6TPdB)dpeDuSJ)_M{E+Cd0J675lp^{5rd%tr75G#!dcZachp>j+O*}4Z|Q(*)3Yn*yZnzWM>7%ducQL9 z)=QvU5i^ytf4+6G90WZHzOGXGpi1lg{^c#>NGRt`z5pSq?$S=)H#;G8D%Za2fk9c8 zIJqKE@#_PTZBcZV)=?@1P!da=vo|#+Qj8ZDx(grPCE>hPNQR_Gwb*6`JtHeJG{pC? zh{e+3Y;^d=W1>4%4+>nItQRNG-5*?PfOj}&d$6!=Rx8!`hs2=cJGO`vrFph~T|P2@ z@2lq~jk6IEiK#k(24Ztbp6tUAX6EKtwK(JiWkDFOE>C96bZ${?xG|Z~bm^Y=!Zg0% zhO~8>*q|0;WlYj5o1H($Q`nN*!GRfwcWG*f;L8Vwkv`?JsJkqV`dFrHBdMpMf{p3q zNK86oHc574JwCluS4P`NX5u*CDq{UH)Ce491Q$2xFJ)&^fF}5z^L{k0H|UEwNL^M- z=>FoLSkvK6l7T7*U*I5(p&e!oPGAM67px0fmDrouu5r;LS@UyY)vw6b*?jKrL zKm@t(gh79_T>7n$p@S=0eR{6wqqVgJnbk>&2nr>Z@^nN~y-)#4-(F-ShyQ#&X)U&7 z9_*1*mySt`un^kjXJg$?CB{)D@^xxdVi#w5!DKo;3AN}UcM`o>}#Ml2<_9(SnP8bkQpg1b7s<`K^Ol2n{TJzSIngwjklVIp!) z3#T~<1pGSnhasV<8DX?ts4E4Opx8WHZ#TVY3lVh9Bf0Tn>&1c`tfTpRcJ>R><158G z7;^>B+GfL}yOYu39&=U~g%yrl*7$4Kj@$GUY zl?n0j&b>(YADD?K$mv_gEMb(%qA`+Al~T@KY||;5W+juU>n<)|H;JNBt2_rYsAzA<2y1^5Qlg;oy`HaCFos)Q%sS73VEs)mUBHOPmC=%erOqHTh7e8Y`uy)$>Dsrfd=kjkhL#T#2lszJ&*&4by< z@{91F$dmELDgd0{D`=m!wNu>hVtM;6lx-V!akp`r*ox|BXmvM7#`xUtITNJQ&dh9- zoN_kww=-0jViplgJZ7J#hvnbg6Ip>_@>D&wZo99fQ8yc;v+Z*w#I==quSR8e=Sw?x z*~ltkYX}3pN-x7T5b|t8X?EHeLuw4qdf+Y(+{`Mu01m7ez zet3g9Z(sP{(2~Q4D`5?&jmKMcEW^XlMTVaPrSj3wK@&WQ*cakq%v=<`W<=Bc+2i91 z&-$e8%!gNi)2Qr*>n6%GJ2#U#h&UcbCIMJDnq4x#%}FP2bY!_M%-Z#I?6!u*S<*^R zC0M`tO7%7jwOGIUp0BI7{%R+uzLun$zgoq5-^5a(#1u@r8iA1t_m7InXk~=N3MM48 zty(ghzMUK;qzSi2h49Nmo~aR2(w~$Cq%s8O`2dO33&Bo-&0OU;#*pC^%e4q}z)HR0 zKem*6j+R$Z<|H}keBzjY&ljW~ga_kZQeGkG4ZtZcF~7ln$adKH7c2i>tonSD{N9G$t(Lk)s>!_ z4YwxjU4*y2%opLFx*?3|wgJK$z|bwNqgXvu63(Z6QTqv<*``AyC}5cdHh!l0y;1Qv0X-D))AVwH_zGL zL{CO8J)1qG=sDU_0}2@Y>06=b3+BCe(9bWaiD5$yR!Yr>5tgrQ2@zSfO*2J3!GCF# zulg~5wax+AnILn#0hweqmsdbv&&aEPa1*KO?i>2mXL`VF*ije1L)mWCDE6i0dN?a_?6)R5Q-a>(+c_ji&S84f6|#ANcSP;Pm>c)3OdaL`>kjTSZA z)huj3Xz;bg2m*IHg~#A@67(8)B!7=8lM{zhRp*_s;N7Kt=?T8I^@C=YTH^gI)|xs!40GSgx&gS{BlSz*@i%B5E!1Ix z7)CL8ez(=$K|>R&3(X39)J`>8;2qCDNV$iK2rcV>{^zgfiU&?EMp^ zAsn@t)bwNmcB~+ImN_ro)%0}{Go$axh9UFB{2l_k>OWm!7Xfik*)JioMI?!GAtdxb zda>pODm;{7u+60(<-=R2g?RGItF0Im{UXsi3KQ7sCm)D}KG5EOC4Hf=fuv&DEPWHV zN7Rh>eMH1caunBK?T#v$w6%gjIkYvxIoA9(GnR=*Mkki`vnRa_Sf7la1 zl!O9{v$!wlU~@|BAQRsrlD>q4^G45w&Dv^YU0Jc-^tM`L&H~JBS1xh#71Ru<0=P`C z=3F%7F}gKn7j@Nx1hkf?k%L zR<=il;0V?UiBeI^fwyIwPKxA=@G+8CZmBwd8pV7f>(Y`5Mf0uJVNHw*8%OEp<8y9( zb91hd<`KjD7@VZ6rSOPQ>vz}UQYq2?O?vn>D9NsT+L;y`4K!ACP`jPsc^TOeX=&2k zf_~_X7~xJ1#E6~5CoV))EE$HgnXvF-mCdzWN-j8E3>d zo8|05i2V-)4Fo165kGGa_;nTg?pFY61vwoq5Q<*{t%l4=L=L{uoUw~dZ!c6Ijvzdf z5J_3oT%BxXh2&1t$Zp{NGTFklJ?B9~bR3$Hk&OL5rsR}c&CN%ioEZ+MA>@+~43_wk zQG$Bqa_wFmc$*rPmqt>m6YaAL4b_s2@4XFt&A0elmmcQ!I_m;e0fTpXn$|lZD@$?i z;~BP7^)L(=W$>H2R0rYgHZ;>yJW;anuo5N(4`I;SA4@Bx@Zg7mmpE~Td8-gEMAcG35;jmfdU~YToobdxmauY8~ zOPlB(*&i&it>OkQ^wf|`KVil1`;pHj42-{RBuCUPPlr}kq2e6r#bCv!zHB90E2pik zWw0ZMa9x-+7FjHD#+*l-N2wPK#Q1E`3Ghdu4K6Y*Y4UF(8{jnItGiT_?4$vg z6X7Y8!DVcNUyoW=5BEEV7Ku@++HDe-vSXe*ki`f>Uxuj{re=*zJAI93;+X!EeiB{S z<9ceWR+%L<*1XQXd3m%zVu@l{MG8(&oPo=(f<%9xC*{2IwRM(+nN6o*3o4H%6J9N| zE)jdn7ikh~?UrdgiNr3=_iZ~96}(;n87 z-u-rC*O)tkR9GnC zoCq^rpAkgfsn{Z+PhJxB9o!S={g}_V_^4sZ-YpBLO7kJf)>iA>Lu6fY2QfJbljN9OdvxMy2-nU8 z501nby^PYbm|sFT3pGy4aHKFjSO>Y2`26;?*kKlU44JN={k}^p{IJ_S#KiJ0-;s`4 zZj^Dsa8Sru{wH4+k3^;gshKTcSZK|pxG4?3wIP`Bz2Ole8uv_KEQCZcki++>%!Y3- z`;ABG@o2OA{B&ny&WsXCy|s1mkyF&5#DY6@UTpXiK5twvdx?@aW7E7+IK%EqR@P=U z>sQjrDsl=Wd4hEzF%KFniZre>B{9!5lkiZns&>}hbkA~G1=GHFWpVjGvAec#FBNjn z3hj4++{JQ$Zi+vaik`HB*h=we^{(or4Qlwxse|zj+d?cB=DVGF?$>2X3}R>Mku7<&22DG_>fBP{NXn0$6Uwb zU%nE3k#Yb_H+6r6jae$~xEfpv0G2Y2G@_nBgz4Jtbz$0==OYaD!N<_FeQ1=SN>q>B z0+{X5d3E*Z@s>30@uHHL#&C4P{Su|;*(RW!%Tzxd&CX_LwMHo!7g1zp#PD#2uRdtwu%pM_?aN3kncenO0H)=9Jdu5M(egK zj#k)gy4C#QlTTF%Cu4lhD*7`RuVv&iw;km`P~e^JueUGYI9X%#JlIhiHblA}%u#9i zrER#r%e?-a-f+suY`8A941G@Ar>Cf7X(xm>M-giG>9@#U0c}a<{B9$DOuAz{dy$r` zY=1wrOn6l3?65QNfuH-n&|z@&mmI{6^lFk;!HoAvR$6Su=a%^U^+}NEzE509u?y}A z{_XQ(A8gN1IhTjUsJ^BvM%Ou6a3YnET`>%|LAA~45^p`n5i7YloeTINT(}l_2UM%$Hua7E} zb;ITwMxgJH3n8*i>&$}%bIv_RQtqRgIm-orrIbHAbAPGklO6!8m__lWwdAI2rs21x zlKPD5^WlXbZLId~VYp{{24&UGcpLkjJAQN)GUMC;-;C}Pb>$#9C{!YT-`9V6m*C&A zcUAHd--|*A597vg3gG(h96@!aV1jF0fbkH>Xl{cKR}kdAmyTT;M?#dv8Zv7InD*gNYK4|bHiH1xKPHX`L` zu{2CEpv(0aBP%UL^-R6XP1GD#2AjmsiYD5Os2STj$=l43k-BA?ZesvPxq*QH)!5^9 z!4eaqhlMCA&fZHU1xqorBYr8gGwtjEoL_C&P|NVrC}4Mwgt8T#QAq|q^NXz{xRBCj zx66~e@2UBOCZ0(b_98$l-aN|~go1$lRd_98`<_Jl(7v>s#r@1(Ua$|usnXuq2UKSd zvr2-nT3B%jNuxEZjkC=0rtD|GgpxM_t*J+B%UH3WhmyC;J&{5G*(V9@u%lTsrK@^4 z`6K;Am4pJA-w<3BHP^D7%;aBKmasd!5QQszp3HukN~Uh}TFH*#Df&x@sHzVTnjL-2 z{$JCC0ZIKnXdKaikbkexNBA}Mg)=F4qUhtJbUihSDP;EV5MN!EQ#N))9tugux2wa0 zg)e5-79=LyF&w?Cw*Ijzvf&(ozIAqQxGr%4tSeqJGXaU-%rQQ$uv+`yY#v+Qb7=)P zJ%5#xp}JjkvtYjNOpqSFEuC~@uzM;U4b7;bR}G)hh(Wb4G_!$pE~+g-;Z{zf`|&fJ zWU@@G(WS3=Z%knmg6LT0@q?SVH05vJjQ;4Yb;Qvj2X^!7{P-CtZ8^->egqz z0?0f}FWB6RH5tP0$Yi_&TVCrG=8zx(u-$KY`a|_3)Wm1*ZFJp!P-k5WlAc@+&A*?a zn_s&YIb>#xQ;c1iyB6gsk7fbhzn)vC`@5i|6bapj+g1U5yFKW!GR%G5N`?gB^U(b0h$OpJFw93wb_g_*F-jm(f*(I}9#eYv-bd$xI{ z?p&;!6S@vv6t0;lx;)b5A3vY#MC0t9>D)*&Qb4=Tb|ojy?;slXl!cZE*9@Lf=TZTG z@|*KB8()D6>OK{J9d1LCyfXq@)`c-=pGaSer6n)Sj-0wth^A1get{mUolU}V4k()$ zGB{*`so_VqG&~vmGE8PBol$bmM=FI7A)}GLA6o8KEt94eimhVs@UYC7e0GSpNjpbR z_^r}k3Y@*4;ar*9=DR<9|6cTQKVbU}eBM>|$uE&>?fvlL50UWSYJ06@u`8go?}h!p z%gn6M)RXh=4pPQo>)U0TS(D(Sb%FyR^HBcs$z{OW?lL0PV;x4UOFJ2qWT^s}Eh|U0XzSG*O9MUq#O^ z^}v3Z(fSUV)N)E@%5>+O;ZI)1mEZ6T&2wL_NI4|yaN_!=FLL!kwebHYaGv){tk>AGIzoIO+AhGVF_VI_gWaglw$GZT@qK-Gc&`5uo<`MD;HvxR_?O;iq z3?%Fzbq70b90B2gvQi;=w59hgz%}e4Qy-8x=ZW{5)Dq85l{ae8R(%JOo-J9KVyN%H zaAxe3yr4cE)x0)49gKaa1kx@X#8>9}c0RSf@qD>WUl>zwNK?VHBby>bE4}OEi`jg2 z*q&EEPld5Lt2==J@ybh4zbI6$Ag&PbzX>}<2~;Wz?!EHrniUqjg}fjAp?0|4+5p(% z7h9v|+3RLa06pM$xvrc$f*9>4p*^2*anEL1mkfl-cI}7WSmk*;Tg1Dn#F{aOD0$^U zMELo#%%yRls|Iv;<+Kim?OK%!L8WErO&b#2)lIA&rR~z|;}cbyX7IJi0J@5M`$ca> zbv&5w(V-c^3Kkq^7Qyn5&ca7gbtf17jjdx0o>oYejaV5__!nF0CMjerW4IMwZy5Su zM{o;~D;U=co+nf(#V*>PT^XJgVvj#yl@?_h2t#N9gF!z+C~JtF=u9R&EaJsT%`8}( zdTTQB=A?m^FO$j|lYi+8VjmV|#8u)imjr4x44&LOfeP5T+ErxE47h72Xx?%Zj0u>M zt{a)9Fx;r*hH&L?QxqT=xkXlKZMhR-I-Cx**=t0`<^O6dzhQYXijRHUh^VhV6@F3a z>vNc}_ZlXRpX~W{$IbNC48Ehu3)y0*3zX-V&A&*H-HH;EQ_i0=iI9szmep?Hkz7~p z1n6BcK^Jb4_WQev(ViqqIb(jl)S;4YY-6HPx)_<#2hit0-tMfZi?TQ$1rR+TSg6q} zimo%Ta$Yk}8cM*xVCMw(fG-DOsr@EFBGU&R^y4~cnojK8oC^O>rmyZd^FgyXOYOx+tT@|VvGPdEUkt6^4>fwG5jlvCy1&b<;mRkn0Vj(MYM6yzEL&OavkMoufhPuk z+$@2TI=@5mzBR$PU}bi&dGOE^iaPK${Y&{Nlfzw2dCEjrw(+1IvDDV5*$y*LD{}-s z{!+TWy^8kAeq0g-t(_SqL8Em^OG?(2_tBHlZKG*SLSauw=wHcsL|N+7u9%jizjvu- z0cPjvPrr@Ub9!@!S697YCaR+72FUQf19jajEsMMGEW~#KTHbpfQvIf{7;@f3tsK=y zUVXJ8cn*W#3M*Y(p-g8uL80uTZ(52oCYpK1fe*%{gpwFxM7{gui$$3Woj|K)YnwT{j)5{4O zlAiprAL=GN&Ksl}HZ|*9nk%TbFOcNw5(TNfS18G&kYb)z4nfUt*vyauZRID%&8XMV z2$mtEF_hGr{rB5@xBuK8XM-9>iuMNBZ+mS>OAVt5qOSE~G3g7SOF6aptX)rLOcz|& z!0+35+$k*aIj7O)+|K#bMP7XuIUDJP3N^Oz5N&Cx z%`rKI64vsWSvuQ81IVSDv^#|cfV*T0(0tfVHYsO~a{t8zcSoDHL`iZ#T=%UKU5VMO z9lZyaeIqE+eu5a4!r!^RESg;#Coj4%kt40`{a>k_!!GrQ(@TJR*srt%kvFazBnvK- zNXW)J}G^1sS7YZhQ(>BJh%_0F7Dq9Tg!eWiZ*=Q&Z(WaqISB9mZ z_yd5-B)*88->R|ui=jDwFsK!YgLg_#@LW%?I|hzt`;u`R593`9xdBnaDk=JN8Y-QM zCs0SVFR0D=HV;k@eBcrJ8S&D5zIrCRxNq#h<2pUq2?@IZ)WYhp9g3Fy0LkLR(`Jqg zz~HUYVG^Nl0(Raj>%#eb9dgLLO&sOq$Ddn7)K=HO=evGOEfLbmJ-4N%rhinK7fa2lPJM zxG2C5mcu8RM203<9aqN}4nQL$_+PQfl|-rn|& zuhn~-qTf{1#n#Bgtr85Q8H-MA%$M|pIp4(jX`H3ji zQ}4@^S-!P4`O4VQ3bkRJVtv=j2^Ra1cR$fzj}uV0QMO@=q<_v}GAO#x42DrLZ!je+ zYihWCLQgP2Dqmv9s2+7>MPgQLFn@C8$)bPGghW?96Zy|Cu?f#5pxemPUb`pS1+#muP@%g?t@8{MiE_s+D zg(a^a7K3u!6Y}m{Fy7+w9<&?>#Ke+sXV(~Zm}Aj{Rei4t4PioMSKt2pjP!c z=D-~Bg^C~V&8X&IZJxTS1A|5@g$A?RdA$nr!2|EWicq7lEg}J%XS!%>`LFDKu>qfe zSjN&f^A6>M7_$O;n2brtn9A15Y+sLd>jcXaf5@IgWET#iJ&rgJ?LuhA+o;?3Gd!0q z)nwu9D7*|pe6EX{TfPB}y_@S1GN@3OGAaGCr`Yu&!q*9r$3pz+?UC z{x?~>40%MX!tfm}vwJ>_&YaJp+PD(7D*_}I@LA?Jqspk|O-UNM=M~I}Xgzjp1X>%- z7(Ov!?TV(4VhYg-&&dmaHo4G|#36gJb7`rtiBy0EC1WS$2Sb~{4>uLDEtwGE3meXa zPL?7YtfVt;PDUamVbJn`Ggf4AR<=qm@2`7g| zInE4LkPak01G?D%)z{V|1ipuyk_+E9m}~w<#F(=VpH{Wg?_xxyh#XH%6B%X(h=QIf z1-)ELX*YLxRnwxowY+g9X|l^B)~pl z*W!n5QStW6p0fhxZ^_-H7d<9Pe!2nxy_XyIT>MO`4=7Sg)OMI1m&1UKOBVoF7_yyl z`|Gt0GjFwclaP`zQjUj_J!Z5`JcW{n2(5wCD+p5AtmzlsEPRFj#{ynx0UB5Z+qmqT z)*V7~&Zd=c$bBBb#6}$%>3`VO8MT8`V z?CaRqL8THycCuFpGnOnvhT(g?JIj5a&t0F#=lc^v78*{xM34@HskbQ9!IM(O9cNsJ-EnGc~3GjX?YB!3OA9D8tk(>L<(l91I zd3`t%wA_)bMf%`G90ID`wuHT83IC`;)jhmnQ;12~D(E>+?(lI}*ST)obDSZ|`*Q5| zubPeNXIPnhj>_7As0_d}0o?&YgE1aZ?a(cM9hT|2TxB8HD@OKgoezG!dOts88qG== zu)?$ueV(Dl;?)JMQ5S~-#Y(a=>#VUA!!VrKKK@2hK05r(OmM3jFYAVt&zaq!Npb*< zg(EPP{g+|UUTbfngU?%rZ#@x{yScGRg_~hwuq*~6=3#02BA$0#%beeUm733=zD&+o z!hZkviX0oPOe@0|LOl#symH3O1%n78)ANb$E6-=F7)y@WN_YlJ>*{{cJ>Y;KgnlW+ z?#>yw>%`G-Q|Bx6!p<)V#tM&yRk|N^%Js?{*5X_M0(l9zZ;E{TWV~@mKMKajj%Gs< zhIeXgFM@GJ*5Vs9aVv#A2SC)9qC)huDGAZ$fGEU9pIHVjC-50Jbe-+5@Hr=Y$)_ef z46`2f*pOUH&$7bdR$#l}F5W+23RRhuO|z_T`zW>uLtnD;dtV&yjvvaGA5XH}2XZ{c7LH~AxcjjtW~f0pd;8}pwf`}=nM=al{ZsQq)w{x&E4=VJW(OZU%P_Aezh^3y+W*^5ZYlg75Fl|3Br2)1j|0h%Z6ZtHKcN*5W?dC$CFGyg2xOyLkF@1*kqM5MP2{ zi&SNdl6f>LN2dR$q?}9R;lNhg^*0b;5HX9un*md(=hX&u&$fkwq3e!>p3Lj-e_A7= zg+t6*kO49X^Hz$1RG@I?B2aTY(=&3<#th0XJwdE!STNytul)7~-2>Dd9b@9O!b({9 z-fb!$g~VPk=6=mG_5W#Nw#B}$c>*_otylpMj;hz7JN*ov6#Np^^=A%OK{xSA15toS zpYYrq5vdp(z1pMK-EbbV8crOV27SrMnvFYxQ@;VnoP>bH+vaykTHZ79>~;UQPcE?h z_3q*Om8@}>PjXW0mL78?XgvWhd+pbVxt|kd>MdsIv(C}gXSdqUEt&}5aX$GRP@~W? z2;9EZaD<+bR|-7wqaG%CWXIMSmA>Ih>-qh@>yE^uI!vV6Iq|3dz90ToeAphmK|-|g zEBrL2AsP&Fu0qGA>mXtSt(~(c2%r2!8(^wmsv@#si{-(*7f*h>^lZyhWBb&^9g5<4 zrVA&&uoUe<_=5;BH0mtM*{-*b9?W_kNgC~%cX0cDhj(-^#X{7+x9XV6!(2@$@#a~~v18m3bYQ1!Xx#NdqWV*EAE2pc%CPrET34-!dZpMX2TbgY*-H_}) zcf!;q^E`EM+u!f%f2~9;mgC|o)PX!0JZXG(@L7*?^mY$lxOH~m+)Rt?0LWp-5D+j{ z8))05CeSBe;b|0!eQEOoWKhmA4agTPG~{f>Hq5Z*mDD zy_KWX?J4;x$ZI1;i$CAMAKu{0i|4C|Qua9_*YYg8YIUt6di-*^yU`ohi$DFENw-g4 zM17nj&Yzf1#;}A7gIA;8<~}aXtrO5YTYv0+#{mnj#*bR|(J@*w4L0$_;D%6{hjz|4 z3?^2f#hNHoo-j6iL0fLGWu5Em@`BiaUaU0;6|VJVr*j7| zv#FberOQy`iJcDjmiGR=Z}?Z02q$FQDpX>lOy9NmDDY=Us|9ymF11n7Z;FX-pOcQ= z&_8(#9SFk0UOCdz9+K*VOQ&PQ7BPT(SFL-z-@@J3VQBdPc??e1s6@$N$j7gL8Ww5P zE*%SCe#BR08H>@XBxDj=$Jp~DtjT+)|5Fe9N9Xuempg?M1$1AIULf#sJ;r~0al;vO z(CH$+a3B!c1HxMA1$RjEuy$CN@ih?G4sP#RX--z;V=$`k1%!9VayAtF6_aJaKPE?M78PTur>5;&@sz-*p1pTok z08M&*TrLlIZzz#H@P69RVzJKxfA zKvzb;ECep^!GJu_6NWiuU?On4#+}w$GY;}VMX&XS)=vP*RG)qgvi(>GZ zaN+Ea4wN{+I^|{zN2K=;sUd%_UQW+hRzDmVT2}FA|Lp$Yn{|h)HX_zj6Ec+x59sfJ z5Xfu{Yf)#FzmKSkINvvN++RXwh9PQ|m)4Ki9w5Y4XXJMB|$AxfvaW+nybF{E+>+irdJ7%@c?U1`PS8RTi5YR!j=uoULKYLL5~L&KyoM4Sn!Lj9xWd z)XDTBp%=vBDY8E43)bbtMDK7$I{Cu-7iXUe+V-zSWr1?t8SG!wx(e)l`WBXLxjuF?APpBv&F6UADXj54Q$JZIps}4`sE6nznY2;7bKpMVW1mjKAb|cg2D7 z^>T|6muTB59l|!bV=%HhzA*I#!XG$;f@9IVpOWj;-cNx_dv$W~qd}VMW6D{td0o@S zSBR=^Yul1SlNKW7S*d)c$0Ny1rr3J}FJYx}X3JH{kmsxK3Tmj0qg}i-Wwn|Zgw@AL z;j8u0pf5z6HLp&V&&QaL!-m=I33uaNs;g9!K%)c4%vnCyml^Fu*&WrxCMtU#Z`FbN zZ~NmmazsP1S3rMEtHIJ-LW9bjuVhI4GcB!cmcskrsC4J{CqH7l9?saipk37f~t{#A38U z$Ci$VC^!`GQ0bZHS$2JMA(pQRKVNJb7t}V7J6`Q}Z#{p(xJkeTMx@RVHKe(=Df;rO z_0DkQHn;eI8H}0RU>ZHE>^;Kx{-j{_{`WM8p3 z!{&LsIU=&tyh(l@O8Km>awhnN4!+GUGBnWWI23Xpw~JW% z)`^Oo{Y<*y{Ctzmneoo8Y}c7fk}ge^r(48IO~1@o=7o1gVO#Gy`-V6-4SSJ_Mr`_q zVMH(f6iu}XV18Z5p{-;rdcjN$95{x;n1==y^qLDC(IGK0(>RxQpb2|5Sy}G>Sp|r? zv5!3m=0CB^S57bqePV3aCE1&U_bR=js9io+No2jU!u-0+U85o)LO_=9w^7O3h0nx< zhieFe9D-qHea|r|fdZI5V7?LeI_Mm?yt{S3N--Rm6FoBTm5i9#Z>)KL zS`~k$*2^>;JQa`3gG<($sKPFLQ5oCD*y7%__92#Hnn;|0!N_@qK_(U&lK~GZ<-Kfq zozTP1-w5Sum-UYPqPaPAk1+3oQc{9Nhh*2)%crV9Y4ma}VqJH^A2P1vfYj0Z3P^-G zm#UL0UYR_+zsP2m)v;Ti@cIDnYDwxEmdL#1Qj%u0@eJ2!$d=yC&*!;2cgskdta!p( zdjg-COA2A<9db`1ShoGONPXrCnbh=_!e=h+aEyoy_ZSa>gQ)CM_b`^6u#H$(vcYhd z^8@8Rx5dzBZwg*!G|bx_pe`=i_>?CO<%}GK6~bqatO$zJm-|Y~jS!jb8;kuB!-_r3`;Y`2R7 zs$>bIOc{))ttt>~R1c53(2Nf%Jiz-voOx1$={Z zwVvUOE<=^D$4v(Y4%#I*<5=4>m9XY2UUS2FObTKq0!NkiAdlh0%a?W`mt_ksG3v3S zDs%K?cR{;x`o6=*g)8gZS2pcD)`*aA6g?IpZea8A!Qc-W2(OW=n~xW@BP#Am7?vK7 zU0i&!FEOjuxUcmzr=#Qdb#V73wa;%w8TCG?CB{6K;vUyczv@) z-!UCLQtcm5WO2+xqqn1?{kL2ru=B)8)ex4<_9GX?zk7ciaRkIEqG zC+*yiIe9ucmufP*mdngwJtZWTE3yJe8y{!Di*tj*kgp_~T!}EFZ@HT|<|ylDKXVK= zltoy~Tjn0E)X+_a!K(gpNxb!-GzBRjG=U;eU1k-IJy_@Oac|ASsFNMrh6@)l?*|tY zMV|VZ7jFKLr`a$p1!`*+yqsgl$c%;vny0YKmSbu04h*-BC z=dLNWI_@;Pb~e8wL@2T242HMl3!oyK^Y$q|QaG%GTaRX)$xQ8JV#Yn;sC{=-%UMS- zU(Xrrkh?#b!f1kPPMk^^$_#Vv8?Og3MhDq>-fmu(9hGjP)7cPurMJ{W3&=A#k$YsKb-mFd>k;={E-IpkC*G6XfPk@8(jK^ zf!l|DU)OI#rBv>W=&*1u9ZkBA53E@84H_L+fJQWX`t5JMk4KxBb}`r5;}4`03v&9+ zll4{b0n4$^XNG5wj$xA{9#4wV z-TBoCEV7pBq-X^JJ9l4VaUj?GV8O6hb$edW`vIUC37GOQc9Qa4kX5M=72XtGl;9K6 zp1e?#a;@1=O(4c9MBy_eC6Y@V;DPDVQfZC^U*KP>?}>zqOOETEo1oOVa|S z0c83nN6f>i+>B2%mzq`<^2Lx9(otcB>*J`yx~crsxzF@2-!CP7ZoS5gWZ8PjMILkK zKY1Heu7!m^y#W4&H~jU}I}up2L-$9}B?msFyYyFp2k#3pjKs(cl-J+gvTBX}dKO2o zTC>4S0vdr*G9F{?6cU71g8Z!<+>lTu;-nDM&%cIhPlDs~K0x9cBA6>`zyx z;IklNil!{9C4u{BM=zMXyris<8p>90Jo_^0yPN@OgCIuh*tamA1 zfg%057uYt7n?VHaRM2MdDa)#G_^aR=snU&zrIHCm>TS|-*Ic>YSKwfXfJmjy;#3#t z2Xbz_vWuin%U(HN5y`AX!VZueunRf%1y-!mkMO31pBJeA(7)(^D4wF=L~TH-{y?bu z7c27}Zlhk%+7riXuOZjjC|qZbWpJH!WoOI@B}z;$+2G4N+fQ2A!*b|~b*(J8Wh^dA zb_H0m!l9^ux z@EbBjOC*>2V1f5E8rmRk`7hlC$sD8$e!Q{$Y|x*t_Y1jZt9O{!->&~#-@!GNM~6_g*<9n zTKFs(vm&6)Xy(-|D@R2CFOPlhy4H=T$ERm`dJ&0k)G^oRWzalV%?=Rd8mq^kGervU z4f8=!O^Y3b#EU&s`1aAO+${Frud$`rX>eIAW?Qx9_G!s&eTWi9!leEk9tW04LIC1{ zu>6@A-3~-lZs4e&kJIm>WNpFk8ing*(o*nvB$5<#*k}|HTOiGbGJoZGVYdi-xV@F+ z_gl>PU$EN#u|$| zYuk@sTHvVAOb?vqW+^HUPeMGin`mafPP8#&QsTyQD9Tjd+_1wu)*Cartf->wH4=CC zrk>!tNqB}mKxO2SErt(1X}}w)q{2j=7!h_sdi|vsfrJqMqMCzI#qf)cevpF{)FQyG z4vs&yD|aVEYCg>lb-vZ?TL*Hx^4P!f$T+K_icGR3BdS+6VL zdT0FIa>f2yew$z`GbzN+4;(sZvT9|?yWJWUCx8;YK35ymj{pXb%;Htk9s_ZuACmxrT0WBSW!y3KqF-q(s1#;LQHg>Lau(O;<&Wa9WV?CdXts`-S2 zX6=9KOc*<3y!xR-{jN*>G*!S}`D)jO_ej#m1UR&8*1;lTHUx4oTtdvC5U*5E@L9hy zT}4)x6!}B~_Mt_E@5=H-u+nBA9WSH5AFOlNg9r7KAit(Y?Yh#V8rkxF_$DW9b|oYa z?(M;Oh(jrc0D`;S04j0{ksq~%YNkIL#}3D}Q}W{@%!$W8IDxm78~lXNRFZTmT4w8g zrPZODxok2SC5_64`ps+&UcO-Un`#XR*4v=EJ8XOxRL?3tufz1)-SvFQ^!P_Z8duJk z^ap~7oyaI8&+RC&$fR5>g9PH7Auq^tt+Fub+&d1X&Pgchn5E1iwC^b3&D_zwmlgPW z`T!QNYE?CQ@r1XRo3E{(e)VW6<+s(T=})Ja8ugbg;|n#@&C5xFuiA=S`p=w|SmzPp z@JfpTjCOkVJ65jk%I6su1{PVpyhyNEp(zzr7Tc^dH&k9#3UedxnAv0r)hwCSCav=CP>ac9cBh6zHsIOp*>;^W)8$A)vg`VH4cm67|7zx0^ZL)QkJ7PqP;Ot9Z zbTEvFvENruQsmik+!DM|o?z>0WKFVN4mY+J7Q)0NYe=5$1B3oaaL*=x=oK8XinIz> zt5=;>O*%6CA#}S@D!oG}z5%`86AZ>wiMn4Sxl@dD;*DV`AInlM&Veq+ecPcgLcCLo z#BVhxpg@-qxMG^GFxW7yw1L82dlbhNkd9E>jHRi1b*j=Z2 z0g+s!R-g#X-A3AprOyxzN;j07>AA~*c9%kHka^Lk9ekYVD}!N)(=;8-cQ0rtDQ5y+ z4*%&9=I;(?(Nu+c9{qyn>Nm@P&yyMDOlYUA_ELbhM7IpR%)Dc-_@b#oO2W~(; zj<(#6=B=k{P4Ca95Imq}^h5yDP;|Y3_gBTr8MAab>{LnKHgzWaKkf+KU$gh!7B@p2 z-m2Kly1DBmjBy5*7aDvG#?Tv(x3$GxnqdV_|j9R^((lNsHz+V?t`=`I`0{YyQz zXNg|3z^ArlVk6=gf(Hc87~NE`e&+f%HY-2TvGR`^S1eCI)ZHsf_Qp$2JjdnPu;%I7 zUWg*^6^8_}m!cm9pNt{6B92E6Wa-5L=!#>EI(T)d>%~}zW?qQAFdIs-H({>Ev&v=} z%_LL6zlc}AMM|TzH{UBHJ)BsX>-99BhkE0-74Kn->(F~LZqAA9-xUKk8=sD1T2fFi zBxy>EGA1C;#`{ELeUA>nKnYAEOCo3$j`t6QufyFHZx8|r`{n7LZ%|Gfd2tDRhjk@zNN;Y&Qfe*A|56jPu{v44195~VF1IW=6fPgh+C^WgouhQzRbDYv z@g-Ajns9CeWqMKI^x0kEQ{Ez@wFy)-6*K^JdVMLTZ79zceQ{7Iy3kzpyHC>3@WC|zM7yB zK7M>$PPwoqg^1YTB?$sRb%-~2I^bb;h=Gya+GRqD(D#RyS6+`j#X$oGi9S0| z^U8u+v2Om(ewg=(S=HqQDWd{0w*LN+(n;qwFm!fe zA5h~E1JPkl<+4x6GH_gSHOV5nyau*(7$E+(&iVoW`ST&NAlfn|Dfmbx*muN8MT-q< zO72UV4Rxtlu)fH-?a)ERAVg8{St0l3=e2G=?CHxNL$wsv)AUrfK8O+=(Pi%9<(-B8 znA0N_YW&T%Ny~82DZbXRku=umaf6{yDH3t55h;1#Lr)4w?IPWMj(GXHnDrGi^Nl(( zI$U@eC+wO9i=b_;&aFvryt|42i$w89b{YHD6bllFFRuK)fC9{eMGy0Ru%CssHHEkttVloqiS0Hch=(y_*ttQPaARjq= z!_+iPfiqgccRICYj=ui80mIKI46WO~bhfceI5+Um^R)M zxgxAtkHaB)3H{ojS%4}pgc-6?)0u?1vB;9MNT~VSK;B_$-^fr^-NEA9!)j|AafsWr;fR5tg0n!He=OAaoJ3;$*gl&iOh*>C~8 zOuufGQ03fPihZ`vlh1&tbCkD<4&t=$bg7$$WmJdsL>IfHnly^eLE*go0ff{wpVwFJ z)v>cY_dItyqiKv)4qAMDE#-zwZ86|gfVimr72(5V!{6}<+AZ(TU6T3GWp22pFl}Si zt8mwHUTgAbsQnzk^F*o`d9VOW(#qrq;ma|mAg@8kuEATMyjj&JAtZ+=^B8zL`Y@CmN`^fmv{KX5`s+$IJm?x_6mBmCq~ zVCxQw5R>vXHJG0x=>PfKPMUCnA|$*`Gw$cT_P-FTzkV_{14W1dS#dh(XSdalHhg0^ zq6o1n(6#;f#Pe_5uJ0f9pC$YIg8s8)e?I~Le#*Z3j`gm6((`(udTQ@&i**(R8H*Pd zgtaZdSrG31)*Huh_@LlypVy(JUkSgJ&)>Fxacq0_V^ra2lIP)ao+w}9XAGgQO|7h} zZNzzg;zYxx^amI4ca9){a1g+OhlZOPEw@(cURLti}v>={b$ks$EH5{&q@0q=kTAC_CLOm z|BtW78#=2{E&x!@1O8TqSXXBOsBO0GiOT-Q&eez(LIHT3DOkj{0{Fip!3VGSj{f4Y z+5co2XW-7`&E-HGZ2AoxeXuehNGPOFIqVYCV}bLz9TI9+3grLyEbudEx&Vwz&7$VB zqHSsH-RFM!=>7P5*U3i@i2c`qHqx7Yp-M8S7zQ7u0Fq&@dR@e&ao#BC6vDO(hN^!~dUBCdW<0;8 z6xiu)2zcZ)H~NkXvF|7YdR-5+rK1QTKjk5q{G@c-#y>!W>nC#UCy-eYaO0A{Q`-Ui z;Ayjh+#gTTtm5ZL5>d~o4dShFjDe3~?4{Mf*itYq0iJ9b2Fwt{cxA7p+Ooi8X^khC z3MUm_1f9DpVtzzBnz;mVbUol4@w}lESY7wPSf^MxwiOs3%2>Y@N>GTmq-rctPcy|wLp*a*%1>akSg?4_p+mnI;>xC+wtLN zp=!B+_!bjcOe<$C=XGYd+@$H; z`qcG4ENR*fCQ+c2qSF25KhuQ1KmCo;s}C*!KFFXV2x@TwZM`GVu(^i5o=UrU>yD=2 zVMr|>zGckyx-pDkx_;^u`nGvqzquo88plME&g{vj@wM<}L_WL82dOqSl)It_`Vs#i ziSpUzy4=Ot(Sgm!KB8oR;%4^*1q?0+D{-eX!sS+ZMYfkmSwMGxaC7^3 zsoYE)b*9>J*83Za`XsHW7x=ES6C6_X9X^Y5?uc!B`6oJ6{>hIG28P#2vQ&2-7Wby0&8@LbhkbUIG%dEq+nR+&@+ z@a}e-X{I2~I(?pnS z`S5!1mCBiTl+Vm{9YAH{${$kAkuU1*lJ^IPl$hc3(&fR7bdP7+-TpB_+KdtZp~tSQ zJ8m1le^u`ab-4dtwEX#G=NF!=-+P@5!@uG?gqI({r0rVg`@^fV+bk;bHr!rk;h?{N zQ#5Ur?2%cE{YpuGU-QrbPp9q_bv@b1{-I9`0jrVZ4@1*6SS3_+UgtV|v*)i2XuF5=W!uF|@X;;CVOYVJ)i?+iCtz#u&3{6uEuhrZ9S{98s}; zjctuxaDpki=-9I~JFW7!o%ydgMNi9{bh%r-7XXScLOe_%+=IaZT$~w3k7gc;iMHmJ zPo}F!4gUEW$MXWpQaG-sSTjB9?E z^Fip@$@qpX=C`y-LAevYakSxXlezqng+pb;=z^u(tjb_q+~j;5bwj5??T$YzAmYiyO_xF z9+-TF=e10NAa&EU2hqqN`Ipy9#&|hqD1cT@U1( zUqKM&))PGlO{S#(#f??b6Ppx-wKKlE54EP2+l-!so8DHhA8;^v1!sA->v7Zo(Ww7OF8XMH_j(*A@-#OWGP9> zFqhVujarwj+;KMVn|?avJ(%fYQ`5oOVLr0xGcqkpEjW4NKQR!b+(KS@*TfyfIE+)glY}a?sJ=WE9-LDe(HQ+qi%TDRuTVD41L+{SKR8c^j)SNR5 z+NT4i^yudBC11m``E%-toxsjRxK}X?ES*NQI+ zmMIdy$bQ`ChHrB)_en3utwUuvx2c=(`w(wCE9LdBoGL=Q;Onm_Ot%;14LaPRqi0zP zZusaSbrIrLl@N_?LMuPsPAZ-%u#;X5cP2Rsr>P!j9zBzFL~gfR4-;g z>P3Lwt7ZM#e&*A6JRi-_>Dal}_L4x<3%KTGnUn<&TU%|jTUJ7htYqAr_t_06wHthC zY>i3E+}PLA*FN9((08k64G65m#|1M&}lFP(>A|FaD9C)#u<(U#i2;9 z$-J?AC!)fb`lW+bAcnOuxs07(Y-}iM9IDyVI-{hdY7V8=l+PI}hY|beWa)OJ{jw_q z)j=KhMNs3MC_hqv*6JDD-VTGiQ|Lw=S07oDVaQqIAJdNra_yeXSZYNTDu8y$Pl6mc zvz5j~oYHiId=(NINwlJZ;e7oH7t6@on~R}3F({wOC?bi<`&K{TA8u{Q%sN0Sg|H^1 z)JvXpVkAh$2rzc`e_^;cm4a4F)mQs6lvHoAvw2m(KpjPb&%d*1Aw2AKH>iRnJYR2B zZC%0&wl+vroQjJP5J9)jyN2n%WuYxuda9(Q<6EX?i0@`T(Ru9oXbTtU@uYy+wT83{ zAC~KAGb1*(y<2jLevE}vTGZlYz3N7idG|!){NgV|Ty`#<4OctETv?+EvDeQ>xv?P0 z_N~WHI5KW_H#|0=o6KXtOu&uS+br81#u9ql?C_ao69R2F!4r7V(G%?V z-c)O*la7YFR&HT=Z!n8dUC&r5M%oB4f}IF(k{So`;`SFIFyw<>l1rT9b8Kl0qS;8nLoYe=L$zEX- z*!tiMtdwv6yIjt#moHE^o5hHi_2IpoXL~O~l^UshXosfa3}=2;crAgbcfvZ;iBMs< z7{7hI62@K17^%dtFov9AUofU2g%aGbC5(r*SX`Ui5fDC;U_Xx;7sw@wpl2C8Oz)J3 zaXRmY?~+5=If46VUTNf>X3-gDV4P|n6U-0$=9DinbbOOfCE6I*G}m=i`|S)RgN`2O zJq)zI60lc3jITBN;V2-M%9(G1isg!NYgUWLbyh4*pDXJE`TUjhTQ+ft*5AafN#Lj- zwQ6_qT{Jz)gk(MSBeM3ZYjd6Bm9YYxsA@|$UfeKGQqMoF|*DS6zso-&DUu7k( zr(UW-?tCP?k2lQ6rSUjnL=>hI@NNfr4NiCG`EfA1$Idn&DfMhK@hAx@=XtrMY z<9DKwelW~~G?0vI1vls2%+(LlvtHbTnUql8Ybxi#a=3s7hVq$q@lJUSrh`NQ<^p%A zT>o3`hAn1WN+le1TwH1Ezkw*XD1BhTULNJAAP`5lA-^nEl(sg2r}EH~M3ut2dc^ns zNL^OL<+|Uhi;*aKbdsi0bbsrsm7-?Zd}BCJGh3&bxvqK^l8kk>GJ7h>m9(fVu3o_qa<6{m-Ha2Y0KZ4v>VeaL&CI)F9 zD=i9p={!uP=zzE7ap~N?zH>{SN*`5{b8MT_PK1G8$a&Av-U4*wfr@`0JO}JX^IJ62 z*AbyYcj$q;B05~!IJvU6{p(W&yEA4S1iVruPSJwKd!B7O5({kJYt5HS!LUZP-mh`p z4eV2d79A9{0L^a+F!qFT?dk<{T|DeqMH!KJa0Y(fL3%hI>Zhj@gg;BzYM!pTt{sh2gj+GPDV$&b{+h0}d^M8C=k4mubz- zyeg0G86y@DrgR$cG{pv?-m4IoFvN2%vWscABMIV~-&8kIJsI!f6XF`APm{VPbd4KA zyTUi(ba>|~o_ezxjNf^dNty^nfB=klRI1-WerbC>iUJ+C9h&Fw+wsP20#VR>GcA%# zkA=E3XHnnKZ0N}85{;ufYO^}L-_4v?VTCX@xo%Mpk2HPX9hKORZe3suC2EY@{Puc2 zPkV?KqPsDrDc_ns6ywNW;!&?JhBe9F@x*wVZ_+DHl}}cm}05( zF=Kf|8Dls*+9Fg^(ikU9gNijEl6}YQe*MxCPOt`mE77}z=A9GmX2vCdZKvXSQj&-+vzEwcUi^<6UUggYGq zZbosPPO+r61)M98678gb3Lv%n!rfiDxdxBZ)gy2OyX{8NJ$naP3bQlfZg_hy_-Z%3 z)9%FH_yn308|8+IHfZ}|f+T6l9$ni%@3y6$doOhNQV)ceKaW_d@g^Q0Twquw!CuLc z;z0RPmNOo)C;7w@pC+3}Yz&^GD`}cA7X4&wlTe$@leKld>QmG?w1if)&(Phs=xaHh z#rjfo-p=fowYa|G__cc5Ik8XMvnNBPvq@_iFDd{MQ|bH?*Zx6p}`HKXn&hw)}9 zc?%d~t>lCFQq4!`Wch}>7&JpuNde>L$lCbP>+WQKrEe7GZF&*WY8ZV5xrD3>3a~K( zaa|@~W+-*^28C5iCHsI1b6ELD0N_VMq*l^5d=UpzyHFji%G@)nq4T`Z+i;gJd-t;P-%&ZuRZ{GvWf;3t&8O+g*@SD^H517Vp$dk0 zo&D(9kRd=27+ZXZp^Qxhj&xH4l!fG1RYg5;WAR8im=J!cJCR<6?#Au$c6n42TW4Hu zn7USsF-8lW*hH%z1YX)y`ZL@*JEPf*e5izq5iq6inY%9@l!85qYjE(0;S*=Gh`vfsT=Y8N5l*U&MY8}-EaWNoe7aJ)Q?=kx9-&6I0l zD;t?y*bYkn?&&3_WJ^*ZE?O9MI5X3ZK5gpT{w_QYgTjK&z9$H?Jc3-X{&9U_TEmy2 zBP=LeO)7FfhtsWR`c&;dat?Kuto1Hc9*y`TziI5BJH|YIwqY$PWLTR{y+(w{iRiA6 zL7QZH4sRaQEotA=Ig`^H?s#>CWYaaU@M+f%_J)nDD6MTqQ_Bl=tlE z(8AW-^0tWp<(OeBobMd(#|AF8>$sc3KZJZLzgI%zCBpYz?lPOu`x&qHM2?|_8O=tD ztImR+@!XNYMvgvwKP^}-&Y}qaT>f6)8C<`^sSS5SD~^ZCN8<~ zy%h(l0%W9I@^{jP`O6QXr8+$pa2jpYV4qQ2@^4X<23zj%i4Y<4(Uk#D!>)P9=V3O{ z?&0*#JR6Fw=;#{(XeVmzm`8tRV=rExZ}5declL@3Lq63oMzN|Jh7#Ao<6oP z#>sXaI)zCOKoMk5JWFp!9McgE&ph_|-e%Ti`c&-;smyOaRlokZHCU!?oM}aPh7Td< z4R?BqfA8+kc)j!2UUKj+<$x%q)TyxZpv3w9UuS(3M?=m@xI&qEl~P|=L*zN{*NAEO za4C$j^mWsQDIZfSD6s7li0$at3>&KGqW8C%ZT4O7W|XSiC%F)xi`Q+9U;Cx%4l7Z5 z9Ho@ADjP}tVo}z3;%!IZNzX`{6#H>>BiUD4~F_L@KssAGn+;w{z6FIuXQHK{^ zy-Dl7o&{jI{zh^7OsDzBMR$BM1WI0s!bML{n7Ak~>=Vo_%^^0e#ACcIJwjKD%dVyn zD{sUY@0JlanQ-3=C7s=q&l*QN1@m^-T)1x40^^sX3r>-EG7rNsY4`hPo&7^rX1+Dk z0hEk0;reb^w1+b!)2HlUxaB}Ar91;^f>}Gb_1Sh4N7}$xLfixL7NW}FOTTIu|A>cB z^GfMk82;a`nk(P(;R@@>%z4Wf_cYk}p;N@N!8#PjeD@Tw4&yDs@_wM6-R7{re@vtGB68h_MtOZ{ViQ{TBIzi&&{B}b?;`z^hwgqWf(Muhu& z><{S$C(}8Pn1OA?$qtY-oNuBkm45(;C*cI7ozQzTCzkB0RNF-ox-P$+i=edOP#v;< z{kwDJOblWy*rG7$s^U>X3pd{vDeCece(F*FjRJFrA$#LNt2^RCuPN*in-#u&Oi2MX z{jp735)$Ih0mr+~wr^$FjO%cU`I4wpev=B9{99$w^ren>8_F$R_b%1SRn{>5j0@c* zM8Bs!y5HU9VPrZK|4_D892{$=uJB3~nn86}(Bgg###O3!&(0Nom%1Q@ZQGeSbzYY< zbsPDQiqXa!$OciZg_KcP*DHW}`}8Pjw-Y(f06keMv`&EbXKUr`^)Ns#2!f@4ErJQm zw~J=sc{ue^Nt<%A^i2oZ_tynigZcT7<;!*HCEx9RWHqu=Y38wT5L z@1tG}HU{!tyy7pM^ln@pI``w7__5Z_!GaZ@(!S4tYJZHA(v*E7RO4u*`8Z0zU8s(n|9Uf@PCvbGP%RW?`B32dMKy*jBtI2ON*Z3Zpbgd=ZlD< z4i7FIiYFGz6BS;|H%26mA|6VbvZD#t!U$D5C)NA5)0Wz0W8^h$)}uD!Sv3uOqr`;R z3j3Nb=xxtT#&>u`$;YfLG2QE7k`&qPz880l8BH zP+ZjMTE8XQ3Qt3H zlFc-p=|7J4mJ8(GeGOYm(hV^rZ|z)jP0exFygz!62*=QHrJhwjCEw%U9;xmg<>`e- zXVL@C@fEtZRwt)%*2rd?5e}km%phf<@G_fh!f!z4u+7=G1t|)i{#tkaR0IFCVwnDB{ycc zp2*TaG3luEqn;y{i^F&yN;`Xw=P_T5DAdIRV5A`B4* zKIvGcUO&ij)b2wobeQ@3Vhf+TdpFmqm!oIvvZfp#MaWkKQ##HWZb0QraIP)~Nw6H& zPIuG%BI3F5_`8Q1;@5UDnj2BMA%gg8KACiM=l(#yrLs?cYed{yQK$oV)J`kv@qcE~ z*Czyerb$X!z6(x?FtEac|7JAq{lQS_EQTEP802J%rCD>hQbh8l50XgVHZBG>Om_A6 z+B*kea^58u*PwcjnJ6vsT3&ld0YK{s_$Yx}a)2W8M(I_x=+!!-s^`N+U7yBWWkF!- zqDHzfqAER*%5C=+R{HkNGc>2bVUs>TE<*L%(9%8&&0NSPRR`&eVY7^VZ%D* zP0Z{1g-PtU#m9Ab$244Z>2~ZOk$H4~IEI%EIC%~{m;lU2lFBsPH;bF=o!+~+P_}om0AAVk zf>bxMZOH@c;&n!sYzt|$7mmCJM+To>Flif5fsSKSbVlu=;*VfNa-UWJb0xjiL4&D| ze|DZ7itW;g10IQ}lN@hF_PkF9m1-Fxl|_diE$AR&&a?+#oTDJMzowFh{<)(oNK!as zb;?X;jGm7yFn@Xg0UPDvk2&Z?s^QbDYftSeNcR6g!OnX{3BCS~Ij92Wkl7DzC6h-s zS{XCpU=PHo7s!Lz;>gU_=R`Xv(dk#+5#QY=fpF4-E`{f=_~MR_*OVSc27liOC6j?{ z*Y{>s4ze+3q%To9r{vNOQ9j;e;rH>TIC|~VB(7vToh8PcT9LaH zq~AVMCFO@a`KRQ9y#F70Zyi>3_Qj1JPz(@7r4bZS5fBa_B_$RpDN@p+bciS+hc+-l z1?g0j4(a9~Ap#;G-65R{9Qwdr+Zi2aUT1#3|K0oCzh)lfaK5qk+H0*(tgwlUXUm#+ zs+I`ul!;k`j&O(WW~`&tq3Sn|=|xJ17Am#Y`X6CCg*q&ETPM?q>@hiF5d9t+_p>2Q z1pwwqS5tI#&pU@}cSxt;-PTun6y0Kt8a$b&{-PcGr76lE$Mt0t(r-J8BX8XG6P*~-#F>g; zKOE__1;gA-#pY;->251mn{kJkuYx)`f4Y*|Y#Aes*=bG^_sRf{>t-n{ zhWyuf#&4ifL5xr^;Ooha9yjrF$S7c`qf_|xwVQ=5aVg=C^l+oEZ)#^+?E9#CMY`0t z2LMi+ZrAgk}z6M6QKM9x>?B$24kL1h_aztWuX3>L^%IV?REm{U`bwj z%djH9g$6^vJj~#vd*^168XGDy2kBf`jG9uPE#EC#YoCR_xvIAH@qE_sy-nVJoyJd+ zj`KI}WwJlb`Ddr9M^A=%X?4rD6~S)B1V_oy;s9aD_taLE1NCdEf0-aAbJp>L38>q8 zVTbc<&F9(Yf&y1U``nI>5hfrhxsJ-QiLnbqlUP2O{w)zh*HQU=Pt}Ev1Tu_yKDS0S zE-og($?V))Uc`)OOh4CdpG2XiH{*QxzRX+kN&!$>-#n~kCAK^g)dgnDVIOF@$M0tA zIdc(4>Py3*OITk(RFVj;tdB{QVzbJ&QgEsqtu{R%b%f!5tbqbDwtY15G|nm|#oa2K zK!9((x-4F4hQf={oiFK=nUnG?3D0Ijj<9`eho5R`C;DIu)v^bM<;NRmqj2t)DUhYG zpIO-JRsb)v1K~!le8KIkDH$)@9pyG17#$3mT9HKLj;mmb>dI%H&>re1K)s}@qA+M2 zX4l+!1WNOC73;H-;2vgAQ@aPRr{W}evUA#Zq2VP$nU}IU>@9SoYNHI5{LCb{U7=F3 z^7OCWjiK*%zLOlWklwH#Tj0A;%MlaGPhJvXnN~T$Iu^de&NYF#l_lyZ(2{c224eJ* zk3-)-@WKf`(OMy}@X)5|5p;Qi7gExkoflue(z@b!)TQSO0l7bfu04InPWFNGS{4xM z3Z%zh5PgO}gI%c|nBK%4o`F;@esM`^Wn@K%ADR_sSz?|UF|9sZZu z_qXWJ;5e3-YRt8P5fU}%SFh(pxjf%7{-S%>F{mZNWz%BbE)aVM?*EmN;7bAuJMnq; zfxFyD33BI%X&NV(AuG>Sd0GJ?xhX{6N>`=ie{hs0G#93mg?c6t&S5VLCcf~jXp+-u z8isD^*O1R%Dc0E5doEGN;Ut>a{CtN*{?;8ooDsTyXuP*mMre?_$l( z+aGxYFnxQ(+6xhfWWgexC--G+L>FF542-1DzvU*ci)A;Wd~4JZKLa{p=>?#8WG;y> zUg4-yJhdmwM0V4`(N;$D^H^599jcfJ1;*>Dr_RT`1^_zyvPcZvZq?|ZE58?uL_0^_ z+nDdY71z|uxKc{t)2Hk#-d`o);#hCH0sS?WJrg){wR>`IfmkQ7IoSO^d z;JPc07xl!=G?_F;gWGxgnT3#^)#%Hb9_uIvDi_650b46M8t6w1Ej`eg+C^s5AsWBX z2y~DSM92oOHpVK~6F*!{p?zvGdpFQJ6Cj|PN|QKO*Se!`V`wyV>bapE>Y6$vVCyKj zBk&ok<_@EVy$YjZGeBh7=^`u+3`)-VEQv97%f+6P47E=N_!u>_-tK(?SpO4f&)so# zeNJ>Kcu!PveSs=z3Kz-7q4RN%hwl~c9m!2OUeGYjM16V<7{56{WJ&24OP+E9a@5(_ zLruDh^+56&7ET~(R&x{`Lj~81h~Z|AIf6+9$(nf6a#uiY#lHm5{dE^e+(kJmUntFl z#+rNVah$L9WnZFeYnrdeO1p%alVRfb5XNGCf2asGBLG8zo#jUhLGMOoB7!e%vh521vlp_oJa-=HeQ#erbVS0*gGs_ z7cx0sF{{V6s5!RC=JD9M7$5A=BQw!)9Q4!FjItu1nmtEyn%q_4&|XZSPDGYYg2{)p zsf8C2)-S4k)nbQbt_L<`%tqRQX^+{Skzg9k#dk|vH1Qc(Z7T_+I7pv^{kiSJNSzvo za4Jr2J#QjD7ueP0Z8l%88*CG$Ikp#CYw_AzwaHl@?bl#ZuKhCGoq5@$d6&|BaR30P zAQ%7g$SPV>;#y|q;yTyKfB?Htt?@~dQ>8auA=y%MP=3-yt{3NDbrWb0df`?=i)@CN zNN?tuZ-}##Th(X7S=ANSiP^T9aTk`jZTWcY(P@DM*sl1xVK(cInE|fPO9s=M9mmd( zi&=;BKO9JHQDOr~mU#wJDt}0+_7C2*v>y2$&Sswj+$@Rxb-tZxK6qg(XY=rc*vT=LnzUZNM3rScMvqmqIi0RN$g+~{IQ4CkmAd$ zhbIy=;p|*`wAhvf&rf3uMzt|G?x$z&6<2mfJ56Z z&p};|k^JH*(v??qr?c1Le5UuAJ>YdfiYo{5CwxcFni>}0zv17i?r>w!Uob#xyV^KIke$qst^vt-)vkaC{ zwV~7smT|B$Om|SH%RI$7^ZIbzMz~0Pcu>?$Zc;edFtl z%dYyb3eHbb62-Bz%jvZkx2tHBz5Fj_s*7ro#+XY-Pr;PVQ)HZ`^0SOXvZqKaMp}Ug z;&8D^P$0t71UUH%onT*|fB2e0>3HnbGYu{JZp@T6iC1D}ZiDFg%qfxt_9u|+=1%pW z@{j4pQ`f!5Ap*HFR%h&)^eo{JrO^s%6a%T{(DjC=mf*LRm`y*!<}S5)E6mPo=Ab{1 z)opqdaVsp{bJePrbByIRZgefN@2p*qYS$RUe0_6vB2YXLC}T)9w!~Try!#Jk^kx!R zfe&U$-EkAg-pm3|?kOSN&T4+?JlIorFr>Mny&N&6J;r?&JH{Sl=riK&ZvNs)%$R-aJY3t6vt%ib-ocRv5RdR9y^J&|H*R$c?hmf``hF^z%P60sNOIlhv- zcJm9!7#`qMnisz672?j6l3JYY{TK-SPVKibnjIZ#DR}i9<5;#|;A~REw5Fq&;*T!o zrp&+i=U>70fBviuxa-CpZ^(X?9{=mlJfdkp+-RmmN%PCD%&$5%-+s1F8)S->Oj$qE z2ma&Q{-l@IWxzEGO~$>r{A>E@uhK2_Geb}}23nQU{<2;0Ybq~XWw1J2W3+^z>b8Hq z{a^iqhb4$2)2&)>{qOtv>3XFakjgtF#`EF73hICPte(Qa&r4a9+W&eNzx)SNEx5*z z`Ns2n|96ih4Ro^~vJ5Ex?^c!q7hGdQI3p)CYr~W;&5hJg0hIGNxH;d!x&^>Aof_xw zI;B}u4_*Z`(b~@NPO7{D!=)n*iN(Kzt*`mT064o?PCW&BT5fV}5YO_*YUgz6>W0Oq?- zs-~`K2VGL9XPsBi<#Xma*p*b1mZw7VvGQo*{Bx2B;X0ded8kI(G#QLg*tq#uYwd48+ro1m9Oh968W{+dpV)dJw%4@n zE=+k4apQs0u|9f~RkkH0IbS>u{2!;FnN#iCBxvDuLoHlBOg0i&HOQG-Me*3dhL_MW zts68_Po%IkeYZkEVp+~3zWQ*0UMeI3ae^87jbv-qK5X7)n&s{XLXl>x+(Cbu`?ohyUI%VS7E&BV5fHcB zX)G@0WjKY*6Bg#AYNpmtmXk@QhbeSrd%<}g7Z6?3)qje(8C>?YlEG2RAS(i++~*Fhwd3tTTr z`#fmObb)}Wu1N$`kSFEFi^P@1OQGBbtg6-qx5xxaU%JUHNG{zG4=wwY!0?63W93oxcuJg znQ?(TQy{J+zC^A{pB=@HqUkUY2inzMf9SaM2)f+0NkEIf>#bt!bV?Un_l|lN3`3^vekSglD@;h(^8}bB*AoU~9 zNP0f#r`pu)Y8-|zQtJ%cZPwFcS%EuqwW!lLKO$alP4cCqL@8(i=v=%Zv5rzx9s{;S zhf#p;OOyNh0VeH7B6`g2xR;6hMl}YO#>W|E)+SQk)v<1Lz|qIvH@%R0CW+Mw|Y1))N|+vv|$N7<2!&XBmH z_<(%uRMOjLKEjI32C7~3&@5L9xKAR%>Qec`IPQeYr@ZbW%#k~9Q1Nhutj=E&bFuV7|w%CLqHPC2D>EW^IUIIlhT4F5jlid zWd-S~@vTE2G8e`aWnS)rH#u$`XyEw)Q)Eu!PR=4rA*%YN{yW=WZI8uUGCEuG0gj^_ zyj2T&vEg-NxmP720eN57f}IRT-J*o;CJLCy77MW&Q97^AbyeK^T5I*L_NwAq?T3#Lye^NA`|1us-KLI$zfFgLK(gmn)ii7> z5RB5x6gVBLL>{RUslb2p{0WgU26?P47A(9X3Tp%m9g!0@=dBS`EoXz!prT?GFz)ub zGJ60$a-hR5`tgbh%+2C`TH9d?f=U_5nfGj0#3+s8x)}slUn$KyFWH$j0I5ZSe1Ah0 zaHdktvDRiQ_w-^SYhMMmN3$G0^@<7<8ikAYZ5S!Mq6!(-^sMgsQiCYrWn5%V2BsLg zhMZ$>(?jaS0YFs`$2+yD1AX? zkQ2AgH9nh=cQ*$g8~T)E6zOzjT4I?w^&-qDxuzT7C<#BdYJb$#)uoUqFtBj@6&NsM z2Z)-Jl$v3hhPOpjd&GQ{eW@2`KfnqjE_UOU^cTY3Ygp-R4pK83c}V7%UvgiGJ~>)nPo z8D?gv7meJT=adSig?t`nWj`J-&t~JsoR8pkdH2bO^tfN+qi6;4?ixnY_M!9^v*x;&}3Ar-XPO3drhi_!A6zdF;sUbVU!fA!2XmXpm^cG-x~o=}^J zi&w28-(=lfn<7ZDM3fplL<9;MCp`LNw!~nfYs9KvFilPoJTCRQ10e))pS@fEXZRYC zN6%aENbIfd=TM+r`8Kho@XEW#4{)QiT%YvruUG}^0fs*X&-=bcQ`KIR4}n`XyWyRT zPXVuP@odwWJpeShAWC^Bp)otj-HGKRGmXM)-}eLrt)K<;-QvX<(X zLC9Apgw^B)EmLmsI9HM9h#*V~x(y6Q4OAUP!{T`T>*mMhPI+##0a~P@@zyNMCw{A) z@e3Eow#HX{0{ADZKhXYorp#oOFD&&aRR(vpxiyWUVT~jXoLeRP1$`bTm-uWwLUfS- zTyEoVL(G7Q)Og4es2`bURy?XQT!E^pUm@Ng{yioo^+1Nzzg_%Gv1%2X*>V}CjvTf# zQU4`)@>6CAL*9>^--(G0FGn07VHxa8x{H@QZfYK#e|YClSyF|4BHekV&aBvHJo12RpF$H~0Z;+S0i&>myzRGp*etm{kS?s(5;ex)TiemD+VSSXyt`dAVmAF{IX7z(vg=`B>X~usFG1Ui z9v$5rSkGI4T7)oZCn?#Em!yT5Y^)XWb;d}teAvYrAV zV%T9Nu#fBnTT;ehrH`$2sbIVC1PwFfm(#8OnRCknoZA#|bZz;Qc57zudJh)+tba?2 zKK|hgFCw3BgYmYD=bAx4q;HD^N&+9oU}1!J?%_^oi9uC|U5Kt`M&W#?XP%xj(TBvn z>0@ROyG1-kHdC#|G`ulE0}ERxCbQDK!wI}Kb5O@nfdyYOR70Ng#&Om48(%n0Y$Wpb zjB$!s52T_)h~R5_oFITEmHa{Q&B1dNpOx_7Xbazw4{ZnPj3D8im_Vf}y`xQ%yXRel z?bg$cKo}7(2*G9P^jNh~N2uUx3buZziC`As$DTW}P<@np1(yA#ar)&I>H6{77QRNJ z=3v`AZBhhx0>ktIa9+Zfgshuq-$(3-{+|skDU+SCTQH5h5hxjN_ZO5O{%*68Lu}F$ z@1RRXN0l}t`29r2pskwW++0d;+-uxGZIchO`WS`Xmf_|+LYItyC7w)wvWfPatHaSv ziLJ}8Yb;`A+u~wmBN|ownww>nozX>l;zWH4Wz)S>!(11?#2GGa5S)Us`bi~Bqw}<*hu*BJ&~#U zsCy09Qf1c{D~@*pGge#qarXJ*NYc%ILhYt(Fh8@`RI=7>BW6h1{75m!xU1IBVWq>^ zt;^W&(kzBgPoogZzLW|Dm*jRGO@7o-OQn=Em=$3uW~zG z=)Cwtip!gRy{3OkNk>kTu5ZR**4Lk38F2VMoMobGYv{p-E|IC(nTM=~yq>9>*_tnH z`keWZ>#^Y54;J?&JX??Y-?_urX=zv^``>tYEnU-L!%2Xt;R zK6&`O?D6iRF5ND>{FS&`_FT0X#W2y~xI78F#)a_Ny%BDycigZ&%gx!Jng(XM^p|9t z>^pBlS3LfcBDA@AZAa?jGi=$k^`e~3*5)N29l>fhLpKfgrQR_mG0D&kzivx&|e^kwf+z zu0T&of}r}^+bgj_Uf0TcUW?ie|H=+km8C$~2(v`5wGZ-IIR`-^;-cI`I0@%Ez&&)R zWyTA`%6I|!Rh{pGgS!vrK%LE+{U{8u{2Rz8RA;h>^P%?DSmT)h^9=*=Dv#a6q+wp& z0p(N)r1a{3G4=0|_XgOR1W9Y=6=0oQ8s?+TQYF5wJ*b8gZ8wVcXb9GqvfWAt%yzRY z%7^-T9a^(SLrV}%!zUC{G&%aC#`3#m22CCy`kQKKEqGkBDpBLFHn$+$9GBpxKhxgSlwlddv{XK8IE&5;1E`;pLyLr+-7GrJ&&^7+ z;f<&8``0C7=ngs6BcQo`=s1|`9Cgadyjv@6w`m$bz4g`&v`baCy|`CiY3D3gv-D)8PC4bdnOJJ zHw)j-q#3zPJN0~nt4fy*XMsDgWB_t#s~MA70o(&u=u&Esz5(+<154o-Li>6X(?60U zhm6wCd5n?1g;{61ux583ZNZ4cF;fC6;RxEGjSf)3uKG<*R6!uu*!uE41!fhb;PJOU zeH(Uit+&{6r`ot?NP+t!D0anXKfFO_jGywnbQWc5A(Dr*LU+K|To;Dx`t?@rUG3d$ z0MlR9NL0{ZTs3ziCo32(9bSi@H%U1cg^#J(c*&@mb9sfyqN53qt$AR3L?f%lYxQzm zTS3p#M~9O2)!KDc#b%}=e5TdmWyh#z`bQV^pSeXeQ1})a>&EF%609=uz-C#sp%=5a zY@d*&vOoC3_~5wD!nCr2eaL@2Wca6%-K2h)V$|pC1mO_-W6vyD?C;{qI*mDrNm$bj|OC%tN zewfr*?pfg=D8=qn^l~a7qvQ+#D&r2V2KVm5#*yGIsu_l)p9N;?1-}|5!@Of|n`vk2 z;|a;uD?THn0>#2KZ>UtI!Tp5m!I|=Utg-d2KGS*I=<%bnNCGcRF!Al(0>w0 z4=}m3%*N{(VtSzs&VWkB0f94*F&Awe9Ve}YxSeVR_^%$qaA~X8_w=-eC$G7fHNRq8 zO0$xLQl$i(u2dJkSau7%7YsR;kEg-oQ+YXHX_hUEJ^pM3|ntweC zcH(Fl`qzTqA7Sh)wafd?x#{CnlHbKDRJh|=UxPn|W?*zHKE)I-`>X=$-QMWX;xEX#1@e83@0rtVB{2!s;wL=&5amwBz#CuJon; z!;;`_W9p0DG+q|)Y4ie6+|d!=qy;fh#OI#~!9y*>Sj) zzozkzm(-jDFG<8`68LukwEBc4G<^D2OTRacYt93VngicA}bU^(FbDyC;zgzQ?u=FhuiHWA+m7d=Z9UU56K z31b{Xs|y`1F+ne^(a75ijwpk=8_PGLp`s)dLTpD=JX4* zhUkMKNdA-q(;pk)6wkz}U!gj=P5QkyG{%C!U2m0@p_0?uO`a>h0A!*$oTfH_6HvK%pp*N+#M78dtt9Hp@AHK@D5YOv0WtfMMl+b7@dY zZ`k>nx(?AYUh7E|`Y1jM6($;H@gR7q6&45AIj>tJoIynwN6nq`Kf9hA4r^m>28kdval#sJ- zvJ=pXmJiy60*;#QwDeMb9@Zkz-;byrNOX-^VItce<7j^T(KZZfx}DmVs2Ct}S#6un z=)?u^BubJI=W&uqYk86N!I<=o`80n2TDQq~J)ACWX%Dq(m&^G-#};O)1UGy4GCX;( zU^01OyyYRh=izoChe1a+ZFP-lyrt%uRhMKd3ytxXF}G<@){Rm{?EEwcn`}E!t`zfv zoQt5_)hE`oq^PC^uQHzBCG}aM%jSF(D_PBa6j z>HbNAw80}4Ov|RNs@%Z!es&Z$lh(&`HW&xiaR3l7Ykp%pXra4v6+jq zeQ?6b#{84%7cdMt=0b=G67se$R;`-X-7kFExe_qQc6T9Tt2xVWNj0M6rVmi}QhFqSCfExiG$@ z6kw=O<8$DZ?;CLki14|bN!`*K9oln5pXT)Ym|{@R9VnZ=lvfsK@mb)34Q~7G=`+O9e{|D=@pMZ2zHX7RMy%`CNAW6x@!ESd3D7c(ui7iz|Ga55 z4Ky+b7aa4#Tw(qzr>@mP`h1ahxQ*7d?Sr==kUK=LSR8-ElajS+oSjZE9q5$DToN~N zaB%}qf^nvXs#Pb(T7B(^Kq32y)`6Z-aL3}#ZAo9a-021r;O-n73S>*p($pfZFmdS& z%${gYNm$T#Sasn^bFEKqTJHvV_Zk{L^F&R-f6=-gQtH6Y6dS`1NDm~s)Rrvgrj-vi z&~a&2Bheve-+u;WkM4b6_9DgLFq-r6IvIv!X|zI1ovVYOZZ4z!0BZt#7-HvyjVc}> z1y%=rtIJL#?tE^~28kmw$I0D5aBGq9EWgWitZ2@?fUa`1Xzm73dUu$8Q4Jz-x3SFx zwqkTs74dOYMtOaBo>Lqp#&XCRWy`ysHp_Ph#@wH$b-|b6XkhA<*h!5e+1jffT zE5iemWYY1|=tfC?|KZDs(UK;%sqP)72PZeFnn;*2YG}waZpgbr1iQ{8#?16A?#!sy zh{lKx(iCmK_I;yy3^(j;U)3OjbRe9biX7{*@xuKV3pYIEN$GZMm#balwigmboJ|nT$keG*Cx2xzG z-aj7DZiJUJ)0$8JfM2k&9i->&?&b#?zlN(RE9Q*^_sV}qTQ1V|uR!A*nuYip^C{e0 z-Ym$4r0@fO^&Marre08-tkQ>ex8X(v4ZX0}FcK@u@j9`k)RQvdRg*R(DFx50(}um+ z>b<}?6evjIZ3CSIFbEYyR#3Ss{f!m%BT$EIx4|{!2#{Z_T(%d)ux6jsKL7%f^gi$e zP?9$IP~D&cugSaz;kuoW1Ufdw%7%cqW{I*4GmW~I+3WZ@W1)wp*3TB?5^un;tJF}D zVB>8gkE2Egx%svn)~f}gE4L1?xX<~|!`6##FV4xB0Q~SCSU}!ocIf0|D8xorOrLX# zYAIL#dRYQ++OUk+&f1IFU!DkC51dPU%&v z_e{_D!=u>P;z^fg5M=!wC@;T#Gs<+M91pRqS*19m#q-Emd zN1+O-aS=bn{X-rDVv~W&-ecP_TRqUNI;usp&&lHT`i{=YuXV%!VA=T}hVOtZ-o- z-K=n#(>aRf=YCy4|C!r*h?Bs=;e>^=MM?bYX_0}ar#N>(LwhUu@=+rBYoMr|IU0q` zwbK8vem!2q67sOfmMx1;Jr+EE4|n}reg4No@PdmMI|pL*drxh103BG z&bQ|3{b4BU*1A~SvqD=W5-Q_`VC;-8Exzy=r7}*xZ@WJhqdB3&;$SX{L!3jBc}Ob>!JU8pMSfyLMh;BU~|sK zpZ(j9|NrqF%XXMv1UX#=@|2cu)jXIHQ6qjsTh;~cYv7b{cYOuFPNBd2DWC*J!omjH z|9<*^y%^hsVz&ZFq9PD9?&q5brGUY+GqiD*!dkgNeJ+L4%Eyoa#%f*!%@&i9b*>AZ zIB8u9{XDg7y+3%ks9m!?o)oJx&G^={PopT`|7MnE4R3}NhNb;J&#Xxyv5xfkdCFXpNAfk>ylc1zoG%Nd29sHYtng1sMv#W3mBrMQQ*wsAQ2& z_~Ig@Je(cKoW)2YADNinK`sj+jaSA|37G@kl~PDc>W4z1f3!{me)!C=y>f+CKHX`@ z6yJ1lBP8hG1>jAz#>W|@_HaZb$L*`%KOHa^?7UR1zy0`f{S%*+lmx;fN*sjX68P)% z;h;^D6$6aB`Agxn3l?nj`IlG_r?ax?rW?R-Gk(qlbr#2gXWuqwVcg7sMT#t)*b!0^7{UA`SQDcg=mjujrmQYMwB?%p!ETa zBmW6G0#HrI;pDb8BX6`)*sl6mIUknkXE#$avdb`4z<^tsG?JU&d;LAD0TQipTI=N_ z@bwyGl!A5z^1t_7sIli^)t@ohkT(yy%QvtZvX6a+BakW!KsZ^jpp0Pgzj*mUmA(Bz zCi#G9G|8OR`~5s>vV(u~aRo(5*yY1-fOe_&+DJH!FwRBd4jF^iMIhXz*G$Y4;QV~O zE7CvQ60n4=`ou8}UyB(inO|4FP=2a0k5k>gc-aV+jbidwKq>+hwu42D7Aj5DwCtnA zrUND%MYRzbPAn9bRNKoEof|bYnipm;=TxbM--boxF!-gX?Eg_nIR>yjJ$P_d6R`s+L@p3}Y;FNgM3L zN`Oq*(KrOlUdREBp^Spoabb#!K)%|6a$LRUcucwUF!z;> z#qH!392ZesJx~kGFG?A&1c@xMY>OD2_la=0JEuSh0SSssGIt)cHBhpMi-ZEpQ*Gsw z7i>Wh-7nw@ugozH{D5;)FGQHH=fOh|Gyt=!QR5~Phi>fG)6k9AyVixemmAk#do6+^ zKQj#OyJdTH$&wmFf1CAlBYxC}&Q{EEX5bn~mtr(aAfw)mnnUnn2jO*4;up)YoabQ2 zs^5QmC$kzIKK=LagAv@7`zjK`=@9Xx&$0YgD3#zkPlLG$Jj^>H`*rgM$l92}*V$mK zG47l{?!>LpuW+s?mU8GfIJZfq!AZ(8MFn}UgUFyK*A!u0@KqXUCprgF zIcN;_=MQ)psy%&u_iP@~yD!-(61kkj^}z!k2THNtOEct$u1e zvu^)cYcxKD>t1G-$R}?71Otq;G#vJ6rm#1qd(9*R3VI$rm7c9NOwd%DvvR z)2k(|g-vlcI1x|`u{;eM6JpsNvuEo4g)(%TMjgutaX^WgUC7fKZ7ha2gk5nw#D4*r zI_!feHSwGIj0^p^fRM~jS>3pC!{u&SPq&n^>6*O&WXoQkq%QYk4!h_`B(#)fm^H+E zhXN2$0={XQe#Wm#!o6V1#H!|mtUYW{vaDK&jXS`yy9Xp_$>Udi+5^vi z?>+d_!F!;$2&J451-5Gmh!w&G4uo`@$~FZaQ)FP=;FVVWGtM0!cN?|qs^+3?Wb0Ai z!s()sgwvYz2}M#2m!TS$CLUOzf@PPglaI8`d zhIJ*Rxg_prliWXX+NKRG=SmSQ9S)fB8>mY(f*pBAQD z>8+&>CQ4x7tGo4ZCk)6bfhZ9mp<7Bo<%BcJ*~3NDtU`BX9hD267s)!t15VD?IpCiv zsv`fQ!f?Ypcp<;%1*01tKd|+vC)UYJ83!%MIT2O>S}qCXyTYk%BRURcvwD_=MjDSJ ziF@WCngC&dObNN8t2@4eOWCsNeU%M8@X%SWngqa6&n+Lw%Nk<%t<3%_MgNyV*hBBY zQzndvQPp#*+b{e1A&}jL6Ix)kpANqTX#sqMt`EHba(nOUKFyQ`x3+z;kOdw|1XeyF z%@bw$TQ59hcnCoGcf2<=C5pryGE}2QuqO7svT_~LfU(DK!*n&%T5=Ld+}qM{%dTb+ zLKuz4g@NQ{c%T|*-&XML&N5rNal@mg%Mc+-z~5Zg?qbxqx?laK->W3K+2Ka$ErKX7 zKRj^~rHG3_pY_=!a1^IA`PEA+yr#nv)B7ho;;FV}R)O~>%sclagk284<9K{U>XM0n zh;`91Fp@b|`NE9K$fSy6CU7rIWa@*)gZ#ri&|u9$GkH{!)=C}lD_sTs>;8UZ$koiE!BIH z78|02`Nr$EiauKc;w1$#tmcwIHAA0;{)(1SeiT=mMQ5xFGv%9c@0HgHgnS??m!`N9 z63CScXVMxpD?R|K0ra(as+e7h0YLfZfwS(&sByNdafliaDUnGF}Quz^{# zT26l7i2vD%kvc|dw*m9n7H`wulXCXC zSY9|}Es^rHI0#=#F352=&3*0i<8#vOKXynVn0g2rWStEX&^Yhg;kJ0{J{#*0cU#&R zSy}mKc$ya*i5Coskh^*DUhT{wFJ-hy+__z1uCB^n=Rp+LJ7wB*ImmecdK3YQYP-}i$ib*$n;vDcK1QU1vPCPTE^vHua zp%N6`Gjzg|P8}X5-Vn!7L5EI=J5q5ydM43`JuayI@rv%QC@Tp{HA#%*)x3XP0opaYrooJIp~k^V{LChzh|=vxbxnK?Hc+~hXsB^fxS zbljr)0UPLGmim+zUxaPL`chl`K%jDFmWDVrgeJO54iyXMClk=?w``*p%$&3K>_Kf9k zJyRGaa}{$bQA;TDaFY49#$Z?`4K;ZYnQWm=HH+omH^T*Zz(x%c;1wvb zDr(|iw?T)Z4mAxCbIMS)F#hCPp|Ug}Wp;aZ@^}XZDo%!KWCQc`*dCCV7=VD!F+brJ zA5#}yTV$?uOVr59K_)7V)5HsRkaN4k@+jam>jL-Xu3NvgSXyu;<2ydcEcJl*XfAX~@~7bqB>87%f=jQvliGUC>&n zXC?jKJxN8Lg}-~ooHId*0xGQCeNRtqkIS$D+MfZibNir2vjgVCQ=+8UNMDC5@7)P}x^4q0 zDaHxY#_^B8^zSzzRS%zdM61T~@4xbo+F^tQ-h_nv1ody#?dU=xP0_o1#QEeOf9bDP z^Unt|=MFFvi3+#pb7Bw|@K1skz}3rpklASKh#L^I)L@E%Ao;iYNZ|&Hwds9-<|m5j*qyi)6=rk7!a1o{(e> zcI2VI|KjHqJ3LH)H&j-xk?F%lunkwTt7acW?4~b68c? z-+)jLZ}O28dsTVY@0-h``@s33*{k=YF>|DG!d>cPvVSclDL3lF>9^bV7G?(h?TUhT z*Xdh*Jje6b-{641k&G$scC3vR{CP`VC##ycG^BoZ|Ia_%LbZ5O%B{)j$HuPk4j;w56?Pk0Ek;)p!&B< zC2WN6Z%**F{eG!`d?XS-#`0r1k5rQyNlrtCR_)-Q_0!g?n?@g=7qg`N`xA^No6`u1 z_W99PiKHWczEr@4c|+ID8~^i#df-Tn?0LtV&i&&YsnfUH@nfOS8F}zWIFMoH2gT$% ze%cfx4(P)x%vqcMmdHvqkS-@Es8s%ds_Q8Je0CJp^lCp}sFZ{UzgQq)?7%5^8W+cR>=s3dz-(TIx-9Mk*UE#-^ zKVN8MxKt4H2b`Uc;@{rf#yO3y4L`oeMKkilur7(a%hJbBLO;Es42`Nz#eHdTbeCel4+CpWjCFPcB#>w#GdvGuQcy>;Glu=bbUuZ1*dE?FL zdSS1AejxA|h-wQzwvm)R?H@~4zbHM!>&K5V9?k@mQd!jB7 z^VKpK$VA%=V24me7r>}}$U{^%0veK~Kr5$(;Z%Ey<}*|7A~Bsg{^#U6Pd}1oIUzG? zt|(Q#Oz8VckTO9*30?m2mA2XvtL!d+3s*4P9gLP+btC=O#NxXmebB&zjCKp+U>fDK zYxFw;v{Spc&)8%1aBRtFYl~ zQL0$7?Qpea=9>AicK_KwmN{^~V3TxMY`~~w6fh0NCnS^GsEWwBc!=ZEM0H3p^W=rRt+c){> zdE0udm6lda`&`bX%aw51h3G-uC+d0ndD#TnKLZ$0*p`o|yqlFv0i}h?65{&XrK|uf zLl30W!n~EqEv$v3X|zV2?q62{2-0}_*OB9qy!BP>vXMkjMLPv%qFr!eDyqThfKxdC zbO4Mdh`RlZJ>B89-S?eMLfXalbpA}$gqxxEkjoYID8XjUh=wC}PO-ZK(q;hz-Ev5W}ways`>2}I_kAZ+`T+CtcSE}paI$kkdWD-1o6L?=axBl zDGkthgXu-*-XjF5%#|9BPwQKrSzTjTKe1n89mo+o!7V<+Hhr{~QmA#`M0Ss>)y!~a zib8bg9heZpiRONoJUQ^!g>PJb>Av8VF1`l z%GJe|suAiP0o}H3xXfTp>)0#JwSPS|64LcupajzaXto4c*^gt%HsVg{Cve$W+D?FK zWhWZ&JK*LR@Um&S+|lm&&oPvbv|E_=^F>1rujLzO!euo7yl0OoDs&Z#(;o`?F}!4Q z*mux7WBd~@4izxF5D2(L!lyASqyXwek`Giz-bhabM!Eq~4p<~*s)Nb;vFo#jyC3mj zx1VrD^ehCLAwZ%{WaQenck*&Qd4kX3O)V2)hU>FPg5)gk~p&h15GZuku zSk}4e2Y1@X_tds^2LL7^xfOJ+&Wppx*EQoV7wkaI$}0QGDj3(f3v>w={0boO+(lDC zee4l6{HAV$(Z^%M@_KrT5t0%*Kn3V~;#2J1Q;l!B(_@Mp z;|z{hrGOkUA+z32e>5D^0OpRITRscUQ&ly)cOxOAXQeN@#^hdr>*%37uhtIYF}+L) zz*7(@Fg^pv1l{*(pMB{d3(2h9b({5yn@O8dfK_^m(2E3^+19vMelmDet{W_B`e1UJ z?2b6+a6}1tahEp!4?^Xikt%YUym6jcbh+p&;9c91xe_UL4+k0v)CUqAN+j0x$v`t= z9V>*OX-RdPQXgDW$&EkI^+*V5!N8l_*8uvw2SlAbg)G#BEpyQPDxnwkdSuOdVj7u* zB#RCL`z&NG3aJTS;lrjLyUZ<~LUv=X&Z$KdX5zJ)wtOekcs!O`c5c(NR2h0&qVA-N z>4nx-^Pzp*o7T(k&A?zyp8Pw&OfvMn-l8PZcjuet1rgz$rIK7oR6}A$W{{!6H2}<7 z!VfvD0JC}rP(RJmr(s_5_OAz}O#=9@ez@2&_vl%Y!%@3RF{EPOiWDwcu~j&|wVO(C zqt2AGWoEHEK=mgZ-tO1h*9M{1+&3ZXQBIK>S^JNid0!nVX%}e17dpFR59tO4}gDZpwWHd~BZS8q?y6db9^PDKUGnI0B=O4cs!ig@}qd!gBb5AdFO zfH9@tySpeCyJ3g;8&2-4;t(~hqFF-#)+mL@spcn~!lTA8W?7~$R9-JJkgt;C0xa9ol77mm>O!TK6T=sryLGmf4|2jIZV&(1 z%;`-}zmk+${XG)559D>M6MNQ~i$HWUJcZ3$523>ZI`s#awXUPadBO!J3%AVpokHIa zMFx+#r8kdOH!jL?5u62z0w@NAQKYl_^vIQDm(uwZ zrPiT=pgTBdZ_U#!YrFBz40Uli_S^%7*Wo>Ojmkk>Gbv341y=m${@ONDk)_{q4)Ggw zUyJyxlxX)WR)(}3N6>F6z$d{q!HF$eWoEaobcyDbF(edy^|H=5mI%QF=!HOet9S!3 zMx!YOR&N5M!FPhi)17A{c34Dw<=4!!%4`9~%f+~}&KDo=@N&eSMa0%OAiRpvOpu(0 zfJ+r~w}yuheIExXo6pWcpn!#UDi2&{I1@lOexc(8lH4S)Ecd`}?ldU0kjY(~Q+mYz z-3tI=*NEY0sd6ebJj)(Aw43{u$RDkt?!SN2=m?D9Yktv&twcT;EHI@p-n@cN49P@f ztHmmSaY<(kpuYWV`L?ebYG1V|>3R1dCM>IBsZRbLASD_se(6)IJfqhWf6MAe@i6D) zF~^YIW-|Q$u=n2aRR4ef_#s+CTanQ~WMzhomdKWwootdFC#xkQMYfQT>@DLMm6e(8 z2xV_&os7fp@scCGKcDORT-SfU@Avlor`ze^^?J_7yg%-bDO3#^lG<9a`>~sWz$45#}RbKtOOS5p4Ga#-@6|I8OJLWqb{eU9z0|@*B7b9Yr zIaqFmA=Cj?c)vw!w;tY%tMo2*>ZWmlO&^8lG;Xbvfpx%9O{%ANJ32S6yH)^_Mh28L za3RpCj3y;#UVB3OP(nIIrB<_oyhGdGr_Al_POie10zzoL+DM9+WLCnxYSw#4TNo{D zq&`#ys~A?Wxc4iUjy4@=7Z3^FG-5qgnV*XmwuvS!#9nqJK~*TOg0?AsTvtUS!q8tg#ECu>J7XmhKzIC6w@ zpf#sLJ{vrMjE*!9PTbbbe7OJ{+{QE{54c_B9Vtuwi5XzEV7$K5xVg{dzO{0h-Kf`icw`OprmwXI z#<+IZ_yN1OGOz*h^S+$>S4-BW*T}467r;1YK8j~}B{2#Wywc&K-(h*E_&f9-%>5Y1 z8lhrnj+Z3^0H|ZDV4s9>>IL~ZswS}Zzt^|$q3?Yeht^GzE6Cgb?Fm34cEoNGhI2ApE~o0z*0SBuA}QrD8jv=JP206v;|L$ z&ct$s=p6@^b^URqSGNKe(ixZg%37DF9g|gQ*kDNrSSbX-k~i1d%73w+P$6<>Q9gY9 z>0vh!TYz;LIWl{w)Sv+$Fz`&=KUe@Q;@r2S%7@*= zY>1camyEia)etR0{v6j76DstHzT*=;c7PqB3qfGB+=fa$tInoQV)3j?q>>R>7P+4< zwQq`LI*=?+tU8a2e9@JheqllTxkxv2Ub4MVsnW;~kDypaLz`{mqf(4swEfvoDE8ra zE}9gKuYJ{aay&HUde$_JdCg)ur|UjMT;Bnk$+Q2NaH`V1d%YpI+v#jUls|^HO3Y52 zU}D~Z1y_0Y^vusnqi~B%DU};vtI(W+8}OfORx3F0MX1sup|)HeRaSE?mFijvW51e% z`hgn(AB8Z&q6bd!5xLLD4&M*Od9FXkVUd^Sc(908nz~0;Wj54u~4PhVa02CFC z5qn}0lIA=Qh6s5>Yft^c?fAL)nxN*MvzAl?nPR9v1cwt+jR;g*P^pAMAQcT$N?Vs3p#E2QiY z0}Sn6`j<59S6(`n676`1FbsV$#df#%)V&0s^gdRYDLjw4?P-F+gx#lLq0T`lw%YYJ z!sc2Cx8XH@L76aKmRd-^BjdR`)}+%D`M%f`B1KwgI zpE<6Spa3=^eR0D0RxqH=*+0=AwFjZHdePbM*0|~r-aqAPK~JC%KY9W|&&UCl>fFof zVK8iaj6V4$?%6c&Kn{;&BLdiH?M)TV*A%VvydKajy|S;M;m&vHZXxwlTC`vJgZ1w3 zMR5x&XXSq{87>+KuTr0FtPliQVjGN+1=9Zl5Z3-}Q;;|nHf*As0ID*2Xp0y01F*h3c_`M!Q+Y7j0UYUR{<(6ZzWU*N1^BVf^NHW#fQNwW8)y~&h5=6#-`H&PpN z^o>K0v>n`Zv=Pk8a{-KyjHJ8_ZCxl#MA>8tbb&O^}&Z&LkP1-ODxdvnkX2y zBb>WK8YNj!U-#xB0#W>4G+Un(!KuB7;J*73$U6-|8|((0xh?;@ck`gevfGVK6Jxp~ z-a*s=uqnaj2vXq}NcxVtluV&GB;t0SYgv@_ zwg8-+7prNg(gZW491!{20XSL6!Y$@Mm7Ro}%A#Z(7A1N|06hVZpr3-l@l$sG{6z@K z)Ey2S7&mcpqWlH!%1#7A;aT5x+BVYosDPe)%h|M)oZ;?`avrU4tD`M@^FUbB!2Y=pw8p0WzlI95V2m!K(4{1X^*YRSXDg@S;;Wl4& z((hK*BLpJK2Inp?n@}1YIQd=)fG0@Y;2fxn#F@4v1C{s)U&H{Ix5{)0iZGkMtE4v8 zF_Gc4NGOxQ-9>Lrk9kDys~X?Iiyp$_d~*!rmd&po)q=W^4{EvGP{1&UKEiVK8by5Q22$laNyf zTCoqn+mggs(&0^6l=B=+m1DFqZ)%``fW`qBZW2HCJ+ZPL$g5|o3kt?%T09`<-w7}k zU1Pa$w2X7Jp<`QtAucdON11k3C%QHFZI6koDS+;g>Kxz-5|ad@2(czVfNa+Y%msvr zCr|ykH~wu0+VgCSCizJAB9KyZQrDK%=fMy!htu&|Sw`YI44tque! z66Zi(0)(GmCX_plwHHC=tLnPUU%Sy$^#E{u;;Q5`*m)OjP3nY_e7u#WZAfvPjHsZS!p z)e*Rgldd%^mrK_=f);y(giG~--!I{FRJSCjTo^wvQ9On_#NVBK@36Mcq*K4wj6_6| z^0%jf=dRcsD_B|XU32|4y|y|%k;*^rG+3!idL>C!V`i))l(QNN%OjUJ!R$`1vq4b1xv=lq%LX=w(|Cn?CCKZzRhtz88Gl;^oj z$4P%2@cAp!lM9dCX~~@?^-$9_;0kh5|buPJN^*S($HuP)(z9qu|B;_^zK>hXt0; zL_zd`!vaE|h$hqr;uR?hG+1LF=G%4Yk%*|pS^Yp2)m=Z!FH8b4iS?6dtWc$G1 zD%%G;C@I!(ZfjHs%I(%z;>439^Y>3?+1K;-^^^kC=V0bJHEaDqjk^7lTKnn_|Q0DEL9*g6|F!dEacox^J)h6 zXV*`vi%!x!lQl`wIvOxX395;yaZOFiu1!^dzslg^U^yh1SEvkpP{{(A+gbJvkaDmH zohPnuD)^+hbdy03K(bp_tL{kKtaQn?x|c781fixTAlP&?chj?k>3LIu6J9fx7C+pO zo2;mfMfa*}>LBb7w*hwNg0KT-wpuu1dMLxZr`AAd!F!P$PT>!3!WHI50()Yfy@QI zZsHh1lD5aGnZc0Kr}<1bcx|1r3Y_2A>JDzhQHZVl_yNI4L0Pk3oe4!#Q=HjKZd}u( zN|)ZdO(zcryY2{MIXUFDhS&3A3^L&_ytlbSBs=Yt7+h32-;`i!*FENAqr$Jj&JsHY zu_aR*bl`2QQu*<)JBI+Hw$k*lR4Dly|TbIgN*oqKMkVW9{=JB)kbm%=}=8;7?9WoS)Oi)O$sZ=m5<)<=js{V@Ah-QTYkVR zA%X5-Tt0$HMsjpkYW}KrPNQCZWU){=o9TO@pk%=oj4-mbS+TWdqtBh#d!q}!0zF3% z;4_$TDq(MZXm}!p@i$}VpG0ZDt2yp@Y(J2~ds$c?Pcu*n{N775KQ=QPwRRpFtEX5} zc;PgUSp!cWl|>e3cw=|F0Gi_ua~u8=oZrdMS+;6%-V`XG`B1R4&p`@hT-6fcSA;%! zJCW)`l}HE}oV||Ow+!6~UXaYh1(|vv2OK|YJaO_<@x?ccZSzR(0114BrxY%er8Lpk zqCJ$U7_;8=%qL)OhhAb$LY&kmVq-TDhuKt>5HLk7Y8{Zs7@t)$$92(=cnCUz);yi2 zHF#xElG2ljkg{x}I2YaRsQB|&%uQH0yw&T!mpSbY57%%e?Ej{5tIEr@G(Ck z{9QwcWCmI$#*zuI@t`H*Q7ZPjeRzb`%P#A?@nptX+oeaoxH{NfDx{e#(lGHcLio3b zRw!HF$w^qd_xvH#&GScl2&8fIaO*R=-myh`2>Ja0yVCRA?q$I4?hCqM_Kpi`QsmT@ zp$do6+U{`&mCqZFPs58b5)Yo9l=-Ar1=^P99#A}fN9aM777$I2c*GQ~8g8%u1_?CY zCw9S(?H0)$*Jvwd?r`t3!RlIbOuS??3p}~Ogb(k;0E~mbt-V#t32ZY5) z+QMK`(jQdKI>^XwZQjWPk;|b|`MIwVhR6_T#$gshP8-QG@)?!&6Q`Xw6y2 zGVn|c-R2@9ANB$Sse8xfS6gs2V{a{=UN=WtT99j&K-a~G;Nhj{M^4nwNr%bKUgS&C zCq!4op=(c*v06h?ip`Z4LMZvSZxI7vk>!627Qts*(%<`W0b#tP$z4S}Qn(f-AhjB856L^?yKaHV66Fhek2drj8iyJ}-d%HK0@F^9mq1npH1!h7Ec}&~i(b#CAUT z{Of~JgVpA6H^=kuK6uP*J}<}(-x{swffQm)0HQn)+#=I>E&#B5B1iz>=S{wJaxL!B zdg%iMq+|p>f~!Qs0q^~sduU5GdCR3FL?Q@EW$7&dSyr98bHe_p^)2q)Uo-u^qR#p7 z7doy)Dq9Qz;GQ{w0EJZc{A2lV$OF=7KGlnQ6O49{89AFQ?oSJ!UE54zz^KGW5s;X) zRncz3(AGySUIQS%+=)2FvxND05R`@P6H|m!D^LjUuE1J7rZsv4nc~=3FwgiwP4YPa6~m1ni7r>o+}Q1E&{V-`$o+A z7c%mHxeBP#zSKAVTVJM7fIvi=XwnF?{r$?uOn}OOKVa#JYWK>$k8!%mBJ_Zoj;NBY?+xANY;hvTj$D+PclBwUK2U^;ILx_V+7IGypFb zgyCh~#0Mz2{|1eby?6KCdaT5gb^_GV;?TDFt>2pAic*k6C59h7lx{HtR zg2U9qr+AXEydHfUhv}=m^8T$8zD9*W&z$>J{=T9&RN*`ua{792o|}UVzhx~kNA!uU zJK4yJoM+8)agnXxibu}_ZcuYNEMXtvZQ|A&hiOWP)obg7? zJDC|QQNH=y-FtuUBoURuzRk6T4!_^8o$kaa8eK{B)?Zi1Mea~$*VM}9 zZzCTX3y^7}EnEKFq45pG=hFQ3t@$z%sHTA{P{WY0ldwtaE0rCAoImaThyF;C4df!J zj^vfi6M;w)3uNUD^ST$e4op1S9+4zCY{F5(bH&@&=b?boYY$H(A)HFWPYL_;FFOKZ z3!sLLr?YwqX7osn*fB@a5mcKp0Ip@Q%7- zIh(rB1i_jjAZuXX`E?O1y=8D7nFvNYsM}$9^S6;5_h>r=H^1BbjnU?YXjA<@vh8V6 zz`^xLPBe0_-$j$GvR;16z(D>X zx2B+7qHgoK1suOGZmO;r_P+nJq;=t3PDzD)@_0tyE~ zO&7Z2Uv9m(9zpARgnK9J7SIYzjvdh>Ho=!4ZLZ_)4Zykwm6GD-xZuNSP2>`FS~_mx z^Vf%Bq78ba4a0A?sYe>^f2%SF{1VGLI~w89>?e^)817YmxOIa`Zpgtp4sv+y-dx9n z8xUS%&e#~jA0tEgKTi@s;lTX(+rI=swhtoCf-WfR+q%JfO#~5rTzHCgQ(h}XZ|LKq z=iZwVYU{E3YZZU5lgBC}ppxCRtx_1b?*3ng=C5mj@(?`%f8nPkS-17k;+@F7t+`z| zyVY|5g^O5kQ#pz}gt2?1B5-Z<-QWKIaqTe04}s5$trln)O)H@S`~X6P9*?yHDy+vq zdd#*5kR1qjnk;Se>1G1AT!9Akxp;%LaR9XHmQ`SQ2tt2l*WM9bVj$Jp1qo?sY7BH{ zdCVB39^*!oEor{)C?d>92>587#84>-;nGUZ9|~hvy3|T|*orh1mAu;Ak>5onlaM%u zh8VZ*g4-y3k24vNefogsnf_soA9RNRg~-aJm78=};Rd#jw{>o=!Z*|k^hEqK)0d-w zMY22xVdpWUqX-reGJV~6j7udzz-as2vgL!1JVB`J-iB|6x&f)r_#FBp{PgK**%e+j z2b@Ko5S?c{zw+bbIv+7Y#&{+<{o=17fs&(#AtlLlZG=_>p(DKmu*p-CwF}zo;ZVRu zK7>fe`*-wOc=**_K(_1ZNh1PSJ5S)Ch?%m!(#kna@^goFhCB|TOIzpC*zd-c3yg^m zAr&C->07!{5JC-#&=q_KPiIf_TX}hkP~gl7u;GXJR5~CE`LD~Q)z2cGEP!+9P1EB? zhi{xdn|z8_eblt%SMOdVRvRk;VR_Au%bW|2{Wu6=NA3iwADOsA2-T801Y!NBD-pgI zskFQ%?Owl_F}1Xw?ia4}t!rXvN4mSMA!2t{9{ddd?BC@5dB2i|W>wHB15=;VvI#Ow zhSEDbm8ya!q+>IcADYD}XA6!|;y?BuERj`>$VUAe1;h zW&(l@d#nZ;q?6F7Z|V9Uxr<2@pYXbv(m3fUrT0N(SG@h z=B;Z!P94|EYe>~a2hc+o-d?f@Onu~3Q{2-CsO(;dNj9C_w+e`^nj5z{O}YzmA^__V zbHSjM4@tky0L{i?;aiWF5V?vHqvuoHRdR~ReaWC6@v##-kJe~rn|yyI4@hR~3LA9A z{PIWW6_Oid<6Pl$l-sl^wu%*U0kQg|8{O8F6-u>g9(Cs_r)$V1wb5nH)2X|mjNbx1 z@R#K;Pcdxm+2hNm?Sq46V&jAk=pJEA3f1G

8r$ZsNz=_E*yt&5-yZ_i-V!q z&z-4#`#j2Gn{tlYXA1oN%-=Rcs;B-UPADW*0VKdfeRf49=j+!AlJ%F>8PDY!Ym z0qDOl^)JF*K;F-&EPp>U)nj>I=pbV9p5=2-zcO)trsDDZld`x0(>}AtZVG{5*OB|I zRAL4aWzuL5xetwnB+vi2>Xbvhz;NFw*Y{W{M}<1-x4}L?c)DJSj>CI)E>7~SLG6$> zAAhs~+zsD@GmHx}5MM^$>{qd&+<_T<(-+UR){AiP3~na;2&{k%84P_2fV7qrjm>tQ zdDiWv7Po_^)u_j>g)pZ3+HM}b@#zqz+%p>p_w$Gd%IbR<)_>7DPT8l(E9=_%blrqy z_p)n=n|i1ED$BuMB{l;QRin>}?K;8ynG2i>j|}K}F%msn-s@FoWU`v;8}Oi*J?R;?UTBG%5}{M2ZWE?UigN0 z2OzmA0{*UL_t5gFf`zCZUbEYNp}N$&^;YO=P05Id~2~FpU zrv}H^ACo%%En#cS4Nl|-^O(a$R}17vXRmfS(i>9;XI@?l2|WSo*y$T^I=I0Za<*4W z#4OMrlCvI13@yF()Ml~x+vigU401t}yp~EE?wH)Q>E51GZdTt01$}Xh>|*Z#y@)t} zl`l*9&~l?lcfp2vaH|+zIZMwmt9(83A|&Vi4$1z>%|;-un|__sFH2L}uC`xr&VDrt zeE%0pzrWcaJ7YK}lo}^pId`d9WqtS8$%&;!A6UV`0G>VTGVc*RAwA|Hcf%0NPvH6m zNX>`?!s=V)$$3i$>qet9?Aj+_EK&*C z9&$ITIo{<)bq(?@`B%);i_1VjNBN9 zD}-3_1--n0+GsBL_B;sdL0Y4(9Gcb!@Lg}{}D`F~R74hen?cfATVL=te> zWVa^Wg-`E$n)6*&a@EnCu3b+H50k3sowFYN%DuWLzi=S}n__G;I%hTN?bs6rYwO0z zR_jeCK8uxX5>mL_=eJ;nK1IL9y>gpN5m}C?)XJPh;)|gJc(1~St06}74nDo*UbOX` zM>n*OwIa8b`#I{59frlJcGU~#1LJN7xOi_CTH|qDzc+bxTky1!kG#hZ8i>zQu@ry* zhkq#6`XS#1Q{rMdvaPRXC-ycw!fLs-s05-hmhQGS{uq>9V-YXsXa#9DLoFegEx4g; z39B&0Y1+hkh(Mf}fUJlnH*irF!}E@ zoq&|Gt_|P!%z$pez3IkLlbltX4iX~uy5;SBfU&c5)S8*Rfv*A0jjE)dGxOx8_+GM| zfB&1T78%anHc7iDz0wLBa+>b#DjHqLP$6I6F#qiNjsd*ff;;mR9}P^!ivfq|CAFiyj&Tnk_tOz)3jT90+P3=>*r@=cl_MlLcexGx$Rs;dXdqT zsBAK)fzMw{P?8_DB-!!aa_uxXyXOUV8*_Ku{Jw;{wGQ*{ziyn#rwv{k*^l}-$a+@2 zafp3%q6j_V38#w%7CTbq*Pl9pTdcTKC{|aVIoRolJ7GS$?K6SZ-M>7>O}sg;7kx9` z6ePT{1tA1Woc5FJ=s>!;Pxd$vg%N69cxJg(nDTsWtv$($sbtghx;lWfnH%A|v=pE^ zk-fgLsrbj$5a}YzmTA520SLll>{wtE^-va2Ng)Y3Dg;`hvNbe5eXpc6C`eq)@YhLa zlKb>>=O75L&;4@pGm5gOT1e3u&JD0lEO0bH01HkYt)JJ{{NJ^Is8u$|V+Y;oATah; z5`Ol^H&)i!|Eq2|RvONYUURedT(H+gFxN}1LA*cO5c{!zwp*-a8)_i0QgG)9h`Axh zDYVichGl$$_D9eOWpQ36W4_@gc++Aa1Mv;bs5vwkr3x~yqq+O95V{rUx9(X8+}+*1 zfa~l7!dSDKXl47bG)??m@fIg*m65EN-wrz&fQy%ou3v6<5~QnI5z z(s4LYK3$>!JA3?^IwqT_%u3*1vD=c=8H(oIM3Q*Db}lQ5PIBf?=^N&dENLXO#HQUC zV9aX2j#s2DSA}G4`TOkVfGq)^)}rpQla`_Qw`thFy(P3G6>1oL5Dt}fDAk;dJMf^E z(|n3(!L7Igv@nzedD^15N3Sf>1f&jbIkSfQ zM7U;gN~nSscrT|WhG+B+uR*=-3*!?ve8BzkabrQ5O4B=Rwdt7b;2)V6XH>KJT15r$!4&D250b zw>P|EKZ>P?X2<*ARfqQ8i+3v1L~KVcFFi3(U6wbLaB8iWWjDE>+EbDNy5^fLnqm)| zUOUM7T(9{f_^k0|$g$peSN5_Wh#1_)UZyWC6iy9_87t1aRl~C^$awwVd>l3?rJ)WZzrk&v!1^Ip%z)CuZG}swUB*@`V7T@6rc$85tbmwCIE$#s_ zGbr<#)T*PN7^y^Jl0l@Ge1~w(2XQm*n@BPgR7DnrvY~;ipQ?60&;@1-w2+Ij3Z zNRS>d*yo^b{PXdlH$82~up6#(#8B?LmkZ3a7X1XWcs~3)O8T!f1N^J%Q)I8*STinc zdH;_rIn(k>u2Me_!AjUON!<7LxW3!^jF|mLk}jzn#BYegg!5_= zWVV2@yg0j-N5Kj5HCg64AUdiA$FWg0Uvql!v8s-Hnja`5PizwFY>*pYUOX|uS)U74 zc9SzMH{wPw8^?7(3LKkCI(3CMyyUkC*>H6TEE}{8I$PqaIhXgEe_KzX0`9D~-j4bK z;S0f1l6FPD*GpyT(Mz%rawT*tl^JT%-o`mr4q-$Xw9iM?td*5$U)K(^Z1Ha*(lHq^)xzM0i!a`cu+PSrf_Izd0ws3@QN zwB6CmuZoeUym7q{`AvNbICa%}#fToPQ!gN{Lg&fx!*hACpl1PIJGNrlkzaL~WJ9^i zH(tS6VkGC6#yS2G(HH-=LIrua?5)=wjy$IRu$dW}vFn$2Qp%l01ohC=v9i803H%?Y zHs*t-?;~^8hLR5PzlBO5Z+)&QK&oCT-A|vQe#RNwg11bKLg@Uvq7@ZzbzSs%)MqHT zQb9Uabs7NhN{bEXeO4Macpuh8@gRU~n@^c6r$QrJJ&$k-Zjf4SW#A1*6{n@h+wI5q zFD;Ncm*snrms~LuWSexSbFy@JkKMg4@PDG%SVR1)93n@EJ7Q!fAZ?{p?k`$j%X&>kT^* z>^ead#Iooe12Nn$!2)-%XixRt7bk~1xPNtNnZ&x6`mLO2SH&rGlJ15Yc?!%|F=oc| zW_vf!-Q9ctHC(3*pB<%?%=w^eOGtDA|sa|I{`7N8mnS8?q=##vN20!CmZTW5QE1 z#El{WW_jR_z(W->2tA4%xD$=c*V()>IQN+F%e+W;d ze>gWiJ;kYP)cvEoqfdZil&kwX-H0~2F%AOB;{hwJp=IQ2a1*sph?#{MdHQ+OX>FQ= z9_f`sexuyX0%gUF137wDN)*e}Nza{Xe&_(2*mk|!VAdgHS~|o3?sJ~*v_ab~mE4X{ zn>X&-HStQD_D48oPB|u?F?@=_{mV8F-p>}{`BDPi&{iQKvTDS4ZJ){D6uf!uYEPC! z&W9c4XvmB4#6z-ec9ilNGsr5c7<9(@0;lw6?%-00`4O-?_I+Z`dOr@6ywa=B87*9yoiE!Tm(aT~ zX*n+g3A@EQtg!^J{!fHL5K?8vRsXwAJGg?|Se^HLywx2HufI;bM7MhvKFA^JB3l>mQ60_HwJ5FCvFzZS&A}Y= zbYfaAW+_m@E~lVHtBEH{UIulc-nNrtHHTf~IZ*f(XzR7i3MFmZG zpQfjqldM&wKA#~eI+g1g@i1%Fn*Lxf+Z^9QCHH%@p6~r!9oP$r2D?IH4>Qtw-#yYD z3466Hky&9lA)1o~H{26sh{f%TZ@(7N*Q27ZWi27;>z$gra!xS8G`X(hykK2+`!v2- zp2dtc%-PR2FfD5ztw~5}SMaOsg$UKtN9}voJ&$a1{U9_9BSiGY>nzF*e40G+o+{Qo zcr0_Z7k*saV^VB!<{2G3fJEL{89e|e$N@!@rH;i5Dvk# z#9IdhO0UOauDi}?ncyW~Hmv-b?kP^j3F*emN!~OlsCaXcM`cVk7~xIo9_XU)zU=G{ zHXw*H6~H#Iw`3HoB^%Y#BaJ+zi#o1W+XoEByw+Lwj<*7~!{p2K#P#Z{V&w9{)l1)a zD_C2j9aA`*Iw#pqEt~=EdI{*yxfdD%Tv|(B9UJirLrAh1!y?Ko1tQk^N}w?&XKCoo zi7%1D&3kUd@}lTd>~s8i1ysuHGM19znDsw@OH@ERA~j%+h5R>X z&VP80pVy&MxBl1^jy z+q-;*E>Ls1EQ(FMmMt*BD~3PO7YWBCr6k@T*(_tURWWw2Dogxc5ViuV!AzeneQDl3 zzL?o`%wFMAQc72_!AeUG0qbcM|E1@zues`F(4f3nM_p&N#C(Ny7Z&R)AbUFlJ!W+sN38J1s0s13V? zAfXq?z@6T>8HBkWSCd^fmf?idE5Qs|ge9f0gc&0XF= z3G^bD&94`4j}EHrr$6M%zn+jaX4GWlNr)-b!OZ77NvpLmUJO4|VxQ*k-p_h40Kn?6 z2af^IvDQ(+^y0PWwmwd6!3IBQLUtYH#qaY6d(MrCiWh>zV{aHD5A4BIeMbd$wJ-z(|Et%XYxfUD(TGiAm+kmyT!uzFV>@$`r4-F*$u zFCo2#Q}tPBmo}e9Bw@-ar*ufGAr$BRP%Oxy*4UizxQ0CdU5e-Z-EI%`WSH*NYj=1c z5Mn$`AGoy8y33kNqm)M*Rh0QiU3N{5~}L3p=b*Y2F+ z7g*AjPIe4huUU^Ve>Ea;a&t@KzMxoTZ{JGx>A4>=u?t=H(g;>{S5w=9fuveXr8izF zurb?VHyqR*Yv^TdCfq(DonzXJE1Yz0W=F;57f^uxDFM%Uo2G?+wjG#7H*@;5HdGbo zU>VD8M^gF{YxJg^k73`lEBX{(wsAbX?dYj@H4=~4*OSy%hN=37guzzlSXyX>f4*RJ zoB53d%DI)ug(<4c(hjUHW7vk|)U0Pl!L($wtypUY`u(L5PhumN3`HUR-C8b~oTlyt zZS^Oe)9Ps_VWNxuq)p|S&c#-&vDW9VSQDpF&=GCpzXmD{osGAfKge}&KCa+wX(`im zAZ8Hi^Tr1l4ZLu zonU`jjk12%0rz!w##2{uLsM5ZFK}dja9mHvw2=>VJm4H@xY;BCD-;JS6q&fsjbD+O z>%A2C=}w583dp%&B9A5COY2Rjf*Z6lsUtFxmit~#)|aT%-yjGCjo#?(&r99Mva%z< zyXt*(zf1dZYqZ@4&C|Eqnf3`3@A|kJa^hUxxXC}3M3Zh6n-^QCC$N}5wvyUlJ!fQ% z;Xhw2LhjGPOQ%#?o$`v{s127UQlzOP*wn0c8V$3YH<^;1w_87Rg&N7t`pey<%0dbY zf1K_^_w}{n8zCs{^>*<>X!o^-6T!h_n(zSx(7LQ4As>u^UzN z6eo@^AULO~7w9My6WY~xIetS%$hedz+RZPIRv0&!urTR17u6HgMP`iVmf98zAJf?Z zsbVP>NP}b9f($W;x+SHY011Ll&+hWKWR4}$mevrPNEI1AP_<|)8)X}zOwx%@1PYJY z<0YqrIXud|zkv6gX$Bl!@6}+*p#!-Z2L+~)@gZ)|r575N zOe2HF71#i{_=q?26Ww%2_|dxlrZJl4tB$1Xtw(EJfis{N!ea!p!dN70wp=nLNc@a4 zBda?Y=UwKsYf&k>5dGqV!c^5vS>5SCZUdo2QPjsg<>EK925}R#uN*^zhrHr>1!$op z5wb_W%iB$XRnASPhBsb{QPER>)E1?rSSx$B$I6V-z8Fk(Zz+@T*ZeSK2Jffo0)c-* zFP&b?IiC3v$B|%B3`l69{h zTvIDVX2tmZzf?&Rh~vbkO+HO>@80UQ+oHdU3A~bAdeR@It5By5N%;Omi_66$DqqwG z;__w}U?^4@+^*uaOtL>y+zYZdKN+lM-?fqDs79q7g+T>47#De^#J=T)2r@~s916)d z>~FXj&IhW?;AYw8t-HS!da0aKpCaO_I%kQ6yW9QYm6X(IXA4G9lIhOvc~+gyP@(Xp z#AtqQfn_qrjez}AT%Fx*5x6Pi_Ug=EGG6UxY&I>UL~hMEpqgE4m0;dpVI@f(WDmgN zxwq<}{k}fXQJHc>M|h5k@veUgS;FkAHRuPPoy=>3I4vKQHu0QfJ5?-f;RBl4)dFq3t;x< zp2e(2Np`!pH+X&fV|`=Wj%u@z*0cxEjU97SKnZK>cxPr8xw(<2qqu(ag84Vn?d-Th zf5jt&OGy&`xE&SmS6TPdB)dpeDuSJ)_M{E+Cd0J675lp^{5rd%tr75G#!dcZachp>j+O*}4Z|Q(*)3Yn*yZnzWM>7%ducQL9 z)=QvU5i^ytf4+6G90WZHzOGXGpi1lg{^c#>NGRt`z5pSq?$S=)H#;G8D%Za2fk9c8 zIJqKE@#_PTZBcZV)=?@1P!da=vo|#+Qj8ZDx(grPCE>hPNQR_Gwb*6`JtHeJG{pC? zh{e+3Y;^d=W1>4%4+>nItQRNG-5*?PfOj}&d$6!=Rx8!`hs2=cJGO`vrFph~T|P2@ z@2lq~jk6IEiK#k(24Ztbp6tUAX6EKtwK(JiWkDFOE>C96bZ${?xG|Z~bm^Y=!Zg0% zhO~8>*q|0;WlYj5o1H($Q`nN*!GRfwcWG*f;L8Vwkv`?JsJkqV`dFrHBdMpMf{p3q zNK86oHc574JwCluS4P`NX5u*CDq{UH)Ce491Q$2xFJ)&^fF}5z^L{k0H|UEwNL^M- z=>FoLSkvK6l7T7*U*I5(p&e!oPGAM67px0fmDrouu5r;LS@UyY)vw6b*?jKrL zKm@t(gh79_T>7n$p@S=0eR{6wqqVgJnbk>&2nr>Z@^nN~y-)#4-(F-ShyQ#&X)U&7 z9_*1*mySt`un^kjXJg$?CB{)D@^xxdVi#w5!DKo;3AN}UcM`o>}#Ml2<_9(SnP8bkQpg1b7s<`K^Ol2n{TJzSIngwjklVIp!) z3#T~<1pGSnhasV<8DX?ts4E4Opx8WHZ#TVY3lVh9Bf0Tn>&1c`tfTpRcJ>R><158G z7;^>B+GfL}yOYu39&=U~g%yrl*7$4Kj@$GUY zl?n0j&b>(YADD?K$mv_gEMb(%qA`+Al~T@KY||;5W+juU>n<)|H;JNBt2_rYsAzA<2y1^5Qlg;oy`HaCFos)Q%sS73VEs)mUBHOPmC=%erOqHTh7e8Y`uy)$>Dsrfd=kjkhL#T#2lszJ&*&4by< z@{91F$dmELDgd0{D`=m!wNu>hVtM;6lx-V!akp`r*ox|BXmvM7#`xUtITNJQ&dh9- zoN_kww=-0jViplgJZ7J#hvnbg6Ip>_@>D&wZo99fQ8yc;v+Z*w#I==quSR8e=Sw?x z*~ltkYX}3pN-x7T5b|t8X?EHeLuw4qdf+Y(+{`Mu01m7ez zet3g9Z(sP{(2~Q4D`5?&jmKMcEW^XlMTVaPrSj3wK@&WQ*cakq%v=<`W<=Bc+2i91 z&-$e8%!gNi)2Qr*>n6%GJ2#U#h&UcbCIMJDnq4x#%}FP2bY!_M%-Z#I?6!u*S<*^R zC0M`tO7%7jwOGIUp0BI7{%R+uzLun$zgoq5-^5a(#1u@r8iA1t_m7InXk~=N3MM48 zty(ghzMUK;qzSi2h49Nmo~aR2(w~$Cq%s8O`2dO33&Bo-&0OU;#*pC^%e4q}z)HR0 zKem*6j+R$Z<|H}keBzjY&ljW~ga_kZQeGkG4ZtZcF~7ln$adKH7c2i>tonSD{N9G$t(Lk)s>!_ z4YwxjU4*y2%opLFx*?3|wgJK$z|bwNqgXvu63(Z6QTqv<*``AyC}5cdHh!l0y;1Qv0X-D))AVwH_zGL zL{CO8J)1qG=sDU_0}2@Y>06=b3+BCe(9bWaiD5$yR!Yr>5tgrQ2@zSfO*2J3!GCF# zulg~5wax+AnILn#0hweqmsdbv&&aEPa1*KO?i>2mXL`VF*ije1L)mWCDE6i0dN?a_?6)R5Q-a>(+c_ji&S84f6|#ANcSP;Pm>c)3OdaL`>kjTSZA z)huj3Xz;bg2m*IHg~#A@67(8)B!7=8lM{zhRp*_s;N7Kt=?T8I^@C=YTH^gI)|xs!40GSgx&gS{BlSz*@i%B5E!1Ix z7)CL8ez(=$K|>R&3(X39)J`>8;2qCDNV$iK2rcV>{^zgfiU&?EMp^ zAsn@t)bwNmcB~+ImN_ro)%0}{Go$axh9UFB{2l_k>OWm!7Xfik*)JioMI?!GAtdxb zda>pODm;{7u+60(<-=R2g?RGItF0Im{UXsi3KQ7sCm)D}KG5EOC4Hf=fuv&DEPWHV zN7Rh>eMH1caunBK?T#v$w6%gjIkYvxIoA9(GnR=*Mkki`vnRa_Sf7la1 zl!O9{v$!wlU~@|BAQRsrlD>q4^G45w&Dv^YU0Jc-^tM`L&H~JBS1xh#71Ru<0=P`C z=3F%7F}gKn7j@Nx1hkf?k%L zR<=il;0V?UiBeI^fwyIwPKxA=@G+8CZmBwd8pV7f>(Y`5Mf0uJVNHw*8%OEp<8y9( zb91hd<`KjD7@VZ6rSOPQ>vz}UQYq2?O?vn>D9NsT+L;y`4K!ACP`jPsc^TOeX=&2k zf_~_X7~xJ1#E6~5CoV))EE$HgnXvF-mCdzWN-j8E3>d zo8|05i2V-)4Fo165kGGa_;nTg?pFY61vwoq5Q<*{t%l4=L=L{uoUw~dZ!c6Ijvzdf z5J_3oT%BxXh2&1t$Zp{NGTFklJ?B9~bR3$Hk&OL5rsR}c&CN%ioEZ+MA>@+~43_wk zQG$Bqa_wFmc$*rPmqt>m6YaAL4b_s2@4XFt&A0elmmcQ!I_m;e0fTpXn$|lZD@$?i z;~BP7^)L(=W$>H2R0rYgHZ;>yJW;anuo5N(4`I;SA4@Bx@Zg7mmpE~Td8-gEMAcG35;jmfdU~YToobdxmauY8~ zOPlB(*&i&it>OkQ^wf|`KVil1`;pHj42-{RBuCUPPlr}kq2e6r#bCv!zHB90E2pik zWw0ZMa9x-+7FjHD#+*l-N2wPK#Q1E`3Ghdu4K6Y*Y4UF(8{jnItGiT_?4$vg z6X7Y8!DVcNUyoW=5BEEV7Ku@++HDe-vSXe*ki`f>Uxuj{re=*zJAI93;+X!EeiB{S z<9ceWR+%L<*1XQXd3m%zVu@l{MG8(&oPo=(f<%9xC*{2IwRM(+nN6o*3o4H%6J9N| zE)jdn7ikh~?UrdgiNr3=_iZ~96}(;n87 z-u-rC*O)tkR9GnC zoCq^rpAkgfsn{Z+PhJxB9o!S={g}_V_^4sZ-YpBLO7kJf)>iA>Lu6fY2QfJbljN9OdvxMy2-nU8 z501nby^PYbm|sFT3pGy4aHKFjSO>Y2`26;?*kKlU44JN={k}^p{IJ_S#KiJ0-;s`4 zZj^Dsa8Sru{wH4+k3^;gshKTcSZK|pxG4?3wIP`Bz2Ole8uv_KEQCZcki++>%!Y3- z`;ABG@o2OA{B&ny&WsXCy|s1mkyF&5#DY6@UTpXiK5twvdx?@aW7E7+IK%EqR@P=U z>sQjrDsl=Wd4hEzF%KFniZre>B{9!5lkiZns&>}hbkA~G1=GHFWpVjGvAec#FBNjn z3hj4++{JQ$Zi+vaik`HB*h=we^{(or4Qlwxse|zj+d?cB=DVGF?$>2X3}R>Mku7<&22DG_>fBP{NXn0$6Uwb zU%nE3k#Yb_H+6r6jae$~xEfpv0G2Y2G@_nBgz4Jtbz$0==OYaD!N<_FeQ1=SN>q>B z0+{X5d3E*Z@s>30@uHHL#&C4P{Su|;*(RW!%Tzxd&CX_LwMHo!7g1zp#PD#2uRdtwu%pM_?aN3kncenO0H)=9Jdu5M(egK zj#k)gy4C#QlTTF%Cu4lhD*7`RuVv&iw;km`P~e^JueUGYI9X%#JlIhiHblA}%u#9i zrER#r%e?-a-f+suY`8A941G@Ar>Cf7X(xm>M-giG>9@#U0c}a<{B9$DOuAz{dy$r` zY=1wrOn6l3?65QNfuH-n&|z@&mmI{6^lFk;!HoAvR$6Su=a%^U^+}NEzE509u?y}A z{_XQ(A8gN1IhTjUsJ^BvM%Ou6a3YnET`>%|LAA~45^p`n5i7YloeTINT(}l_2UM%$Hua7E} zb;ITwMxgJH3n8*i>&$}%bIv_RQtqRgIm-orrIbHAbAPGklO6!8m__lWwdAI2rs21x zlKPD5^WlXbZLId~VYp{{24&UGcpLkjJAQN)GUMC;-;C}Pb>$#9C{!YT-`9V6m*C&A zcUAHd--|*A597vg3gG(h96@!aV1jF0fbkH>Xl{cKR}kdAmyTT;M?#dv8Zv7InD*gNYK4|bHiH1xKPHX`L` zu{2CEpv(0aBP%UL^-R6XP1GD#2AjmsiYD5Os2STj$=l43k-BA?ZesvPxq*QH)!5^9 z!4eaqhlMCA&fZHU1xqorBYr8gGwtjEoL_C&P|NVrC}4Mwgt8T#QAq|q^NXz{xRBCj zx66~e@2UBOCZ0(b_98$l-aN|~go1$lRd_98`<_Jl(7v>s#r@1(Ua$|usnXuq2UKSd zvr2-nT3B%jNuxEZjkC=0rtD|GgpxM_t*J+B%UH3WhmyC;J&{5G*(V9@u%lTsrK@^4 z`6K;Am4pJA-w<3BHP^D7%;aBKmasd!5QQszp3HukN~Uh}TFH*#Df&x@sHzVTnjL-2 z{$JCC0ZIKnXdKaikbkexNBA}Mg)=F4qUhtJbUihSDP;EV5MN!EQ#N))9tugux2wa0 zg)e5-79=LyF&w?Cw*Ijzvf&(ozIAqQxGr%4tSeqJGXaU-%rQQ$uv+`yY#v+Qb7=)P zJ%5#xp}JjkvtYjNOpqSFEuC~@uzM;U4b7;bR}G)hh(Wb4G_!$pE~+g-;Z{zf`|&fJ zWU@@G(WS3=Z%knmg6LT0@q?SVH05vJjQ;4Yb;Qvj2X^!7{P-CtZ8^->egqz z0?0f}FWB6RH5tP0$Yi_&TVCrG=8zx(u-$KY`a|_3)Wm1*ZFJp!P-k5WlAc@+&A*?a zn_s&YIb>#xQ;c1iyB6gsk7fbhzn)vC`@5i|6bapj+g1U5yFKW!GR%G5N`?gB^U(b0h$OpJFw93wb_g_*F-jm(f*(I}9#eYv-bd$xI{ z?p&;!6S@vv6t0;lx;)b5A3vY#MC0t9>D)*&Qb4=Tb|ojy?;slXl!cZE*9@Lf=TZTG z@|*KB8()D6>OK{J9d1LCyfXq@)`c-=pGaSer6n)Sj-0wth^A1get{mUolU}V4k()$ zGB{*`so_VqG&~vmGE8PBol$bmM=FI7A)}GLA6o8KEt94eimhVs@UYC7e0GSpNjpbR z_^r}k3Y@*4;ar*9=DR<9|6cTQKVbU}eBM>|$uE&>?fvlL50UWSYJ06@u`8go?}h!p z%gn6M)RXh=4pPQo>)U0TS(D(Sb%FyR^HBcs$z{OW?lL0PV;x4UOFJ2qWT^s}Eh|U0XzSG*O9MUq#O^ z^}v3Z(fSUV)N)E@%5>+O;ZI)1mEZ6T&2wL_NI4|yaN_!=FLL!kwebHYaGv){tk>AGIzoIO+AhGVF_VI_gWaglw$GZT@qK-Gc&`5uo<`MD;HvxR_?O;iq z3?%Fzbq70b90B2gvQi;=w59hgz%}e4Qy-8x=ZW{5)Dq85l{ae8R(%JOo-J9KVyN%H zaAxe3yr4cE)x0)49gKaa1kx@X#8>9}c0RSf@qD>WUl>zwNK?VHBby>bE4}OEi`jg2 z*q&EEPld5Lt2==J@ybh4zbI6$Ag&PbzX>}<2~;Wz?!EHrniUqjg}fjAp?0|4+5p(% z7h9v|+3RLa06pM$xvrc$f*9>4p*^2*anEL1mkfl-cI}7WSmk*;Tg1Dn#F{aOD0$^U zMELo#%%yRls|Iv;<+Kim?OK%!L8WErO&b#2)lIA&rR~z|;}cbyX7IJi0J@5M`$ca> zbv&5w(V-c^3Kkq^7Qyn5&ca7gbtf17jjdx0o>oYejaV5__!nF0CMjerW4IMwZy5Su zM{o;~D;U=co+nf(#V*>PT^XJgVvj#yl@?_h2t#N9gF!z+C~JtF=u9R&EaJsT%`8}( zdTTQB=A?m^FO$j|lYi+8VjmV|#8u)imjr4x44&LOfeP5T+ErxE47h72Xx?%Zj0u>M zt{a)9Fx;r*hH&L?QxqT=xkXlKZMhR-I-Cx**=t0`<^O6dzhQYXijRHUh^VhV6@F3a z>vNc}_ZlXRpX~W{$IbNC48Ehu3)y0*3zX-V&A&*H-HH;EQ_i0=iI9szmep?Hkz7~p z1n6BcK^Jb4_WQev(ViqqIb(jl)S;4YY-6HPx)_<#2hit0-tMfZi?TQ$1rR+TSg6q} zimo%Ta$Yk}8cM*xVCMw(fG-DOsr@EFBGU&R^y4~cnojK8oC^O>rmyZd^FgyXOYOx+tT@|VvGPdEUkt6^4>fwG5jlvCy1&b<;mRkn0Vj(MYM6yzEL&OavkMoufhPuk z+$@2TI=@5mzBR$PU}bi&dGOE^iaPK${Y&{Nlfzw2dCEjrw(+1IvDDV5*$y*LD{}-s z{!+TWy^8kAeq0g-t(_SqL8Em^OG?(2_tBHlZKG*SLSauw=wHcsL|N+7u9%jizjvu- z0cPjvPrr@Ub9!@!S697YCaR+72FUQf19jajEsMMGEW~#KTHbpfQvIf{7;@f3tsK=y zUVXJ8cn*W#3M*Y(p-g8uL80uTZ(52oCYpK1fe*%{gpwFxM7{gui$$3Woj|K)YnwT{j)5{4O zlAiprAL=GN&Ksl}HZ|*9nk%TbFOcNw5(TNfS18G&kYb)z4nfUt*vyauZRID%&8XMV z2$mtEF_hGr{rB5@xBuK8XM-9>iuMNBZ+mS>OAVt5qOSE~G3g7SOF6aptX)rLOcz|& z!0+35+$k*aIj7O)+|K#bMP7XuIUDJP3N^Oz5N&Cx z%`rKI64vsWSvuQ81IVSDv^#|cfV*T0(0tfVHYsO~a{t8zcSoDHL`iZ#T=%UKU5VMO z9lZyaeIqE+eu5a4!r!^RESg;#Coj4%kt40`{a>k_!!GrQ(@TJR*srt%kvFazBnvK- zNXW)J}G^1sS7YZhQ(>BJh%_0F7Dq9Tg!eWiZ*=Q&Z(WaqISB9mZ z_yd5-B)*88->R|ui=jDwFsK!YgLg_#@LW%?I|hzt`;u`R593`9xdBnaDk=JN8Y-QM zCs0SVFR0D=HV;k@eBcrJ8S&D5zIrCRxNq#h<2pUq2?@IZ)WYhp9g3Fy0LkLR(`Jqg zz~HUYVG^Nl0(Raj>%#eb9dgLLO&sOq$Ddn7)K=HO=evGOEfLbmJ-4N%rhinK7fa2lPJM zxG2C5mcu8RM203<9aqN}4nQL$_+PQfl|-rn|& zuhn~-qTf{1#n#Bgtr85Q8H-MA%$M|pIp4(jX`H3ji zQ}4@^S-!P4`O4VQ3bkRJVtv=j2^Ra1cR$fzj}uV0QMO@=q<_v}GAO#x42DrLZ!je+ zYihWCLQgP2Dqmv9s2+7>MPgQLFn@C8$)bPGghW?96Zy|Cu?f#5pxemPUb`pS1+#muP@%g?t@8{MiE_s+D zg(a^a7K3u!6Y}m{Fy7+w9<&?>#Ke+sXV(~Zm}Aj{Rei4t4PioMSKt2pjP!c z=D-~Bg^C~V&8X&IZJxTS1A|5@g$A?RdA$nr!2|EWicq7lEg}J%XS!%>`LFDKu>qfe zSjN&f^A6>M7_$O;n2brtn9A15Y+sLd>jcXaf5@IgWET#iJ&rgJ?LuhA+o;?3Gd!0q z)nwu9D7*|pe6EX{TfPB}y_@S1GN@3OGAaGCr`Yu&!q*9r$3pz+?UC z{x?~>40%MX!tfm}vwJ>_&YaJp+PD(7D*_}I@LA?Jqspk|O-UNM=M~I}Xgzjp1X>%- z7(Ov!?TV(4VhYg-&&dmaHo4G|#36gJb7`rtiBy0EC1WS$2Sb~{4>uLDEtwGE3meXa zPL?7YtfVt;PDUamVbJn`Ggf4AR<=qm@2`7g| zInE4LkPak01G?D%)z{V|1ipuyk_+E9m}~w<#F(=VpH{Wg?_xxyh#XH%6B%X(h=QIf z1-)ELX*YLxRnwxowY+g9X|l^B)~pl z*W!n5QStW6p0fhxZ^_-H7d<9Pe!2nxy_XyIT>MO`4=7Sg)OMI1m&1UKOBVoF7_yyl z`|Gt0GjFwclaP`zQjUj_J!Z5`JcW{n2(5wCD+p5AtmzlsEPRFj#{ynx0UB5Z+qmqT z)*V7~&Zd=c$bBBb#6}$%>3`VO8MT8`V z?CaRqL8THycCuFpGnOnvhT(g?JIj5a&t0F#=lc^v78*{xM34@HskbQ9!IM(O9cNsJ-EnGc~3GjX?YB!3OA9D8tk(>L<(l91I zd3`t%wA_)bMf%`G90ID`wuHT83IC`;)jhmnQ;12~D(E>+?(lI}*ST)obDSZ|`*Q5| zubPeNXIPnhj>_7As0_d}0o?&YgE1aZ?a(cM9hT|2TxB8HD@OKgoezG!dOts88qG== zu)?$ueV(Dl;?)JMQ5S~-#Y(a=>#VUA!!VrKKK@2hK05r(OmM3jFYAVt&zaq!Npb*< zg(EPP{g+|UUTbfngU?%rZ#@x{yScGRg_~hwuq*~6=3#02BA$0#%beeUm733=zD&+o z!hZkviX0oPOe@0|LOl#symH3O1%n78)ANb$E6-=F7)y@WN_YlJ>*{{cJ>Y;KgnlW+ z?#>yw>%`G-Q|Bx6!p<)V#tM&yRk|N^%Js?{*5X_M0(l9zZ;E{TWV~@mKMKajj%Gs< zhIeXgFM@GJ*5Vs9aVv#A2SC)9qC)huDGAZ$fGEU9pIHVjC-50Jbe-+5@Hr=Y$)_ef z46`2f*pOUH&$7bdR$#l}F5W+23RRhuO|z_T`zW>uLtnD;dtV&yjvvaGA5XH}2XZ{c7LH~AxcjjtW~f0pd;8}pwf`}=nM=al{ZsQq)w{x&E4=VJW(OZU%P_Aezh^3y+W*^5ZYlg75Fl|3Br2)1j|0h%Z6ZtHKcN*5W?dC$CFGyg2xOyLkF@1*kqM5MP2{ zi&SNdl6f>LN2dR$q?}9R;lNhg^*0b;5HX9un*md(=hX&u&$fkwq3e!>p3Lj-e_A7= zg+t6*kO49X^Hz$1RG@I?B2aTY(=&3<#th0XJwdE!STNytul)7~-2>Dd9b@9O!b({9 z-fb!$g~VPk=6=mG_5W#Nw#B}$c>*_otylpMj;hz7JN*ov6#Np^^=A%OK{xSA15toS zpYYrq5vdp(z1pMK-EbbV8crOV27SrMnvFYxQ@;VnoP>bH+vaykTHZ79>~;UQPcE?h z_3q*Om8@}>PjXW0mL78?XgvWhd+pbVxt|kd>MdsIv(C}gXSdqUEt&}5aX$GRP@~W? z2;9EZaD<+bR|-7wqaG%CWXIMSmA>Ih>-qh@>yE^uI!vV6Iq|3dz90ToeAphmK|-|g zEBrL2AsP&Fu0qGA>mXtSt(~(c2%r2!8(^wmsv@#si{-(*7f*h>^lZyhWBb&^9g5<4 zrVA&&uoUe<_=5;BH0mtM*{-*b9?W_kNgC~%cX0cDhj(-^#X{7+x9XV6!(2@$@#a~~v18m3bYQ1!Xx#NdqWV*EAE2pc%CPrET34-!dZpMX2TbgY*-H_}) zcf!;q^E`EM+u!f%f2~9;mgC|o)PX!0JZXG(@L7*?^mY$lxOH~m+)Rt?0LWp-5D+j{ z8))05CeSBe;b|0!eQEOoWKhmA4agTPG~{f>Hq5Z*mDD zy_KWX?J4;x$ZI1;i$CAMAKu{0i|4C|Qua9_*YYg8YIUt6di-*^yU`ohi$DFENw-g4 zM17nj&Yzf1#;}A7gIA;8<~}aXtrO5YTYv0+#{mnj#*bR|(J@*w4L0$_;D%6{hjz|4 z3?^2f#hNHoo-j6iL0fLGWu5Em@`BiaUaU0;6|VJVr*j7| zv#FberOQy`iJcDjmiGR=Z}?Z02q$FQDpX>lOy9NmDDY=Us|9ymF11n7Z;FX-pOcQ= z&_8(#9SFk0UOCdz9+K*VOQ&PQ7BPT(SFL-z-@@J3VQBdPc??e1s6@$N$j7gL8Ww5P zE*%SCe#BR08H>@XBxDj=$Jp~DtjT+)|5Fe9N9Xuempg?M1$1AIULf#sJ;r~0al;vO z(CH$+a3B!c1HxMA1$RjEuy$CN@ih?G4sP#RX--z;V=$`k1%!9VayAtF6_aJaKPE?M78PTur>5;&@sz-*p1pTok z08M&*TrLlIZzz#H@P69RVzJKxfA zKvzb;ECep^!GJu_6NWiuU?On4#+}w$GY;}VMX&XS)=vP*RG)qgvi(>GZ zaN+Ea4wN{+I^|{zN2K=;sUd%_UQW+hRzDmVT2}FA|Lp$Yn{|h)HX_zj6Ec+x59sfJ z5Xfu{Yf)#FzmKSkINvvN++RXwh9PQ|m)4Ki9w5Y4XXJMB|$AxfvaW+nybF{E+>+irdJ7%@c?U1`PS8RTi5YR!j=uoULKYLL5~L&KyoM4Sn!Lj9xWd z)XDTBp%=vBDY8E43)bbtMDK7$I{Cu-7iXUe+V-zSWr1?t8SG!wx(e)l`WBXLxjuF?APpBv&F6UADXj54Q$JZIps}4`sE6nznY2;7bKpMVW1mjKAb|cg2D7 z^>T|6muTB59l|!bV=%HhzA*I#!XG$;f@9IVpOWj;-cNx_dv$W~qd}VMW6D{td0o@S zSBR=^Yul1SlNKW7S*d)c$0Ny1rr3J}FJYx}X3JH{kmsxK3Tmj0qg}i-Wwn|Zgw@AL z;j8u0pf5z6HLp&V&&QaL!-m=I33uaNs;g9!K%)c4%vnCyml^Fu*&WrxCMtU#Z`FbN zZ~NmmazsP1S3rMEtHIJ-LW9bjuVhI4GcB!cmcskrsC4J{CqH7l9?saipk37f~t{#A38U z$Ci$VC^!`GQ0bZHS$2JMA(pQRKVNJb7t}V7J6`Q}Z#{p(xJkeTMx@RVHKe(=Df;rO z_0DkQHn;eI8H}0RU>ZHE>^;Kx{-j{_{`WM8p3 z!{&LsIU=&tyh(l@O8Km>awhnN4!+GUGBnWWI23Xpw~JW% z)`^Oo{Y<*y{Ctzmneoo8Y}c7fk}ge^r(48IO~1@o=7o1gVO#Gy`-V6-4SSJ_Mr`_q zVMH(f6iu}XV18Z5p{-;rdcjN$95{x;n1==y^qLDC(IGK0(>RxQpb2|5Sy}G>Sp|r? zv5!3m=0CB^S57bqePV3aCE1&U_bR=js9io+No2jU!u-0+U85o)LO_=9w^7O3h0nx< zhieFe9D-qHea|r|fdZI5V7?LeI_Mm?yt{S3N--Rm6FoBTm5i9#Z>)KL zS`~k$*2^>;JQa`3gG<($sKPFLQ5oCD*y7%__92#Hnn;|0!N_@qK_(U&lK~GZ<-Kfq zozTP1-w5Sum-UYPqPaPAk1+3oQc{9Nhh*2)%crV9Y4ma}VqJH^A2P1vfYj0Z3P^-G zm#UL0UYR_+zsP2m)v;Ti@cIDnYDwxEmdL#1Qj%u0@eJ2!$d=yC&*!;2cgskdta!p( zdjg-COA2A<9db`1ShoGONPXrCnbh=_!e=h+aEyoy_ZSa>gQ)CM_b`^6u#H$(vcYhd z^8@8Rx5dzBZwg*!G|bx_pe`=i_>?CO<%}GK6~bqatO$zJm-|Y~jS!jb8;kuB!-_r3`;Y`2R7 zs$>bIOc{))ttt>~R1c53(2Nf%Jiz-voOx1$={Z zwVvUOE<=^D$4v(Y4%#I*<5=4>m9XY2UUS2FObTKq0!NkiAdlh0%a?W`mt_ksG3v3S zDs%K?cR{;x`o6=*g)8gZS2pcD)`*aA6g?IpZea8A!Qc-W2(OW=n~xW@BP#Am7?vK7 zU0i&!FEOjuxUcmzr=#Qdb#V73wa;%w8TCG?CB{6K;vUyczv@) z-!UCLQtcm5WO2+xqqn1?{kL2ru=B)8)ex4<_9GX?zk7ciaRkIEqG zC+*yiIe9ucmufP*mdngwJtZWTE3yJe8y{!Di*tj*kgp_~T!}EFZ@HT|<|ylDKXVK= zltoy~Tjn0E)X+_a!K(gpNxb!-GzBRjG=U;eU1k-IJy_@Oac|ASsFNMrh6@)l?*|tY zMV|VZ7jFKLr`a$p1!`*+yqsgl$c%;vny0YKmSbu04h*-BC z=dLNWI_@;Pb~e8wL@2T242HMl3!oyK^Y$q|QaG%GTaRX)$xQ8JV#Yn;sC{=-%UMS- zU(Xrrkh?#b!f1kPPMk^^$_#Vv8?Og3MhDq>-fmu(9hGjP)7cPurMJ{W3&=A#k$YsKb-mFd>k;={E-IpkC*G6XfPk@8(jK^ zf!l|DU)OI#rBv>W=&*1u9ZkBA53E@84H_L+fJQWX`t5JMk4KxBb}`r5;}4`03v&9+ zll4{b0n4$^XNG5wj$xA{9#4wV z-TBoCEV7pBq-X^JJ9l4VaUj?GV8O6hb$edW`vIUC37GOQc9Qa4kX5M=72XtGl;9K6 zp1e?#a;@1=O(4c9MBy_eC6Y@V;DPDVQfZC^U*KP>?}>zqOOETEo1oOVa|S z0c83nN6f>i+>B2%mzq`<^2Lx9(otcB>*J`yx~crsxzF@2-!CP7ZoS5gWZ8PjMILkK zKY1Heu7!m^y#W4&H~jU}I}up2L-$9}B?msFyYyFp2k#3pjKs(cl-J+gvTBX}dKO2o zTC>4S0vdr*G9F{?6cU71g8Z!<+>lTu;-nDM&%cIhPlDs~K0x9cBA6>`zyx z;IklNil!{9C4u{BM=zMXyris<8p>90Jo_^0yPN@OgCIuh*tamA1 zfg%057uYt7n?VHaRM2MdDa)#G_^aR=snU&zrIHCm>TS|-*Ic>YSKwfXfJmjy;#3#t z2Xbz_vWuin%U(HN5y`AX!VZueunRf%1y-!mkMO31pBJeA(7)(^D4wF=L~TH-{y?bu z7c27}Zlhk%+7riXuOZjjC|qZbWpJH!WoOI@B}z;$+2G4N+fQ2A!*b|~b*(J8Wh^dA zb_H0m!l9^ux z@EbBjOC*>2V1f5E8rmRk`7hlC$sD8$e!Q{$Y|x*t_Y1jZt9O{!->&~#-@!GNM~6_g*<9n zTKFs(vm&6)Xy(-|D@R2CFOPlhy4H=T$ERm`dJ&0k)G^oRWzalV%?=Rd8mq^kGervU z4f8=!O^Y3b#EU&s`1aAO+${Frud$`rX>eIAW?Qx9_G!s&eTWi9!leEk9tW04LIC1{ zu>6@A-3~-lZs4e&kJIm>WNpFk8ing*(o*nvB$5<#*k}|HTOiGbGJoZGVYdi-xV@F+ z_gl>PU$EN#u|$| zYuk@sTHvVAOb?vqW+^HUPeMGin`mafPP8#&QsTyQD9Tjd+_1wu)*Cartf->wH4=CC zrk>!tNqB}mKxO2SErt(1X}}w)q{2j=7!h_sdi|vsfrJqMqMCzI#qf)cevpF{)FQyG z4vs&yD|aVEYCg>lb-vZ?TL*Hx^4P!f$T+K_icGR3BdS+6VL zdT0FIa>f2yew$z`GbzN+4;(sZvT9|?yWJWUCx8;YK35ymj{pXb%;Htk9s_ZuACmxrT0WBSW!y3KqF-q(s1#;LQHg>Lau(O;<&Wa9WV?CdXts`-S2 zX6=9KOc*<3y!xR-{jN*>G*!S}`D)jO_ej#m1UR&8*1;lTHUx4oTtdvC5U*5E@L9hy zT}4)x6!}B~_Mt_E@5=H-u+nBA9WSH5AFOlNg9r7KAit(Y?Yh#V8rkxF_$DW9b|oYa z?(M;Oh(jrc0D`;S04j0{ksq~%YNkIL#}3D}Q}W{@%!$W8IDxm78~lXNRFZTmT4w8g zrPZODxok2SC5_64`ps+&UcO-Un`#XR*4v=EJ8XOxRL?3tufz1)-SvFQ^!P_Z8duJk z^ap~7oyaI8&+RC&$fR5>g9PH7Auq^tt+Fub+&d1X&Pgchn5E1iwC^b3&D_zwmlgPW z`T!QNYE?CQ@r1XRo3E{(e)VW6<+s(T=})Ja8ugbg;|n#@&C5xFuiA=S`p=w|SmzPp z@JfpTjCOkVJ65jk%I6su1{PVpyhyNEp(zzr7Tc^dH&k9#3UedxnAv0r)hwCSCav=CP>ac9cBh6zHsIOp*>;^W)8$A)vg`VH4cm67|7zx0^ZL)QkJ7PqP;Ot9Z zbTEvFvENruQsmik+!DM|o?z>0WKFVN4mY+J7Q)0NYe=5$1B3oaaL*=x=oK8XinIz> zt5=;>O*%6CA#}S@D!oG}z5%`86AZ>wiMn4Sxl@dD;*DV`AInlM&Veq+ecPcgLcCLo z#BVhxpg@-qxMG^GFxW7yw1L82dlbhNkd9E>jHRi1b*j=Z2 z0g+s!R-g#X-A3AprOyxzN;j07>AA~*c9%kHka^Lk9ekYVD}!N)(=;8-cQ0rtDQ5y+ z4*%&9=I;(?(Nu+c9{qyn>Nm@P&yyMDOlYUA_ELbhM7IpR%)Dc-_@b#oO2W~(; zj<(#6=B=k{P4Ca95Imq}^h5yDP;|Y3_gBTr8MAab>{LnKHgzWaKkf+KU$gh!7B@p2 z-m2Kly1DBmjBy5*7aDvG#?Tv(x3$GxnqdV_|j9R^((lNsHz+V?t`=`I`0{YyQz zXNg|3z^ArlVk6=gf(Hc87~NE`e&+f%HY-2TvGR`^S1eCI)ZHsf_Qp$2JjdnPu;%I7 zUWg*^6^8_}m!cm9pNt{6B92E6Wa-5L=!#>EI(T)d>%~}zW?qQAFdIs-H({>Ev&v=} z%_LL6zlc}AMM|TzH{UBHJ)BsX>-99BhkE0-74Kn->(F~LZqAA9-xUKk8=sD1T2fFi zBxy>EGA1C;#`{ELeUA>nKnYAEOCo3$j`t6QufyFHZx8|r`{n7LZ%|Gfd2tDRhjk@zNN;Y&Qfe*A|56jPu{v44195~VF1IW=6fPgh+C^WgouhQzRbDYv z@g-Ajns9CeWqMKI^x0kEQ{Ez@wFy)-6*K^JdVMLTZ79zceQ{7Iy3kzpyHC>3@WC|zM7yB zK7M>$PPwoqg^1YTB?$sRb%-~2I^bb;h=Gya+GRqD(D#RyS6+`j#X$oGi9S0| z^U8u+v2Om(ewg=(S=HqQDWd{0w*LN+(n;qwFm!fe zA5h~E1JPkl<+4x6GH_gSHOV5nyau*(7$E+(&iVoW`ST&NAlfn|Dfmbx*muN8MT-q< zO72UV4Rxtlu)fH-?a)ERAVg8{St0l3=e2G=?CHxNL$wsv)AUrfK8O+=(Pi%9<(-B8 znA0N_YW&T%Ny~82DZbXRku=umaf6{yDH3t55h;1#Lr)4w?IPWMj(GXHnDrGi^Nl(( zI$U@eC+wO9i=b_;&aFvryt|42i$w89b{YHD6bllFFRuK)fC9{eMGy0Ru%CssHHEkttVloqiS0Hch=(y_*ttQPaARjq= z!_+iPfiqgccRICYj=ui80mIKI46WO~bhfceI5+Um^R)M zxgxAtkHaB)3H{ojS%4}pgc-6?)0u?1vB;9MNT~VSK;B_$-^fr^-NEA9!)j|AafsWr;fR5tg0n!He=OAaoJ3;$*gl&iOh*>C~8 zOuufGQ03fPihZ`vlh1&tbCkD<4&t=$bg7$$WmJdsL>IfHnly^eLE*go0ff{wpVwFJ z)v>cY_dItyqiKv)4qAMDE#-zwZ86|gfVimr72(5V!{6}<+AZ(TU6T3GWp22pFl}Si zt8mwHUTgAbsQnzk^F*o`d9VOW(#qrq;ma|mAg@8kuEATMyjj&JAtZ+=^B8zL`Y@CmN`^fmv{KX5`s+$IJm?x_6mBmCq~ zVCxQw5R>vXHJG0x=>PfKPMUCnA|$*`Gw$cT_P-FTzkV_{14W1dS#dh(XSdalHhg0^ zq6o1n(6#;f#Pe_5uJ0f9pC$YIg8s8)e?I~Le#*Z3j`gm6((`(udTQ@&i**(R8H*Pd zgtaZdSrG31)*Huh_@LlypVy(JUkSgJ&)>Fxacq0_V^ra2lIP)ao+w}9XAGgQO|7h} zZNzzg;zYxx^amI4ca9){a1g+OhlZOPEw@(cURLti}v>={b$ks$EH5{&q@0q=kTAC_CLOm z|BtW78#=2{E&x!@1O8TqSXXBOsBO0GiOT-Q&eez(LIHT3DOkj{0{Fip!3VGSj{f4Y z+5co2XW-7`&E-HGZ2AoxeXuehNGPOFIqVYCV}bLz9TI9+3grLyEbudEx&Vwz&7$VB zqHSsH-RFM!=>7P5*U3i@i2c`qHqx7Yp-M8S7zQ7u0Fq&@dR@e&ao#BC6vDO(hN^!~dUBCdW<0;8 z6xiu)2zcZ)H~NkXvF|7YdR-5+rK1QTKjk5q{G@c-#y>!W>nC#UCy-eYaO0A{Q`-Ui z;Ayjh+#gTTtm5ZL5>d~o4dShFjDe3~?4{Mf*itYq0iJ9b2Fwt{cxA7p+Ooi8X^khC z3MUm_1f9DpVtzzBnz;mVbUol4@w}lESY7wPSf^MxwiOs3%2>Y@N>GTmq-rctPcy|wLp*a*%1>akSg?4_p+mnI;>xC+wtLN zp=!B+_!bjcOe<$C=XGYd+@$H; z`qcG4ENR*fCQ+c2qSF25KhuQ1KmCo;s}C*!KFFXV2x@TwZM`GVu(^i5o=UrU>yD=2 zVMr|>zGckyx-pDkx_;^u`nGvqzquo88plME&g{vj@wM<}L_WL82dOqSl)It_`Vs#i ziSpUzy4=Ot(Sgm!KB8oR;%4^*1q?0+D{-eX!sS+ZMYfkmSwMGxaC7^3 zsoYE)b*9>J*83Za`XsHW7x=ES6C6_X9X^Y5?uc!B`6oJ6{>hIG28P#2vQ&2-7Wby0&8@LbhkbUIG%dEq+nR+&@+ z@a}e-X{I2~I(?pnS z`S5!1mCBiTl+Vm{9YAH{${$kAkuU1*lJ^IPl$hc3(&fR7bdP7+-TpB_+KdtZp~tSQ zJ8m1le^u`ab-4dtwEX#G=NF!=-+P@5!@uG?gqI({r0rVg`@^fV+bk;bHr!rk;h?{N zQ#5Ur?2%cE{YpuGU-QrbPp9q_bv@b1{-I9`0jrVZ4@1*6SS3_+UgtV|v*)i2XuF5=W!uF|@X;;CVOYVJ)i?+iCtz#u&3{6uEuhrZ9S{98s}; zjctuxaDpki=-9I~JFW7!o%ydgMNi9{bh%r-7XXScLOe_%+=IaZT$~w3k7gc;iMHmJ zPo}F!4gUEW$MXWpQaG-sSTjB9?E z^Fip@$@qpX=C`y-LAevYakSxXlezqng+pb;=z^u(tjb_q+~j;5bwj5??T$YzAmYiyO_xF z9+-TF=e10NAa&EU2hqqN`Ipy9#&|hqD1cT@U1( zUqKM&))PGlO{S#(#f??b6Ppx-wKKlE54EP2+l-!so8DHhA8;^v1!sA->v7Zo(Ww7OF8XMH_j(*A@-#OWGP9> zFqhVujarwj+;KMVn|?avJ(%fYQ`5oOVLr0xGcqkpEjW4NKQR!b+(KS@*TfyfIE+)glY}a?sJ=WE9-LDe(HQ+qi%TDRuTVD41L+{SKR8c^j)SNR5 z+NT4i^yudBC11m``E%-toxsjRxK}X?ES*NQI+ zmMIdy$bQ`ChHrB)_en3utwUuvx2c=(`w(wCE9LdBoGL=Q;Onm_Ot%;14LaPRqi0zP zZusaSbrIrLl@N_?LMuPsPAZ-%u#;X5cP2Rsr>P!j9zBzFL~gfR4-;g z>P3Lwt7ZM#e&*A6JRi-_>Dal}_L4x<3%KTGnUn<&TU%|jTUJ7htYqAr_t_06wHthC zY>i3E+}PLA*FN9((08k64G65m#|1M&}lFP(>A|FaD9C)#u<(U#i2;9 z$-J?AC!)fb`lW+bAcnOuxs07(Y-}iM9IDyVI-{hdY7V8=l+PI}hY|beWa)OJ{jw_q z)j=KhMNs3MC_hqv*6JDD-VTGiQ|Lw=S07oDVaQqIAJdNra_yeXSZYNTDu8y$Pl6mc zvz5j~oYHiId=(NINwlJZ;e7oH7t6@on~R}3F({wOC?bi<`&K{TA8u{Q%sN0Sg|H^1 z)JvXpVkAh$2rzc`e_^;cm4a4F)mQs6lvHoAvw2m(KpjPb&%d*1Aw2AKH>iRnJYR2B zZC%0&wl+vroQjJP5J9)jyN2n%WuYxuda9(Q<6EX?i0@`T(Ru9oXbTtU@uYy+wT83{ zAC~KAGb1*(y<2jLevE}vTGZlYz3N7idG|!){NgV|Ty`#<4OctETv?+EvDeQ>xv?P0 z_N~WHI5KW_H#|0=o6KXtOu&uS+br81#u9ql?C_ao69R2F!4r7V(G%?V z-c)O*la7YFR&HT=Z!n8dUC&r5M%oB4f}IF(k{So`;`SFIFyw<>l1rT9b8Kl0qS;8nLoYe=L$zEX- z*!tiMtdwv6yIjt#moHE^o5hHi_2IpoXL~O~l^UshXosfa3}=2;crAgbcfvZ;iBMs< z7{7hI62@K17^%dtFov9AUofU2g%aGbC5(r*SX`Ui5fDC;U_Xx;7sw@wpl2C8Oz)J3 zaXRmY?~+5=If46VUTNf>X3-gDV4P|n6U-0$=9DinbbOOfCE6I*G}m=i`|S)RgN`2O zJq)zI60lc3jITBN;V2-M%9(G1isg!NYgUWLbyh4*pDXJE`TUjhTQ+ft*5AafN#Lj- zwQ6_qT{Jz)gk(MSBeM3ZYjd6Bm9YYxsA@|$UfeKGQqMoF|*DS6zso-&DUu7k( zr(UW-?tCP?k2lQ6rSUjnL=>hI@NNfr4NiCG`EfA1$Idn&DfMhK@hAx@=XtrMY z<9DKwelW~~G?0vI1vls2%+(LlvtHbTnUql8Ybxi#a=3s7hVq$q@lJUSrh`NQ<^p%A zT>o3`hAn1WN+le1TwH1Ezkw*XD1BhTULNJAAP`5lA-^nEl(sg2r}EH~M3ut2dc^ns zNL^OL<+|Uhi;*aKbdsi0bbsrsm7-?Zd}BCJGh3&bxvqK^l8kk>GJ7h>m9(fVu3o_qa<6{m-Ha2Y0KZ4v>VeaL&CI)F9 zD=i9p={!uP=zzE7ap~N?zH>{SN*`5{b8MT_PK1G8$a&Av-U4*wfr@`0JO}JX^IJ62 z*AbyYcj$q;B05~!IJvU6{p(W&yEA4S1iVruPSJwKd!B7O5({kJYt5HS!LUZP-mh`p z4eV2d79A9{0L^a+F!qFT?dk<{T|DeqMH!KJa0Y(fL3%hI>Zhj@gg;BzYM!pTt{sh2gj+GPDV$&b{+h0}d^M8C=k4mubz- zyeg0G86y@DrgR$cG{pv?-m4IoFvN2%vWscABMIV~-&8kIJsI!f6XF`APm{VPbd4KA zyTUi(ba>|~o_ezxjNf^dNty^nfB=klRI1-WerbC>iUJ+C9h&Fw+wsP20#VR>GcA%# zkA=E3XHnnKZ0N}85{;ufYO^}L-_4v?VTCX@xo%Mpk2HPX9hKORZe3suC2EY@{Puc2 zPkV?KqPsDrDc_ns6ywNW;!&?JhBe9F@x*wVZ_+DHl}}cm}05( zF=Kf|8Dls*+9Fg^(ikU9gNijEl6}YQe*MxCPOt`mE77}z=A9GmX2vCdZKvXSQj&-+vzEwcUi^<6UUggYGq zZbosPPO+r61)M98678gb3Lv%n!rfiDxdxBZ)gy2OyX{8NJ$naP3bQlfZg_hy_-Z%3 z)9%FH_yn308|8+IHfZ}|f+T6l9$ni%@3y6$doOhNQV)ceKaW_d@g^Q0Twquw!CuLc z;z0RPmNOo)C;7w@pC+3}Yz&^GD`}cA7X4&wlTe$@leKld>QmG?w1if)&(Phs=xaHh z#rjfo-p=fowYa|G__cc5Ik8XMvnNBPvq@_iFDd{MQ|bH?*Zx6p}`HKXn&hw)}9 zc?%d~t>lCFQq4!`Wch}>7&JpuNde>L$lCbP>+WQKrEe7GZF&*WY8ZV5xrD3>3a~K( zaa|@~W+-*^28C5iCHsI1b6ELD0N_VMq*l^5d=UpzyHFji%G@)nq4T`Z+i;gJd-t;P-%&ZuRZ{GvWf;3t&8O+g*@SD^H517Vp$dk0 zo&D(9kRd=27+ZXZp^Qxhj&xH4l!fG1RYg5;WAR8im=J!cJCR<6?#Au$c6n42TW4Hu zn7USsF-8lW*hH%z1YX)y`ZL@*JEPf*e5izq5iq6inY%9@l!85qYjE(0;S*=Gh`vfsT=Y8N5l*U&MY8}-EaWNoe7aJ)Q?=kx9-&6I0l zD;t?y*bYkn?&&3_WJ^*ZE?O9MI5X3ZK5gpT{w_QYgTjK&z9$H?Jc3-X{&9U_TEmy2 zBP=LeO)7FfhtsWR`c&;dat?Kuto1Hc9*y`TziI5BJH|YIwqY$PWLTR{y+(w{iRiA6 zL7QZH4sRaQEotA=Ig`^H?s#>CWYaaU@M+f%_J)nDD6MTqQ_Bl=tlE z(8AW-^0tWp<(OeBobMd(#|AF8>$sc3KZJZLzgI%zCBpYz?lPOu`x&qHM2?|_8O=tD ztImR+@!XNYMvgvwKP^}-&Y}qaT>f6)8C<`^sSS5SD~^ZCN8<~ zy%h(l0%W9I@^{jP`O6QXr8+$pa2jpYV4qQ2@^4X<23zj%i4Y<4(Uk#D!>)P9=V3O{ z?&0*#JR6Fw=;#{(XeVmzm`8tRV=rExZ}5declL@3Lq63oMzN|Jh7#Ao<6oP z#>sXaI)zCOKoMk5JWFp!9McgE&ph_|-e%Ti`c&-;smyOaRlokZHCU!?oM}aPh7Td< z4R?BqfA8+kc)j!2UUKj+<$x%q)TyxZpv3w9UuS(3M?=m@xI&qEl~P|=L*zN{*NAEO za4C$j^mWsQDIZfSD6s7li0$at3>&KGqW8C%ZT4O7W|XSiC%F)xi`Q+9U;Cx%4l7Z5 z9Ho@ADjP}tVo}z3;%!IZNzX`{6#H>>BiUD4~F_L@KssAGn+;w{z6FIuXQHK{^ zy-Dl7o&{jI{zh^7OsDzBMR$BM1WI0s!bML{n7Ak~>=Vo_%^^0e#ACcIJwjKD%dVyn zD{sUY@0JlanQ-3=C7s=q&l*QN1@m^-T)1x40^^sX3r>-EG7rNsY4`hPo&7^rX1+Dk z0hEk0;reb^w1+b!)2HlUxaB}Ar91;^f>}Gb_1Sh4N7}$xLfixL7NW}FOTTIu|A>cB z^GfMk82;a`nk(P(;R@@>%z4Wf_cYk}p;N@N!8#PjeD@Tw4&yDs@_wM6-R7{re@vtGB68h_MtOZ{ViQ{TBIzi&&{B}b?;`z^hwgqWf(Muhu& z><{S$C(}8Pn1OA?$qtY-oNuBkm45(;C*cI7ozQzTCzkB0RNF-ox-P$+i=edOP#v;< z{kwDJOblWy*rG7$s^U>X3pd{vDeCece(F*FjRJFrA$#LNt2^RCuPN*in-#u&Oi2MX z{jp735)$Ih0mr+~wr^$FjO%cU`I4wpev=B9{99$w^ren>8_F$R_b%1SRn{>5j0@c* zM8Bs!y5HU9VPrZK|4_D892{$=uJB3~nn86}(Bgg###O3!&(0Nom%1Q@ZQGeSbzYY< zbsPDQiqXa!$OciZg_KcP*DHW}`}8Pjw-Y(f06keMv`&EbXKUr`^)Ns#2!f@4ErJQm zw~J=sc{ue^Nt<%A^i2oZ_tynigZcT7<;!*HCEx9RWHqu=Y38wT5L z@1tG}HU{!tyy7pM^ln@pI``w7__5Z_!GaZ@(!S4tYJZHA(v*E7RO4u*`8Z0zU8s(n|9Uf@PCvbGP%RW?`B32dMKy*jBtI2ON*Z3Zpbgd=ZlD< z4i7FIiYFGz6BS;|H%26mA|6VbvZD#t!U$D5C)NA5)0Wz0W8^h$)}uD!Sv3uOqr`;R z3j3Nb=xxtT#&>u`$;YfLG2QE7k`&qPz880l8BH zP+ZjMTE8XQ3Qt3H zlFc-p=|7J4mJ8(GeGOYm(hV^rZ|z)jP0exFygz!62*=QHrJhwjCEw%U9;xmg<>`e- zXVL@C@fEtZRwt)%*2rd?5e}km%phf<@G_fh!f!z4u+7=G1t|)i{#tkaR0IFCVwnDB{ycc zp2*TaG3luEqn;y{i^F&yN;`Xw=P_T5DAdIRV5A`B4* zKIvGcUO&ij)b2wobeQ@3Vhf+TdpFmqm!oIvvZfp#MaWkKQ##HWZb0QraIP)~Nw6H& zPIuG%BI3F5_`8Q1;@5UDnj2BMA%gg8KACiM=l(#yrLs?cYed{yQK$oV)J`kv@qcE~ z*Czyerb$X!z6(x?FtEac|7JAq{lQS_EQTEP802J%rCD>hQbh8l50XgVHZBG>Om_A6 z+B*kea^58u*PwcjnJ6vsT3&ld0YK{s_$Yx}a)2W8M(I_x=+!!-s^`N+U7yBWWkF!- zqDHzfqAER*%5C=+R{HkNGc>2bVUs>TE<*L%(9%8&&0NSPRR`&eVY7^VZ%D* zP0Z{1g-PtU#m9Ab$244Z>2~ZOk$H4~IEI%EIC%~{m;lU2lFBsPH;bF=o!+~+P_}om0AAVk zf>bxMZOH@c;&n!sYzt|$7mmCJM+To>Flif5fsSKSbVlu=;*VfNa-UWJb0xjiL4&D| ze|DZ7itW;g10IQ}lN@hF_PkF9m1-Fxl|_diE$AR&&a?+#oTDJMzowFh{<)(oNK!as zb;?X;jGm7yFn@Xg0UPDvk2&Z?s^QbDYftSeNcR6g!OnX{3BCS~Ij92Wkl7DzC6h-s zS{XCpU=PHo7s!Lz;>gU_=R`Xv(dk#+5#QY=fpF4-E`{f=_~MR_*OVSc27liOC6j?{ z*Y{>s4ze+3q%To9r{vNOQ9j;e;rH>TIC|~VB(7vToh8PcT9LaH zq~AVMCFO@a`KRQ9y#F70Zyi>3_Qj1JPz(@7r4bZS5fBa_B_$RpDN@p+bciS+hc+-l z1?g0j4(a9~Ap#;G-65R{9Qwdr+Zi2aUT1#3|K0oCzh)lfaK5qk+H0*(tgwlUXUm#+ zs+I`ul!;k`j&O(WW~`&tq3Sn|=|xJ17Am#Y`X6CCg*q&ETPM?q>@hiF5d9t+_p>2Q z1pwwqS5tI#&pU@}cSxt;-PTun6y0Kt8a$b&{-PcGr76lE$Mt0t(r-J8BX8XG6P*~-#F>g; zKOE__1;gA-#pY;->251mn{kJkuYx)`f4Y*|Y#Aes*=bG^_sRf{>t-n{ zhWyuf#&4ifL5xr^;Ooha9yjrF$S7c`qf_|xwVQ=5aVg=C^l+oEZ)#^+?E9#CMY`0t z2LMi+ZrAgk}z6M6QKM9x>?B$24kL1h_aztWuX3>L^%IV?REm{U`bwj z%djH9g$6^vJj~#vd*^168XGDy2kBf`jG9uPE#EC#YoCR_xvIAH@qE_sy-nVJoyJd+ zj`KI}WwJlb`Ddr9M^A=%X?4rD6~S)B1V_oy;s9aD_taLE1NCdEf0-aAbJp>L38>q8 zVTbc<&F9(Yf&y1U``nI>5hfrhxsJ-QiLnbqlUP2O{w)zh*HQU=Pt}Ev1Tu_yKDS0S zE-og($?V))Uc`)OOh4CdpG2XiH{*QxzRX+kN&!$>-#n~kCAK^g)dgnDVIOF@$M0tA zIdc(4>Py3*OITk(RFVj;tdB{QVzbJ&QgEsqtu{R%b%f!5tbqbDwtY15G|nm|#oa2K zK!9((x-4F4hQf={oiFK=nUnG?3D0Ijj<9`eho5R`C;DIu)v^bM<;NRmqj2t)DUhYG zpIO-JRsb)v1K~!le8KIkDH$)@9pyG17#$3mT9HKLj;mmb>dI%H&>re1K)s}@qA+M2 zX4l+!1WNOC73;H-;2vgAQ@aPRr{W}evUA#Zq2VP$nU}IU>@9SoYNHI5{LCb{U7=F3 z^7OCWjiK*%zLOlWklwH#Tj0A;%MlaGPhJvXnN~T$Iu^de&NYF#l_lyZ(2{c224eJ* zk3-)-@WKf`(OMy}@X)5|5p;Qi7gExkoflue(z@b!)TQSO0l7bfu04InPWFNGS{4xM z3Z%zh5PgO}gI%c|nBK%4o`F;@esM`^Wn@K%ADR_sSz?|UF|9sZZu z_qXWJ;5e3-YRt8P5fU}%SFh(pxjf%7{-S%>F{mZNWz%BbE)aVM?*EmN;7bAuJMnq; zfxFyD33BI%X&NV(AuG>Sd0GJ?xhX{6N>`=ie{hs0G#93mg?c6t&S5VLCcf~jXp+-u z8isD^*O1R%Dc0E5doEGN;Ut>a{CtN*{?;8ooDsTyXuP*mMre?_$l( z+aGxYFnxQ(+6xhfWWgexC--G+L>FF542-1DzvU*ci)A;Wd~4JZKLa{p=>?#8WG;y> zUg4-yJhdmwM0V4`(N;$D^H^599jcfJ1;*>Dr_RT`1^_zyvPcZvZq?|ZE58?uL_0^_ z+nDdY71z|uxKc{t)2Hk#-d`o);#hCH0sS?WJrg){wR>`IfmkQ7IoSO^d z;JPc07xl!=G?_F;gWGxgnT3#^)#%Hb9_uIvDi_650b46M8t6w1Ej`eg+C^s5AsWBX z2y~DSM92oOHpVK~6F*!{p?zvGdpFQJ6Cj|PN|QKO*Se!`V`wyV>bapE>Y6$vVCyKj zBk&ok<_@EVy$YjZGeBh7=^`u+3`)-VEQv97%f+6P47E=N_!u>_-tK(?SpO4f&)so# zeNJ>Kcu!PveSs=z3Kz-7q4RN%hwl~c9m!2OUeGYjM16V<7{56{WJ&24OP+E9a@5(_ zLruDh^+56&7ET~(R&x{`Lj~81h~Z|AIf6+9$(nf6a#uiY#lHm5{dE^e+(kJmUntFl z#+rNVah$L9WnZFeYnrdeO1p%alVRfb5XNGCf2asGBLG8zo#jUhLGMOoB7!e%vh521vlp_oJa-=HeQ#erbVS0*gGs_ z7cx0sF{{V6s5!RC=JD9M7$5A=BQw!)9Q4!FjItu1nmtEyn%q_4&|XZSPDGYYg2{)p zsf8C2)-S4k)nbQbt_L<`%tqRQX^+{Skzg9k#dk|vH1Qc(Z7T_+I7pv^{kiSJNSzvo za4Jr2J#QjD7ueP0Z8l%88*CG$Ikp#CYw_AzwaHl@?bl#ZuKhCGoq5@$d6&|BaR30P zAQ%7g$SPV>;#y|q;yTyKfB?Htt?@~dQ>8auA=y%MP=3-yt{3NDbrWb0df`?=i)@CN zNN?tuZ-}##Th(X7S=ANSiP^T9aTk`jZTWcY(P@DM*sl1xVK(cInE|fPO9s=M9mmd( zi&=;BKO9JHQDOr~mU#wJDt}0+_7C2*v>y2$&Sswj+$@Rxb-tZxK6qg(XY=rc*vT=LnzUZNM3rScMvqmqIi0RN$g+~{IQ4CkmAd$ zhbIy=;p|*`wAhvf&rf3uMzt|G?x$z&6<2mfJ56Z z&p};|k^JH*(v??qr?c1Le5UuAJ>YdfiYo{5CwxcFni>}0zv17i?r>w!Uob#xyV^KIke$qst^vt-)vkaC{ zwV~7smT|B$Om|SH%RI$7^ZIbzMz~0Pcu>?$Zc;edFtl z%dYyb3eHbb62-Bz%jvZkx2tHBz5Fj_s*7ro#+XY-Pr;PVQ)HZ`^0SOXvZqKaMp}Ug z;&8D^P$0t71UUH%onT*|fB2e0>3HnbGYu{JZp@T6iC1D}ZiDFg%qfxt_9u|+=1%pW z@{j4pQ`f!5Ap*HFR%h&)^eo{JrO^s%6a%T{(DjC=mf*LRm`y*!<}S5)E6mPo=Ab{1 z)opqdaVsp{bJePrbByIRZgefN@2p*qYS$RUe0_6vB2YXLC}T)9w!~Try!#Jk^kx!R zfe&U$-EkAg-pm3|?kOSN&T4+?JlIorFr>Mny&N&6J;r?&JH{Sl=riK&ZvNs)%$R-aJY3t6vt%ib-ocRv5RdR9y^J&|H*R$c?hmf``hF^z%P60sNOIlhv- zcJm9!7#`qMnisz672?j6l3JYY{TK-SPVKibnjIZ#DR}i9<5;#|;A~REw5Fq&;*T!o zrp&+i=U>70fBviuxa-CpZ^(X?9{=mlJfdkp+-RmmN%PCD%&$5%-+s1F8)S->Oj$qE z2ma&Q{-l@IWxzEGO~$>r{A>E@uhK2_Geb}}23nQU{<2;0Ybq~XWw1J2W3+^z>b8Hq z{a^iqhb4$2)2&)>{qOtv>3XFakjgtF#`EF73hICPte(Qa&r4a9+W&eNzx)SNEx5*z z`Ns2n|96ih4Ro^~vJ5Ex?^c!q7hGdQI3p)CYr~W;&5hJg0hIGNxH;d!x&^>Aof_xw zI;B}u4_*Z`(b~@NPO7{D!=)n*iN(Kzt*`mT064o?PCW&BT5fV}5YO_*YUgz6>W0Oq?- zs-~`K2VGL9XPsBi<#Xma*p*b1mZw7VvGQo*{Bx2B;X0ded8kI(G#QLg*tq#uYwd48+ro1m9Oh968W{+dpV)dJw%4@n zE=+k4apQs0u|9f~RkkH0IbS>u{2!;FnN#iCBxvDuLoHlBOg0i&HOQG-Me*3dhL_MW zts68_Po%IkeYZkEVp+~3zWQ*0UMeI3ae^87jbv-qK5X7)n&s{XLXl>x+(Cbu`?ohyUI%VS7E&BV5fHcB zX)G@0WjKY*6Bg#AYNpmtmXk@QhbeSrd%<}g7Z6?3)qje(8C>?YlEG2RAS(i++~*Fhwd3tTTr z`#fmObb)}Wu1N$`kSFEFi^P@1OQGBbtg6-qx5xxaU%JUHNG{zG4=wwY!0?63W93oxcuJg znQ?(TQy{J+zC^A{pB=@HqUkUY2inzMf9SaM2)f+0NkEIf>#bt!bV?Un_l|lN3`3^vekSglD@;h(^8}bB*AoU~9 zNP0f#r`pu)Y8-|zQtJ%cZPwFcS%EuqwW!lLKO$alP4cCqL@8(i=v=%Zv5rzx9s{;S zhf#p;OOyNh0VeH7B6`g2xR;6hMl}YO#>W|E)+SQk)v<1Lz|qIvH@%R0CW+Mw|Y1))N|+vv|$N7<2!&XBmH z_<(%uRMOjLKEjI32C7~3&@5L9xKAR%>Qec`IPQeYr@ZbW%#k~9Q1Nhutj=E&bFuV7|w%CLqHPC2D>EW^IUIIlhT4F5jlid zWd-S~@vTE2G8e`aWnS)rH#u$`XyEw)Q)Eu!PR=4rA*%YN{yW=WZI8uUGCEuG0gj^_ zyj2T&vEg-NxmP720eN57f}IRT-J*o;CJLCy77MW&Q97^AbyeK^T5I*L_NwAq?T3#Lye^NA`|1us-KLI$zfFgLK(gmn)ii7> z5RB5x6gVBLL>{RUslb2p{0WgU26?P47A(9X3Tp%m9g!0@=dBS`EoXz!prT?GFz)ub zGJ60$a-hR5`tgbh%+2C`TH9d?f=U_5nfGj0#3+s8x)}slUn$KyFWH$j0I5ZSe1Ah0 zaHdktvDRiQ_w-^SYhMMmN3$G0^@<7<8ikAYZ5S!Mq6!(-^sMgsQiCYrWn5%V2BsLg zhMZ$>(?jaS0YFs`$2+yD1AX? zkQ2AgH9nh=cQ*$g8~T)E6zOzjT4I?w^&-qDxuzT7C<#BdYJb$#)uoUqFtBj@6&NsM z2Z)-Jl$v3hhPOpjd&GQ{eW@2`KfnqjE_UOU^cTY3Ygp-R4pK83c}V7%UvgiGJ~>)nPo z8D?gv7meJT=adSig?t`nWj`J-&t~JsoR8pkdH2bO^tfN+qi6;4?ixnY_M!9^v*x;&}3Ar-XPO3drhi_!A6zdF;sUbVU!fA!2XmXpm^cG-x~o=}^J zi&w28-(=lfn<7ZDM3fplL<9;MCp`LNw!~nfYs9KvFilPoJTCRQ10e))pS@fEXZRYC zN6%aENbIfd=TM+r`8Kho@XEW#4{)QiT%YvruUG}^0fs*X&-=bcQ`KIR4}n`XyWyRT zPXVuP@odwWJpeShAWC^Bp)otj-HGKRGmXM)-}eLrt)K<;-QvX<(X zLC9Apgw^B)EmLmsI9HM9h#*V~x(y6Q4OAUP!{T`T>*mMhPI+##0a~P@@zyNMCw{A) z@e3Eow#HX{0{ADZKhXYorp#oOFD&&aRR(vpxiyWUVT~jXoLeRP1$`bTm-uWwLUfS- zTyEoVL(G7Q)Og4es2`bURy?XQT!E^pUm@Ng{yioo^+1Nzzg_%Gv1%2X*>V}CjvTf# zQU4`)@>6CAL*9>^--(G0FGn07VHxa8x{H@QZfYK#e|YClSyF|4BHekV&aBvHJo12RpF$H~0Z;+S0i&>myzRGp*etm{kS?s(5;ex)TiemD+VSSXyt`dAVmAF{IX7z(vg=`B>X~usFG1Ui z9v$5rSkGI4T7)oZCn?#Em!yT5Y^)XWb;d}teAvYrAV zV%T9Nu#fBnTT;ehrH`$2sbIVC1PwFfm(#8OnRCknoZA#|bZz;Qc57zudJh)+tba?2 zKK|hgFCw3BgYmYD=bAx4q;HD^N&+9oU}1!J?%_^oi9uC|U5Kt`M&W#?XP%xj(TBvn z>0@ROyG1-kHdC#|G`ulE0}ERxCbQDK!wI}Kb5O@nfdyYOR70Ng#&Om48(%n0Y$Wpb zjB$!s52T_)h~R5_oFITEmHa{Q&B1dNpOx_7Xbazw4{ZnPj3D8im_Vf}y`xQ%yXRel z?bg$cKo}7(2*G9P^jNh~N2uUx3buZziC`As$DTW}P<@np1(yA#ar)&I>H6{77QRNJ z=3v`AZBhhx0>ktIa9+Zfgshuq-$(3-{+|skDU+SCTQH5h5hxjN_ZO5O{%*68Lu}F$ z@1RRXN0l}t`29r2pskwW++0d;+-uxGZIchO`WS`Xmf_|+LYItyC7w)wvWfPatHaSv ziLJ}8Yb;`A+u~wmBN|ownww>nozX>l;zWH4Wz)S>!(11?#2GGa5S)Us`bi~Bqw}<*hu*BJ&~#U zsCy09Qf1c{D~@*pGge#qarXJ*NYc%ILhYt(Fh8@`RI=7>BW6h1{75m!xU1IBVWq>^ zt;^W&(kzBgPoogZzLW|Dm*jRGO@7o-OQn=Em=$3uW~zG z=)Cwtip!gRy{3OkNk>kTu5ZR**4Lk38F2VMoMobGYv{p-E|IC(nTM=~yq>9>*_tnH z`keWZ>#^Y54;J?&JX??Y-?_urX=zv^``>tYEnU-L!%2Xt;R zK6&`O?D6iRF5ND>{FS&`_FT0X#W2y~xI78F#)a_Ny%BDycigZ&%gx!Jng(XM^p|9t z>^pBlS3LfcBDA@AZAa?jGi=$k^`e~3*5)N29l>fhLpKfgrQR_mG0D&kzivx&|e^kwf+z zu0T&of}r}^+bgj_Uf0TcUW?ie|H=+km8C$~2(v`5wGZ-IIR`-^;-cI`I0@%Ez&&)R zWyTA`%6I|!Rh{pGgS!vrK%LE+{U{8u{2Rz8RA;h>^P%?DSmT)h^9=*=Dv#a6q+wp& z0p(N)r1a{3G4=0|_XgOR1W9Y=6=0oQ8s?+TQYF5wJ*b8gZ8wVcXb9GqvfWAt%yzRY z%7^-T9a^(SLrV}%!zUC{G&%aC#`3#m22CCy`kQKKEqGkBDpBLFHn$+$9GBpxKhxgSlwlddv{XK8IE&5;1E`;pLyLr+-7GrJ&&^7+ z;f<&8``0C7=ngs6BcQo`=s1|`9Cgadyjv@6w`m$bz4g`&v`baCy|`CiY3D3gv-D)8PC4bdnOJJ zHw)j-q#3zPJN0~nt4fy*XMsDgWB_t#s~MA70o(&u=u&Esz5(+<154o-Li>6X(?60U zhm6wCd5n?1g;{61ux583ZNZ4cF;fC6;RxEGjSf)3uKG<*R6!uu*!uE41!fhb;PJOU zeH(Uit+&{6r`ot?NP+t!D0anXKfFO_jGywnbQWc5A(Dr*LU+K|To;Dx`t?@rUG3d$ z0MlR9NL0{ZTs3ziCo32(9bSi@H%U1cg^#J(c*&@mb9sfyqN53qt$AR3L?f%lYxQzm zTS3p#M~9O2)!KDc#b%}=e5TdmWyh#z`bQV^pSeXeQ1})a>&EF%609=uz-C#sp%=5a zY@d*&vOoC3_~5wD!nCr2eaL@2Wca6%-K2h)V$|pC1mO_-W6vyD?C;{qI*mDrNm$bj|OC%tN zewfr*?pfg=D8=qn^l~a7qvQ+#D&r2V2KVm5#*yGIsu_l)p9N;?1-}|5!@Of|n`vk2 z;|a;uD?THn0>#2KZ>UtI!Tp5m!I|=Utg-d2KGS*I=<%bnNCGcRF!Al(0>w0 z4=}m3%*N{(VtSzs&VWkB0f94*F&Awe9Ve}YxSeVR_^%$qaA~X8_w=-eC$G7fHNRq8 zO0$xLQl$i(u2dJkSau7%7YsR;kEg-oQ+YXHX_hUEJ^pM3|ntweC zcH(Fl`qzTqA7Sh)wafd?x#{CnlHbKDRJh|=UxPn|W?*zHKE)I-`>X=$-QMWX;xEX#1@e83@0rtVB{2!s;wL=&5amwBz#CuJon; z!;;`_W9p0DG+q|)Y4ie6+|d!=qy;fh#OI#~!9y*>Sj) zzozkzm(-jDFG<8`68LukwEBc4G<^D2OTRacYt93VngicA}bU^(FbDyC;zgzQ?u=FhuiHWA+m7d=Z9UU56K z31b{Xs|y`1F+ne^(a75ijwpk=8_PGLp`s)dLTpD=JX4* zhUkMKNdA-q(;pk)6wkz}U!gj=P5QkyG{%C!U2m0@p_0?uO`a>h0A!*$oTfH_6HvK%pp*N+#M78dtt9Hp@AHK@D5YOv0WtfMMl+b7@dY zZ`k>nx(?AYUh7E|`Y1jM6($;H@gR7q6&45AIj>tJoIynwN6nq`Kf9hA4r^m>28kdval#sJ- zvJ=pXmJiy60*;#QwDeMb9@Zkz-;byrNOX-^VItce<7j^T(KZZfx}DmVs2Ct}S#6un z=)?u^BubJI=W&uqYk86N!I<=o`80n2TDQq~J)ACWX%Dq(m&^G-#};O)1UGy4GCX;( zU^01OyyYRh=izoChe1a+ZFP-lyrt%uRhMKd3ytxXF}G<@){Rm{?EEwcn`}E!t`zfv zoQt5_)hE`oq^PC^uQHzBCG}aM%jSF(D_PBa6j z>HbNAw80}4Ov|RNs@%Z!es&Z$lh(&`HW&xiaR3l7Ykp%pXra4v6+jq zeQ?6b#{84%7cdMt=0b=G67se$R;`-X-7kFExe_qQc6T9Tt2xVWNj0M6rVmi}QhFqSCfExiG$@ z6kw=O<8$DZ?;CLki14|bN!`*K9oln5pXT)Ym|{@R9VnZ=lvfsK@mb)34Q~7G=`+O9e{|D=@pMZ2zHX7RMy%`CNAW6x@!ESd3D7c(ui7iz|Ga55 z4Ky+b7aa4#Tw(qzr>@mP`h1ahxQ*7d?Sr==kUK=LSR8-ElajS+oSjZE9q5$DToN~N zaB%}qf^nvXs#Pb(T7B(^Kq32y)`6Z-aL3}#ZAo9a-021r;O-n73S>*p($pfZFmdS& z%${gYNm$T#Sasn^bFEKqTJHvV_Zk{L^F&R-f6=-gQtH6Y6dS`1NDm~s)Rrvgrj-vi z&~a&2Bheve-+u;WkM4b6_9DgLFq-r6IvIv!X|zI1ovVYOZZ4z!0BZt#7-HvyjVc}> z1y%=rtIJL#?tE^~28kmw$I0D5aBGq9EWgWitZ2@?fUa`1Xzm73dUu$8Q4Jz-x3SFx zwqkTs74dOYMtOaBo>Lqp#&XCRWy`ysHp_Ph#@wH$b-|b6XkhA<*h!5e+1jffT zE5iemWYY1|=tfC?|KZDs(UK;%sqP)72PZeFnn;*2YG}waZpgbr1iQ{8#?16A?#!sy zh{lKx(iCmK_I;yy3^(j;U)3OjbRe9biX7{*@xuKV3pYIEN$GZMm#balwigmboJ|nT$keG*Cx2xzG z-aj7DZiJUJ)0$8JfM2k&9i->&?&b#?zlN(RE9Q*^_sV}qTQ1V|uR!A*nuYip^C{e0 z-Ym$4r0@fO^&Marre08-tkQ>ex8X(v4ZX0}FcK@u@j9`k)RQvdRg*R(DFx50(}um+ z>b<}?6evjIZ3CSIFbEYyR#3Ss{f!m%BT$EIx4|{!2#{Z_T(%d)ux6jsKL7%f^gi$e zP?9$IP~D&cugSaz;kuoW1Ufdw%7%cqW{I*4GmW~I+3WZ@W1)wp*3TB?5^un;tJF}D zVB>8gkE2Egx%svn)~f}gE4L1?xX<~|!`6##FV4xB0Q~SCSU}!ocIf0|D8xorOrLX# zYAIL#dRYQ++OUk+&f1IFU!DkC51dPU%&v z_e{_D!=u>P;z^fg5M=!wC@;T#Gs<+M91pRqS*19m#q-Emd zN1+O-aS=bn{X-rDVv~W&-ecP_TRqUNI;usp&&lHT`i{=YuXV%!VA=T}hVOtZ-o- z-K=n#(>aRf=YCy4|C!r*h?Bs=;e>^=MM?bYX_0}ar#N>(LwhUu@=+rBYoMr|IU0q` zwbK8vem!2q67sOfmMx1;Jr+EE4|n}reg4No@PdmMI|pL*drxh103BG z&bQ|3{b4BU*1A~SvqD=W5-Q_`VC;-8Exzy=r7}*xZ@WJhqdB3&;$SX{L!3jBc}Ob>!JU8pMSfyLMh;BU~|sK zpZ(j9|NrqF%XXMv1UX#=@|2cu)jXIHQ6qjsTh;~cYv7b{cYOuFPNBd2DWC*J!omjH z|9<*^y%^hsVz&ZFq9PD9?&q5brGUY+GqiD*!dkgNeJ+L4%Eyoa#%f*!%@&i9b*>AZ zIB8u9{XDg7y+3%ks9m!?o)oJx&G^={PopT`|7MnE4R3}NhNb;J&#Xxyv5xfkdCFXpNAfk>ylc1zoG%Nd29sHYtng1sMv#W3mBrMQQ*wsAQ2& z_~Ig@Je(cKoW)2YADNinK`sj+jaSA|37G@kl~PDc>W4z1f3!{me)!C=y>f+CKHX`@ z6yJ1lBP8hG1>jAz#>W|@_HaZb$L*`%KOHa^?7UR1zy0`f{S%*+lmx;fN*sjX68P)% z;h;^D6$6aB`Agxn3l?nj`IlG_r?ax?rW?R-Gk(qlbr#2gXWuqwVcg7sMT#t)*b!0^7{UA`SQDcg=mjujrmQYMwB?%p!ETa zBmW6G0#HrI;pDb8BX6`)*sl6mIUknkXE#$avdb`4z<^tsG?JU&d;LAD0TQipTI=N_ z@bwyGl!A5z^1t_7sIli^)t@ohkT(yy%QvtZvX6a+BakW!KsZ^jpp0Pgzj*mUmA(Bz zCi#G9G|8OR`~5s>vV(u~aRo(5*yY1-fOe_&+DJH!FwRBd4jF^iMIhXz*G$Y4;QV~O zE7CvQ60n4=`ou8}UyB(inO|4FP=2a0k5k>gc-aV+jbidwKq>+hwu42D7Aj5DwCtnA zrUND%MYRzbPAn9bRNKoEof|bYnipm;=TxbM--boxF!-gX?Eg_nIR>yjJ$P_d6R`s+L@p3}Y;FNgM3L zN`Oq*(KrOlUdREBp^Spoabb#!K)%|6a$LRUcucwUF!z;> z#qH!392ZesJx~kGFG?A&1c@xMY>OD2_la=0JEuSh0SSssGIt)cHBhpMi-ZEpQ*Gsw z7i>Wh-7nw@ugozH{D5;)FGQHH=fOh|Gyt=!QR5~Phi>fG)6k9AyVixemmAk#do6+^ zKQj#OyJdTH$&wmFf1CAlBYxC}&Q{EEX5bn~mtr(aAfw)mnnUnn2jO*4;up)YoabQ2 zs^5QmC$kzIKK=LagAv@7`zjK`=@9Xx&$0YgD3#zkPlLG$Jj^>H`*rgM$l92}*V$mK zG47l{?!>LpuW+s?mU8GfIJZfq!AZ(8MFn}UgUFyK*A!u0@KqXUCprgF zIcN;_=MQ)psy%&u_iP@~yD!-(61kkj^}z!k2THNtOEct$u1e zvu^)cYcxKD>t1G-$R}?71Otq;G#vJ6rm#1qd(9*R3VI$rm7c9NOwd%DvvR z)2k(|g-vlcI1x|`u{;eM6JpsNvuEo4g)(%TMjgutaX^WgUC7fKZ7ha2gk5nw#D4*r zI_!feHSwGIj0^p^fRM~jS>3pC!{u&SPq&n^>6*O&WXoQkq%QYk4!h_`B(#)fm^H+E zhXN2$0={XQe#Wm#!o6V1#H!|mtUYW{vaDK&jXS`yy9Xp_$>Udi+5^vi z?>+d_!F!;$2&J451-5Gmh!w&G4uo`@$~FZaQ)FP=;FVVWGtM0!cN?|qs^+3?Wb0Ai z!s()sgwvYz2}M#2m!TS$CLUOzf@PPglaI8`d zhIJ*Rxg_prliWXX+NKRG=SmSQ9S)fB8>mY(f*pBAQD z>8+&>CQ4x7tGo4ZCk)6bfhZ9mp<7Bo<%BcJ*~3NDtU`BX9hD267s)!t15VD?IpCiv zsv`fQ!f?Ypcp<;%1*01tKd|+vC)UYJ83!%MIT2O>S}qCXyTYk%BRURcvwD_=MjDSJ ziF@WCngC&dObNN8t2@4eOWCsNeU%M8@X%SWngqa6&n+Lw%Nk<%t<3%_MgNyV*hBBY zQzndvQPp#*+b{e1A&}jL6Ix)kpANqTX#sqMt`EHba(nOUKFyQ`x3+z;kOdw|1XeyF z%@bw$TQ59hcnCoGcf2<=C5pryGE}2QuqO7svT_~LfU(DK!*n&%T5=Ld+}qM{%dTb+ zLKuz4g@NQ{c%T|*-&XML&N5rNal@mg%Mc+-z~5Zg?qbxqx?laK->W3K+2Ka$ErKX7 zKRj^~rHG3_pY_=!a1^IA`PEA+yr#nv)B7ho;;FV}R)O~>%sclagk284<9K{U>XM0n zh;`91Fp@b|`NE9K$fSy6CU7rIWa@*)gZ#ri&|u9$GkH{!)=C}lD_sTs>;8UZ$koiE!BIH z78|02`Nr$EiauKc;w1$#tmcwIHAA0;{)(1SeiT=mMQ5xFGv%9c@0HgHgnS??m!`N9 z63CScXVMxpD?R|K0ra(as+e7h0YLfZfwS(&sByNdafliaDUnGF}Quz^{# zT26l7i2vD%kvc|dw*m9n7H`wulXCXC zSY9|}Es^rHI0#=#F352=&3*0i<8#vOKXynVn0g2rWStEX&^Yhg;kJ0{J{#*0cU#&R zSy}mKc$ya*i5Coskh^*DUhT{wFJ-hy+__z1uCB^n=Rp+LJ7wB*ImmecdK3YQYP-}i$ib*$n;vDcK1QU1vPCPTE^vHua zp%N6`Gjzg|P8}X5-Vn!7L5EI=J5q5ydM43`JuayI@rv%QC@Tp{HA#%*)x3XP0opaYrooJIp~k^V{LChzh|=vxbxnK?Hc+~hXsB^fxS zbljr)0UPLGmim+zUxaPL`chl`K%jDFmWDVrgeJO54iyXMClk=?w``*p%$&3K>_Kf9k zJyRGaa}{$bQA;TDaFY49#$Z?`4K;ZYnQWm=HH+omH^T*Zz(x%c;1wvb zDr(|iw?T)Z4mAxCbIMS)F#hCPp|Ug}Wp;aZ@^}XZDo%!KWCQc`*dCCV7=VD!F+brJ zA5#}yTV$?uOVr59K_)7V)5HsRkaN4k@+jam>jL-Xu3NvgSXyu;<2ydcEcJl*XfAX~@~7bqB>87%f=jQvliGUC>&n zXC?jKJxN8Lg}-~ooHId*0xGQCeNRtqkIS$D+MfZibNir2vjgVCQ=+8UNMDC5@7)P}x^4q0 zDaHxY#_^B8^zSzzRS%zdM61T~@4xbo+F^tQ-h_nv1ody#?dU=xP0_o1#QEeOf9bDP z^Unt|=MFFvi3+#pb7Bw|@K1skz}3rpklASKh#L^I)L@E%Ao;iYNZ|&Hwds9-<|m5j*qyi)6=rk7!a1o{(e> zcI2VI|KjHqJ3LH)H&j-xk?F%lunkwTt7acW?4~b68c? z-+)jLZ}O28dsTVY@0-h``@s33*{k=YF>|DG!d>cPvVSclDL3lF>9^bV7G?(h?TUhT z*Xdh*Jje6b-{641k&G$scC3vR{CP`VC##ycG^BoZ|Ia_%LbZ5O%B{)j$HuPk4j;w56?Pk0Ek;)p!&B< zC2WN6Z%**F{eG!`d?XS-#`0r1k5rQyNlrtCR_)-Q_0!g?n?@g=7qg`N`xA^No6`u1 z_W99PiKHWczEr@4c|+ID8~^i#df-Tn?0LtV&i&&YsnfUH@nfOS8F}zWIFMoH2gT$% ze%cfx4(P)x%vqcMmdHvqkS-@Es8s%ds_Q8Je0CJp^lCp}sFZ{UzgQq)?7%5^8W+cR>=s3dz-(TIx-9Mk*UE#-^ zKVN8MxKt4H2b`Uc;@{rf#yO3y4L`oeMKkilur7(a%hJbBLO;Es42`Nz#eHdTbeCel4+CpWjCFPcB#>w#GdvGuQcy>;Glu=bbUuZ1*dE?FL zdSS1AejxA|h-wQzwvm)R?H@~4zbHM!>&K5V9?k@mQd!jB7 z^VKpK$VA%=V24me7r>}}$U{^%0veK~Kr5$(;Z%Ey<}*|7A~Bsg{^#U6Pd}1oIUzG? zt|(Q#Oz8VckTO9*30?m2mA2XvtL!d+3s*4P9gLP+btC=O#NxXmebB&zjCKp+U>fDK zYxFw;v{Spc&)8%1aBRtFYl~ zQL0$7?Qpea=9>AicK_KwmN{^~V3TxMY`~~w6fh0NCnS^GsEWwBc!=ZEM0H3p^W=rRt+c){> zdE0udm6lda`&`bX%aw51h3G-uC+d0ndD#TnKLZ$0*p`o|yqlFv0i}h?65{&XrK|uf zLl30W!n~EqEv$v3X|zV2?q62{2-0}_*OB9qy!BP>vXMkjMLPv%qFr!eDyqThfKxdC zbO4Mdh`RlZJ>B89-S?eMLfXalbpA}$gqxxEkjoYID8XjUh=wC}PO-ZK(q;hz-Ev5W}ways`>2}I_kAZ+`T+CtcSE}paI$kkdWD-1o6L?=axBl zDGkthgXu-*-XjF5%#|9BPwQKrSzTjTKe1n89mo+o!7V<+Hhr{~QmA#`M0Ss>)y!~a zib8bg9heZpiRONoJUQ^!g>PJb>Av8VF1`l z%GJe|suAiP0o}H3xXfTp>)0#JwSPS|64LcupajzaXto4c*^gt%HsVg{Cve$W+D?FK zWhWZ&JK*LR@Um&S+|lm&&oPvbv|E_=^F>1rujLzO!euo7yl0OoDs&Z#(;o`?F}!4Q z*mux7WBd~@4izxF5D2(L!lyASqyXwek`Giz-bhabM!Eq~4p<~*s)Nb;vFo#jyC3mj zx1VrD^ehCLAwZ%{WaQenck*&Qd4kX3O)V2)hU>FPg5)gk~p&h15GZuku zSk}4e2Y1@X_tds^2LL7^xfOJ+&Wppx*EQoV7wkaI$}0QGDj3(f3v>w={0boO+(lDC zee4l6{HAV$(Z^%M@_KrT5t0%*Kn3V~;#2J1Q;l!B(_@Mp z;|z{hrGOkUA+z32e>5D^0OpRITRscUQ&ly)cOxOAXQeN@#^hdr>*%37uhtIYF}+L) zz*7(@Fg^pv1l{*(pMB{d3(2h9b({5yn@O8dfK_^m(2E3^+19vMelmDet{W_B`e1UJ z?2b6+a6}1tahEp!4?^Xikt%YUym6jcbh+p&;9c91xe_UL4+k0v)CUqAN+j0x$v`t= z9V>*OX-RdPQXgDW$&EkI^+*V5!N8l_*8uvw2SlAbg)G#BEpyQPDxnwkdSuOdVj7u* zB#RCL`z&NG3aJTS;lrjLyUZ<~LUv=X&Z$KdX5zJ)wtOekcs!O`c5c(NR2h0&qVA-N z>4nx-^Pzp*o7T(k&A?zyp8Pw&OfvMn-l8PZcjuet1rgz$rIK7oR6}A$W{{!6H2}<7 z!VfvD0JC}rP(RJmr(s_5_OAz}O#=9@ez@2&_vl%Y!%@3RF{EPOiWDwcu~j&|wVO(C zqt2AGWoEHEK=mgZ-tO1h*9M{1+&3ZXQBIK>S^JNid0!nVX%}e17dpFR59tO4}gDZpwWHd~BZS8q?y6db9^PDKUGnI0B=O4cs!ig@}qd!gBb5AdFO zfH9@tySpeCyJ3g;8&2-4;t(~hqFF-#)+mL@spcn~!lTA8W?7~$R9-JJkgt;C0xa9ol77mm>O!TK6T=sryLGmf4|2jIZV&(1 z%;`-}zmk+${XG)559D>M6MNQ~i$HWUJcZ3$523>ZI`s#awXUPadBO!J3%AVpokHIa zMFx+#r8kdOH!jL?5u62z0w@NAQKYl_^vIQDm(uwZ zrPiT=pgTBdZ_U#!YrFBz40Uli_S^%7*Wo>Ojmkk>Gbv341y=m${@ONDk)_{q4)Ggw zUyJyxlxX)WR)(}3N6>F6z$d{q!HF$eWoEaobcyDbF(edy^|H=5mI%QF=!HOet9S!3 zMx!YOR&N5M!FPhi)17A{c34Dw<=4!!%4`9~%f+~}&KDo=@N&eSMa0%OAiRpvOpu(0 zfJ+r~w}yuheIExXo6pWcpn!#UDi2&{I1@lOexc(8lH4S)Ecd`}?ldU0kjY(~Q+mYz z-3tI=*NEY0sd6ebJj)(Aw43{u$RDkt?!SN2=m?D9Yktv&twcT;EHI@p-n@cN49P@f ztHmmSaY<(kpuYWV`L?ebYG1V|>3R1dCM>IBsZRbLASD_se(6)IJfqhWf6MAe@i6D) zF~^YIW-|Q$u=n2aRR4ef_#s+CTanQ~WMzhomdKWwootdFC#xkQMYfQT>@DLMm6e(8 z2xV_&os7fp@scCGKcDORT-SfU@Avlor`ze^^?J_7yg%-bDO3#^lG<9a`>~sWz$45#}RbKtOOS5p4Ga#-@6|I8OJLWqb{eU9z0|@*B7b9Yr zIaqFmA=Cj?c)vw!w;tY%tMo2*>ZWmlO&^8lG;Xbvfpx%9O{%ANJ32S6yH)^_Mh28L za3RpCj3y;#UVB3OP(nIIrB<_oyhGdGr_Al_POie10zzoL+DM9+WLCnxYSw#4TNo{D zq&`#ys~A?Wxc4iUjy4@=7Z3^FG-5qgnV*XmwuvS!#9nqJK~*TOg0?AsTvtUS!q8tg#ECu>J7XmhKzIC6w@ zpf#sLJ{vrMjE*!9PTbbbe7OJ{+{QE{54c_B9Vtuwi5XzEV7$K5xVg{dzO{0h-Kf`icw`OprmwXI z#<+IZ_yN1OGOz*h^S+$>S4-BW*T}467r;1YK8j~}B{2#Wywc&K-(h*E_&f9-%>5Y1 z8lhrnj+Z3^0H|ZDV4s9>>IL~ZswS}Zzt^|$q3?Yeht^GzE6Cgb?Fm34cEoNGhI2ApE~o0z*0SBuA}QrD8jv=JP206v;|L$ z&ct$s=p6@^b^URqSGNKe(ixZg%37DF9g|gQ*kDNrSSbX-k~i1d%73w+P$6<>Q9gY9 z>0vh!TYz;LIWl{w)Sv+$Fz`&=KUe@Q;@r2S%7@*= zY>1camyEia)etR0{v6j76DstHzT*=;c7PqB3qfGB+=fa$tInoQV)3j?q>>R>7P+4< zwQq`LI*=?+tU8a2e9@JheqllTxkxv2Ub4MVsnW;~kDypaLz`{mqf(4swEfvoDE8ra zE}9gKuYJ{aay&HUde$_JdCg)ur|UjMT;Bnk$+Q2NaH`V1d%YpI+v#jUls|^HO3Y52 zU}D~Z1y_0Y^vusnqi~B%DU};vtI(W+8}OfORx3F0MX1sup|)HeRaSE?mFijvW51e% z`hgn(AB8Z&q6bd!5xLLD4&M*Od9FXkVUd^Sc(908nz~0;Wj54u~4PhVa02CFC z5qn}0lIA=Qh6s5>Yft^c?fAL)nxN*MvzAl?nPR9v1cwt+jR;g*P^pAMAQcT$N?Vs3p#E2QiY z0}Sn6`j<59S6(`n676`1FbsV$#df#%)V&0s^gdRYDLjw4?P-F+gx#lLq0T`lw%YYJ z!sc2Cx8XH@L76aKmRd-^BjdR`)}+%D`M%f`B1KwgI zpE<6Spa3=^eR0D0RxqH=*+0=AwFjZHdePbM*0|~r-aqAPK~JC%KY9W|&&UCl>fFof zVK8iaj6V4$?%6c&Kn{;&BLdiH?M)TV*A%VvydKajy|S;M;m&vHZXxwlTC`vJgZ1w3 zMR5x&XXSq{87>+KuTr0FtPliQVjGN+1=9Zl5Z3-}Q;;|nHf*As0ID*2Xp0y01F*h3c_`M!Q+Y7j0UYUR{<(6ZzWU*N1^BVf^NHW#fQNwW8)y~&h5=6#-`H&PpN z^o>K0v>n`Zv=Pk8a{-KyjHJ8_ZCxl#MA>8tbb&O^}&Z&LkP1-ODxdvnkX2y zBb>WK8YNj!U-#xB0#W>4G+Un(!KuB7;J*73$U6-|8|((0xh?;@ck`gevfGVK6Jxp~ z-a*s=uqnaj2vXq}NcxVtluV&GB;t0SYgv@_ zwg8-+7prNg(gZW491!{20XSL6!Y$@Mm7Ro}%A#Z(7A1N|06hVZpr3-l@l$sG{6z@K z)Ey2S7&mcpqWlH!%1#7A;aT5x+BVYosDPe)%h|M)oZ;?`avrU4tD`M@^FUbB!2Y=pw8p0WzlI95V2m!K(4{1X^*YRSXDg@S;;Wl4& z((hK*BLpJK2Inp?n@}1YIQd=)fG0@Y;2fxn#F@4v1C{s)U&H{Ix5{)0iZGkMtE4v8 zF_Gc4NGOxQ-9>Lrk9kDys~X?Iiyp$_d~*!rmd&po)q=W^4{EvGP{1&UKEiVK8by5Q22$laNyf zTCoqn+mggs(&0^6l=B=+m1DFqZ)%``fW`qBZW2HCJ+ZPL$g5|o3kt?%T09`<-w7}k zU1Pa$w2X7Jp<`QtAucdON11k3C%QHFZI6koDS+;g>Kxz-5|ad@2(czVfNa+Y%msvr zCr|ykH~wu0+VgCSCizJAB9KyZQrDK%=fMy!htu&|Sw`YI44tque! z66Zi(0)(GmCX_plwHHC=tLnPUU%Sy$^#E{u;;Q5`*m)OjP3nY_e7u#WZAfvPjHsZS!p z)e*Rgldd%^mrK_=f);y(giG~--!I{FRJSCjTo^wvQ9On_#NVBK@36Mcq*K4wj6_6| z^0%jf=dRcsD_B|XU32|4y|y|%k;*^rG+3!idL>C!V`i))l(QNN%OjUJ!R$`1vq4b1xv=lq%LX=w(|Cn?CCKZzRhtz88Gl;^oj z$4P%2@cAp!lM9dCX~~@?^-$9_;0kh5|buPJN^*S($HuP)(z9qu|B;_^zK>hXt0; zL_zd`!vaE|h$hqr;uR?hG+1LF=G%4Yk%*|pS^Yp2)m=Z!FH8b4iS?6dtWc$G1 zD%%G;C@I!(ZfjHs%I(%z;>439^Y>3?+1K;-^^^kC=V0bJHEaDqjk^7lTKnn_|Q0DEL9*g6|F!dEacox^J)h6 zXV*`vi%!x!lQl`wIvOxX395;yaZOFiu1!^dzslg^U^yh1SEvkpP{{(A+gbJvkaDmH zohPnuD)^+hbdy03K(bp_tL{kKtaQn?x|c781fixTAlP&?chj?k>3LIu6J9fx7C+pO zo2;mfMfa*}>LBb7w*hwNg0KT-wpuu1dMLxZr`AAd!F!P$PT>!3!WHI50()Yfy@QI zZsHh1lD5aGnZc0Kr}<1bcx|1r3Y_2A>JDzhQHZVl_yNI4L0Pk3oe4!#Q=HjKZd}u( zN|)ZdO(zcryY2{MIXUFDhS&3A3^L&_ytlbSBs=Yt7+h32-;`i!*FENAqr$Jj&JsHY zu_aR*bl`2QQu*<)JBI+Hw$k*lR4Dly|TbIgN*oqKMkVW9{=JB)kbm%=}=8;7?9WoS)Oi)O$sZ=m5<)<=js{V@Ah-QTYkVR zA%X5-Tt0$HMsjpkYW}KrPNQCZWU){=o9TO@pk%=oj4-mbS+TWdqtBh#d!q}!0zF3% z;4_$TDq(MZXm}!p@i$}VpG0ZDt2yp@Y(J2~ds$c?Pcu*n{N775KQ=QPwRRpFtEX5} zc;PgUSp!cWl|>e3cw=|F0Gi_ua~u8=oZrdMS+;6%-V`XG`B1R4&p`@hT-6fcSA;%! zJCW)`l}HE}oV||Ow+!6~UXaYh1(|vv2OK|YJaO_<@x?ccZSzR(0114BrxY%er8Lpk zqCJ$U7_;8=%qL)OhhAb$LY&kmVq-TDhuKt>5HLk7Y8{Zs7@t)$$92(=cnCUz);yi2 zHF#xElG2ljkg{x}I2YaRsQB|&%uQH0yw&T!mpSbY57%%e?Ej{5tIEr@G(Ck z{9QwcWCmI$#*zuI@t`H*Q7ZPjeRzb`%P#A?@nptX+oeaoxH{NfDx{e#(lGHcLio3b zRw!HF$w^qd_xvH#&GScl2&8fIaO*R=-myh`2>Ja0yVCRA?q$I4?hCqM_Kpi`QsmT@ zp$do6+U{`&mCqZFPs58b5)Yo9l=-Ar1=^P99#A}fN9aM777$I2c*GQ~8g8%u1_?CY zCw9S(?H0)$*Jvwd?r`t3!RlIbOuS??3p}~Ogb(k;0E~mbt-V#t32ZY5) z+QMK`(jQdKI>^XwZQjWPk;|b|`MIwVhR6_T#$gshP8-QG@)?!&6Q`Xw6y2 zGVn|c-R2@9ANB$Sse8xfS6gs2V{a{=UN=WtT99j&K-a~G;Nhj{M^4nwNr%bKUgS&C zCq!4op=(c*v06h?ip`Z4LMZvSZxI7vk>!627Qts*(%<`W0b#tP$z4S}Qn(f-AhjB856L^?yKaHV66Fhek2drj8iyJ}-d%HK0@F^9mq1npH1!h7Ec}&~i(b#CAUT z{Of~JgVpA6H^=kuK6uP*J}<}(-x{swffQm)0HQn)+#=I>E&#B5B1iz>=S{wJaxL!B zdg%iMq+|p>f~!Qs0q^~sduU5GdCR3FL?Q@EW$7&dSyr98bHe_p^)2q)Uo-u^qR#p7 z7doy)Dq9Qz;GQ{w0EJZc{A2lV$OF=7KGlnQ6O49{89AFQ?oSJ!UE54zz^KGW5s;X) zRncz3(AGySUIQS%+=)2FvxND05R`@P6H|m!D^LjUuE1J7rZsv4nc~=3FwgiwP4YPa6~m1ni7r>o+}Q1E&{V-`$o+A z7c%mHxeBP#zSKAVTVJM7fIvi=XwnF?{r$?uOn}OOKVa#JYWK>$k8!%mBJ_Zoj;NBY?+xANY;hvTj$D+PclBwUK2U^;ILx_V+7IGypFb zgyCh~#0Mz2{|1eby?6KCdaT5gb^_GV;?TDFt>2pAic*k6C59h7lx{HtR zg2U9qr+AXEydHfUhv}=m^8T$8zD9*W&z$>J{=T9&RN*`ua{792o|}UVzhx~kNA!uU zJK4yJoM+8)agnXxibu}_ZcuYNEMXtvZQ|A&hiOWP)obg7? zJDC|QQNH=y-FtuUBoURuzRk6T4!_^8o$kaa8eK{B)?Zi1Mea~$*VM}9 zZzCTX3y^7}EnEKFq45pG=hFQ3t@$z%sHTA{P{WY0ldwtaE0rCAoImaThyF;C4df!J zj^vfi6M;w)3uNUD^ST$e4op1S9+4zCY{F5(bH&@&=b?boYY$H(A)HFWPYL_;FFOKZ z3!sLLr?YwqX7osn*fB@a5mcKp0Ip@Q%7- zIh(rB1i_jjAZuXX`E?O1y=8D7nFvNYsM}$9^S6;5_h>r=H^1BbjnU?YXjA<@vh8V6 zz`^xLPBe0_-$j$GvR;16z(D>X zx2B+7qHgoK1suOGZmO;r_P+nJq;=t3PDzD)@_0tyE~ zO&7Z2Uv9m(9zpARgnK9J7SIYzjvdh>Ho=!4ZLZ_)4Zykwm6GD-xZuNSP2>`FS~_mx z^Vf%Bq78ba4a0A?sYe>^f2%SF{1VGLI~w89>?e^)817YmxOIa`Zpgtp4sv+y-dx9n z8xUS%&e#~jA0tEgKTi@s;lTX(+rI=swhtoCf-WfR+q%JfO#~5rTzHCgQ(h}XZ|LKq z=iZwVYU{E3YZZU5lgBC}ppxCRtx_1b?*3ng=C5mj@(?`%f8nPkS-17k;+@F7t+`z| zyVY|5g^O5kQ#pz}gt2?1B5-Z<-QWKIaqTe04}s5$trln)O)H@S`~X6P9*?yHDy+vq zdd#*5kR1qjnk;Se>1G1AT!9Akxp;%LaR9XHmQ`SQ2tt2l*WM9bVj$Jp1qo?sY7BH{ zdCVB39^*!oEor{)C?d>92>587#84>-;nGUZ9|~hvy3|T|*orh1mAu;Ak>5onlaM%u zh8VZ*g4-y3k24vNefogsnf_soA9RNRg~-aJm78=};Rd#jw{>o=!Z*|k^hEqK)0d-w zMY22xVdpWUqX-reGJV~6j7udzz-as2vgL!1JVB`J-iB|6x&f)r_#FBp{PgK**%e+j z2b@Ko5S?c{zw+bbIv+7Y#&{+<{o=17fs&(#AtlLlZG=_>p(DKmu*p-CwF}zo;ZVRu zK7>fe`*-wOc=**_K(_1ZNh1PSJ5S)Ch?%m!(#kna@^goFhCB|TOIzpC*zd-c3yg^m zAr&C->07!{5JC-#&=q_KPiIf_TX}hkP~gl7u;GXJR5~CE`LD~Q)z2cGEP!+9P1EB? zhi{xdn|z8_eblt%SMOdVRvRk;VR_Au%bW|2{Wu6=NA3iwADOsA2-T801Y!NBD-pgI zskFQ%?Owl_F}1Xw?ia4}t!rXvN4mSMA!2t{9{ddd?BC@5dB2i|W>wHB15=;VvI#Ow zhSEDbm8ya!q+>IcADYD}XA6!|;y?BuERj`>$VUAe1;h zW&(l@d#nZ;q?6F7Z|V9Uxr<2@pYXbv(m3fUrT0N(SG@h z=B;Z!P94|EYe>~a2hc+o-d?f@Onu~3Q{2-CsO(;dNj9C_w+e`^nj5z{O}YzmA^__V zbHSjM4@tky0L{i?;aiWF5V?vHqvuoHRdR~ReaWC6@v##-kJe~rn|yyI4@hR~3LA9A z{PIWW6_Oid<6Pl$l-sl^wu%*U0kQg|8{O8F6-u>g9(Cs_r)$V1wb5nH)2X|mjNbx1 z@R#K;Pcdxm+2hNm?Sq46V&jAk=pJEA3f1G