From 04b9df930f8c51b93bf5f7ad5fb151397a2debbd Mon Sep 17 00:00:00 2001 From: Simon Hellmayr Date: Mon, 7 Sep 2026 15:52:41 +0200 Subject: [PATCH] feat(flowchart-maker): Add flowchart-maker skill Add a skill that draws flat-editorial flowchart illustrations for engineering blog posts. It bundles the design tokens and markup primitives of the style, plus scripts/flowfig.py, which renders a Mermaid flowchart subset into that markup and exports PNG through headless Chrome. The Rubik latin subset ships under assets/fonts with its OFL license so output needs no network. Register the skill in the README table, .claude/settings.json and the claude-settings-audit allowlist. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01XQqb2CLHz4F89Utoqrq5QM --- .claude/settings.json | 1 + README.md | 1 + skills/claude-settings-audit/SKILL.md | 1 + skills/flowchart-maker/SKILL.md | 178 ++++ skills/flowchart-maker/SPEC.md | 80 ++ skills/flowchart-maker/assets/fonts/OFL.txt | 93 ++ .../assets/fonts/rubik-latin.woff2 | Bin 0 -> 35324 bytes .../references/examples/01-request-path.mmd | 7 + .../references/examples/01-request-path.png | Bin 0 -> 70266 bytes .../references/examples/02-retry-loop.mmd | 7 + .../references/examples/02-retry-loop.png | Bin 0 -> 66158 bytes .../references/examples/03-grouped.mmd | 8 + .../references/examples/03-grouped.png | Bin 0 -> 81072 bytes skills/flowchart-maker/scripts/flowfig.py | 953 ++++++++++++++++++ 14 files changed, 1329 insertions(+) create mode 100644 skills/flowchart-maker/SKILL.md create mode 100644 skills/flowchart-maker/SPEC.md create mode 100644 skills/flowchart-maker/assets/fonts/OFL.txt create mode 100644 skills/flowchart-maker/assets/fonts/rubik-latin.woff2 create mode 100644 skills/flowchart-maker/references/examples/01-request-path.mmd create mode 100644 skills/flowchart-maker/references/examples/01-request-path.png create mode 100644 skills/flowchart-maker/references/examples/02-retry-loop.mmd create mode 100644 skills/flowchart-maker/references/examples/02-retry-loop.png create mode 100644 skills/flowchart-maker/references/examples/03-grouped.mmd create mode 100644 skills/flowchart-maker/references/examples/03-grouped.png create mode 100644 skills/flowchart-maker/scripts/flowfig.py diff --git a/.claude/settings.json b/.claude/settings.json index 6d7fbf4..48a5211 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -51,6 +51,7 @@ "Skill(sentry-skills:doc-coauthoring)", "Skill(sentry-skills:document-api-endpoint)", "Skill(sentry-skills:find-bugs)", + "Skill(sentry-skills:flowchart-maker)", "Skill(sentry-skills:gh-review-requests)", "Skill(sentry-skills:gha-security-review)", "Skill(sentry-skills:iterate-pr)", diff --git a/README.md b/README.md index 0b17434..59364da 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ Works with Claude Code, Cursor, Cline, GitHub Copilot, and other compatible agen | [doc-coauthoring](skills/doc-coauthoring/SKILL.md) | Guide users through a structured workflow for co-authoring documentation. | | [document-api-endpoint](skills/document-api-endpoint/SKILL.md) | Document and type a Sentry API endpoint with drf-spectacular OpenAPI schema — write/fix `@extend_schema`, specify response TypedDicts, type parameters, fix type drift, and promote to PUBLIC. | | [find-bugs](skills/find-bugs/SKILL.md) | Find bugs, security vulnerabilities, and code quality issues in local branch changes. | +| [flowchart-maker](skills/flowchart-maker/SKILL.md) | Draw flat-editorial flowchart illustrations for engineering blog posts from a Mermaid spec, with a bundled renderer that outputs HTML and PNG. | | [gh-review-requests](skills/gh-review-requests/SKILL.md) | Fetch unread GitHub notifications for open PRs where review is requested from a specified team or opened by a team member. | | [gha-security-review](skills/gha-security-review/SKILL.md) | GitHub Actions security review for workflow exploitation vulnerabilities. | | [iterate-pr](skills/iterate-pr/SKILL.md) | Iterate on a PR until CI passes and actionable review feedback is addressed. | diff --git a/skills/claude-settings-audit/SKILL.md b/skills/claude-settings-audit/SKILL.md index 7c5644f..141eed2 100644 --- a/skills/claude-settings-audit/SKILL.md +++ b/skills/claude-settings-audit/SKILL.md @@ -155,6 +155,7 @@ If this is a Sentry project (or sentry-skills plugin is installed), include: "Skill(sentry-skills:doc-coauthoring)", "Skill(sentry-skills:document-api-endpoint)", "Skill(sentry-skills:find-bugs)", + "Skill(sentry-skills:flowchart-maker)", "Skill(sentry-skills:gh-review-requests)", "Skill(sentry-skills:gha-security-review)", "Skill(sentry-skills:iterate-pr)", diff --git a/skills/flowchart-maker/SKILL.md b/skills/flowchart-maker/SKILL.md new file mode 100644 index 0000000..a884902 --- /dev/null +++ b/skills/flowchart-maker/SKILL.md @@ -0,0 +1,178 @@ +--- +name: flowchart-maker +description: Use this skill to draw flow-chart illustrations for engineering blog posts — system diagrams, request paths, retry loops, swimlanes. Contains the full token set, node/edge markup primitives, and composition rules for a flat-editorial, line-drawn figure style. Output is plain HTML/CSS (no libraries), exportable to PNG or SVG. Includes `flowfig.py`, which renders a Mermaid flowchart spec into this style. +user-invocable: true +--- + +# Flow figures + +A line-drawn, flat-editorial illustration system for explaining how a system works to other engineers. Figures are built from a fixed vocabulary — five node types, four edge types, three marks — laid out on CSS grid. Nothing is hand-drawn; nothing is bespoke. + +## Generator: `flowfig.py` + +Prefer the generator over hand-written markup. Write a Mermaid flowchart to a `.mmd` file, then run the bundled script from the repository root: + +```bash +uv run ${CLAUDE_SKILL_ROOT}/scripts/flowfig.py figure.mmd # writes figure.html +uv run ${CLAUDE_SKILL_ROOT}/scripts/flowfig.py figure.mmd --png figure.png --scale 2 +``` + +- Requires the `uv` CLI (https://docs.astral.sh/uv/getting-started/installation/). The script has no dependencies beyond the Python standard library, so `python3` works too. +- `--png` needs Google Chrome or Chromium on the machine and takes a few seconds per figure. Without a browser, deliver the HTML and tell the user to screenshot the plate at 2x. +- The script prints the output path on success and rule violations on stderr. A parse error names the offending statement; fix the spec and rerun. +- Rubik is embedded from `assets/fonts/rubik-latin.woff2` (SIL Open Font License, see `assets/fonts/OFL.txt`), so the output needs no network. +- Example specs with rendered PNGs live in `references/examples/`. Open one when unsure how a pattern should look. + +Supported Mermaid subset: + +``` +%% note: An annotation rendered inside the plate. +%% steps: queue, send, ok numbered badges in reading order +%% width: 1200 max plate width in px +graph LR or: flowchart TD + queue[(Queue)] --> send[Send webhook
POST · 10s timeout]:::focus + send --> ok{2xx?} + ok -- yes --> done((Delivered)) + ok -- no --> retry[Backoff
attempt < 5]:::warn + retry -.->|requeue| queue + retry --x dead([Dead letter]):::fail + subgraph ingest [Ingest tier] dashed group boundary, may nest + a --> b + end +``` + +- Shapes: `[process]`, `([terminal])`, `((filled end state))`, `[(store)]`, `{decision}`. +- Text after `
` becomes the mono sub-label. +- Edges: `-->` solid, `-.->` dashed, `--x` failure (pink). An edge into a `fail` node is pink too. +- Labels: `-->|label|` or `-- label -->`. A bracketed label `-->|[40 ms]|` renders as a yellow measurement chip. +- Tones: `:::focus`, `:::warn`, `:::fail`, or `class a,b focus`. +- Layout hints: `:::below` forces a node under its parent, `:::beside` forces it to the next column. By default a non-primary successor with no outgoing edges drops below its parent; everything else goes right. +- Figures carry no title, number, legend, or caption. The host page supplies those. Put what the reader must know into node labels and the optional `%% note:`. +- The tool warns on stderr when a figure breaks a rule: more than nine nodes, more than three accented nodes, an upward failure edge, or overlapping edges. + +Edit the generated HTML only for one-off tweaks. Change the spec for anything structural. + +## Tokens + +```css +:root { + /* ink & paper */ + --ink: #2B2233; /* strokes, node titles */ + --muted: #80708F; /* mono labels, lane names */ + --body: #4D4158; /* captions, annot */ + --rule: #E0DCE5; /* hairlines, grid overlay */ + --wash: #F5F3F7; /* swimlane bands */ + --paper: #FAF9FB; /* page */ + --plate: #FFFFFF; /* figure background, node fill */ + + /* signal — use sparingly */ + --accent: #6C5FC7; /* the node the paragraph is about */ + --accent-ink: #4D3FA3; /* mono label on accent fill */ + --accent-fill:#EFEBFA; + --accent-line:#C6BEEB; /* dashed boundaries */ + --warn: #FFC227; /* attention — the slow or costly step */ + --warn-ink: #7A5200; + --warn-fill: #FFF4D4; + --warn-line: #F5DFA3; + --fail: #FF45A8; /* failure paths only */ + --fail-ink: #B01B70; + --fail-fill: #FFEBF5; + + /* geometry */ + --stroke: 2.5px; /* node + edge strokes */ + --stroke-plate: 3px; + --r-node: 10px; + --r-plate: 18px; + --shadow-node: 4px 4px 0; /* hard offset, no blur — colour = ink, or the node's own accent */ + --shadow-plate: 8px 8px 0; + --unit: 8px; /* all spacing is a multiple */ +} +``` + +Fonts: **Rubik** (500/600/700) for titles, captions, node labels. **Monaco** (`Monaco, Menlo, 'Ubuntu Mono', monospace` — no webfont) for every small label — always uppercase, `letter-spacing: .08em–.12em`, 11px. + +Type scale: node title 17/700 · secondary node title 16/700 · caption 16/500 · annotation 15/500 · mono label 12/500 caps (700 for eyebrows). + +## Primitives + +Copy these verbatim. All values are literal — do not round them. + +**Process node** (the default) +```html +
+
Relay
+
auth · rate limit
+
+``` + +**Focus node** — same, but `border:2.5px solid #2B2233; background:#EFEBFA; box-shadow:4px 4px 0 #6C5FC7;` and the sub-label in `#4D3FA3`. Max two per figure. + +**Attention node** — same, but `border:2.5px solid #2B2233; background:#FFF4D4; box-shadow:4px 4px 0 #FFC227;` and the sub-label in `#7A5200`. Marks the slow, costly, or noisy step — never an error. + +**Failure node** — same, but `border:2.5px solid #2B2233; background:#FFEBF5; box-shadow:4px 4px 0 #FF45A8;` and the sub-label in `#B01B70`. + +**Terminal** — `padding:13px 24px; border:2.5px solid #2B2233; border-radius:999px; box-shadow:4px 4px 0 #2B2233;`. Filled (`background:#2B2233; color:#FFFFFF;`) for the end state. + +**Decision** — a rotated square with counter-rotated text: +```html +
+
2xx?
+
+``` +Wrap it in a fixed-height flex cell (~154px) so the rotation doesn't disturb the grid. + +**Store** — `padding:19px 21px; border:2.5px solid #2B2233; border-radius:50%/18px;` (the cylinder). + +**Edge, horizontal** — a flex row: line + CSS-triangle head. +```html +
+
+
+
+``` + +**Edge, vertical** — flex column: `
` + head `border-top:12px solid #2B2233; border-left:8px solid transparent; border-right:8px solid transparent;`. Flip the head's border side to point up. + +**Edge variants** — dashed for async/deferred/conditional (`border-top:3px dashed` horizontally, `border-left:3px dashed` vertically); `#FF45A8` for failure; labelled = stack an 11px mono caps label above the line in the same cell. + +**Marks** — step badge: `width:30px;height:30px;border-radius:999px;background:#6C5FC7;color:#FFFFFF;border:2.5px solid #2B2233;font:700 13px/25px Monaco,Menlo,'Ubuntu Mono',monospace;text-align:center;`. Annotation: a 3px accent vertical rule + 15px body sentence. Measurement chip: `padding:3px 7px;border-radius:3px;background:#FFC227;font:500 10px/1.3 Monaco,monospace;letter-spacing:.05em;color:#2B2233;` — stack it above an edge to label latency or volume. Group boundary: `border:2.5px dashed #C6BEEB;border-radius:14px;`. + +**Figure plate** — `background:#FFFFFF;border:3px solid #2B2233;border-radius:18px;box-shadow:8px 8px 0 #2B2233;padding:46px 38px;`. No caption, figure number, or legend below the plate. The page that embeds the figure supplies those. + +## Layout method + +Never absolutely position edges. Use one CSS grid per figure with **alternating node and edge columns**, named `grid-template-areas`, and `align-items:center`: + +```css +grid-template-columns: minmax(146px,1fr) 76px minmax(146px,1fr) 76px minmax(146px,1fr); +grid-template-rows: auto 60px auto; +grid-template-areas: + 'sdk e1 relay e2 queue' + '. . v1 . .' + '. . reject . .'; +``` + +Edge cells are 68–76px wide / 58–62px tall (the 12px arrowheads need the room). L-shaped return edges are two orthogonal segments in adjacent cells (a half-width horizontal stub in the node's own column, then a vertical segment in the row above). Swimlane bands are full-row divs placed with explicit `grid-column:1/-1; grid-row:N;` **before** the node cells in source order, with `margin:-14px 0` to bleed past the nodes. + +## Three patterns + +1. **Linear path with branches** — one left-to-right spine, exceptions dropped below. The default; use for "what happens to a request". +2. **Decision with a loop back** — one diamond, one dashed orthogonal return edge. Use for retries, polling, reconciliation. +3. **Swimlanes with numbered steps** — lanes for tiers, badges for reading order. Use when the point is which tier owns which step. (Not yet supported by the generator; hand-write the lane bands.) + +## Rules + +- One idea per figure. Two sentences to describe it means two figures. +- No titles, numbers, legends, or captions inside the figure. Labels on nodes and edges must stand on their own. +- Nine nodes, hard cap. Past nine, split it or collapse a group into one node with a dashed boundary. +- Accent is scarce — blurple marks only the node(s) the surrounding paragraph is about; yellow marks the one that costs time; pink is exceptions only. Never more than three accented nodes in one figure. +- Orthogonal edges only. No diagonals, no curves, no crossings. +- Edge labels are mono, caps, two or three words. Sentences go in the caption or annotation. +- Flow reads left, then down. Never route a failure upward. +- Every node and plate carries a hard offset shadow, never a blurred one. Node shadows are 4px ink — or the node's own accent when it is a focus/attention/exception node. Plates are 8px ink. +- Light mode only — this system has no dark variant. Don't invent one; ask. +- Never hand-draw SVG illustration. Every shape here is a bordered div, a CSS triangle, or a rotated square. + +## Export + +Figures are plain HTML/CSS, so screenshot the plate element at 2–3× for PNG, leaving room for the 8px offset shadow (transparent-safe: the plate is opaque white). `flowfig.py --png` does this through headless Chrome. For SVG, redraw the same geometry as ``/``/`` at the same literal values — the 2.5px stroke, 10px radius and hard offset shadow carry the style. Target 1200–1600px wide for full-width in-post figures. diff --git a/skills/flowchart-maker/SPEC.md b/skills/flowchart-maker/SPEC.md new file mode 100644 index 0000000..a94e721 --- /dev/null +++ b/skills/flowchart-maker/SPEC.md @@ -0,0 +1,80 @@ +# Flowchart Maker Specification + +## Intent + +Produce flow-chart illustrations for engineering blog posts in one fixed visual style: flat-editorial, line-drawn, built from five node types, four edge types and three marks on a CSS grid. The style is encoded twice so it cannot drift: as literal markup primitives in `SKILL.md` for hand-written figures, and as `scripts/flowfig.py`, which renders a Mermaid flowchart subset into the same markup and exports PNG through headless Chrome. + +## Scope + +In scope: +- System diagrams, request paths, retry loops, grouped tiers, and top-down decision flows with nine nodes or fewer. +- The design tokens, node and edge primitives, layout method and composition rules of the style. +- A deterministic renderer for a Mermaid flowchart subset, with HTML and PNG output. + +Out of scope: +- Sequence, class, state, ER or Gantt diagrams. Use `mermaid-layout` for those. +- Charts and data visualizations. +- A dark variant. The style is light mode only. +- Swimlane bands. The generator does not draw them; hand-write the lane markup from `SKILL.md`. + +## Users And Trigger Context + +- Primary users: engineers and agents illustrating how a system works in a blog post, design doc or internal explainer. +- Common user requests: "draw a figure of the request path", "make an illustration of the retry loop", "render this flowchart in the blog style", "turn this Mermaid graph into a figure", "export the diagram as PNG". +- Should not trigger for: plain Mermaid source meant for a markdown renderer, sequence or class diagrams, charts, slides, UI mockups. + +## Runtime Contract + +- Required first actions: write the figure as a Mermaid flowchart spec, then run `scripts/flowfig.py` on it. Fall back to hand-written primitives only for what the generator cannot draw. +- Required outputs: an HTML file with the plate, and a PNG when the user wants an image. Report the output paths. +- Non-negotiable constraints: + - Nine nodes at most, three accented nodes at most, orthogonal edges, hard offset shadows, light mode only. + - No figure title, number, legend or caption inside the figure. The host page supplies those. + - Plain-language labels when the audience is outside the team. Internal names go in the prose, not the figure. + - Never hand-draw SVG shapes. +- Expected bundled files loaded at runtime: `SKILL.md`. The script runs from `scripts/`. `references/examples/` is opened only when a pattern needs a visual reference. + +## Source And Evidence Model + +Authoritative sources: +- `SKILL.md` token set and primitives, originally produced with Claude Design as a reference implementation. +- The Mermaid flowchart syntax (https://mermaid.js.org/syntax/flowchart.html) for the accepted spec subset. + +Useful improvement sources: +- positive examples: figures accepted into published posts without layout edits. +- negative examples: overlapping edges, clipped labels, plates wider than the host column, figures that needed hand edits after rendering. +- commit logs/changelogs: layout and router changes in `scripts/flowfig.py`. +- issue or PR feedback: requests for unsupported Mermaid syntax or new patterns. +- eval results: the three example specs re-rendered after every script change. + +Data that must not be stored: +- Customer or organization identifiers in example specs. Use generic service names. +- Secrets or internal hostnames in labels. + +## Reference Architecture + +- `SKILL.md` contains: generator usage, the supported Mermaid subset, tokens, primitives, layout method, the three patterns, rules and export notes. +- `references/examples/` contains: three example specs (`.mmd`) with their rendered PNGs, one per pattern. +- `scripts/flowfig.py` contains: the parser, layered layout, orthogonal edge router, HTML renderer and Chrome PNG export. Standard library only. +- `assets/fonts/` contains: the Rubik latin subset embedded into every output, with its SIL Open Font License text. + +## Evaluation + +- Lightweight validation: render the three example specs and inspect the PNGs. Edges must meet node borders, labels must not overlap nodes, and the plate must not clip. +- Deeper evaluation: render a spec with a back edge, a merge from a lower row and nested groups. The script must print no overlap warning. +- Holdout examples: none stored yet. +- Acceptance gates: the script exits zero on all example specs, `uv run scripts/quick_validate.py` from `skill-writer` passes, and the rendered examples match the style rules in `SKILL.md`. + +## Known Limitations + +- Swimlanes and step badges inside lanes are not generated. +- Edge labels wider than an edge cell (about nine mono characters) crowd the next node. Prefer two short words. +- The router picks the first conflict-free orthogonal path and warns when none exists. It does not optimize crossings globally. +- PNG export depends on a local Chrome or Chromium binary and kills the browser once the file is complete, because headless Chrome does not exit reliably. + +## Maintenance Notes + +- When to update `SKILL.md`: a token, primitive or rule of the style changes, or the script accepts new syntax. +- When to update `SOURCES.md`: not kept for this skill. Record source changes in the PR description. +- When to update `EVAL.md`: not kept for this skill. The example specs are the evaluation set. +- When to update `references/evidence/`: when a figure needed hand edits after rendering, store the spec and the fix as a negative example. diff --git a/skills/flowchart-maker/assets/fonts/OFL.txt b/skills/flowchart-maker/assets/fonts/OFL.txt new file mode 100644 index 0000000..03af63b --- /dev/null +++ b/skills/flowchart-maker/assets/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/skills/flowchart-maker/assets/fonts/rubik-latin.woff2 b/skills/flowchart-maker/assets/fonts/rubik-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4ba94d14c2241d1fb4fa55af3602de9df0989037 GIT binary patch literal 35324 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 literal 0 HcmV?d00001 diff --git a/skills/flowchart-maker/references/examples/01-request-path.mmd b/skills/flowchart-maker/references/examples/01-request-path.mmd new file mode 100644 index 0000000..0145edb --- /dev/null +++ b/skills/flowchart-maker/references/examples/01-request-path.mmd @@ -0,0 +1,7 @@ +%% steps: sdk, relay, queue +graph LR + sdk[SDK
browser · mobile] --> relay[Relay
auth · rate limit]:::focus + relay -->|accepted| queue[(Kafka)] + relay -.->|429| reject([Rejected]):::fail + queue --> proc[Processing
symbolicate · group]:::warn + proc --> store[(Snuba)] diff --git a/skills/flowchart-maker/references/examples/01-request-path.png b/skills/flowchart-maker/references/examples/01-request-path.png new file mode 100644 index 0000000000000000000000000000000000000000..c856a020c0634e82a3f8e96aee1230128a74655d GIT binary patch literal 70266 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 literal 0 HcmV?d00001 diff --git a/skills/flowchart-maker/references/examples/02-retry-loop.mmd b/skills/flowchart-maker/references/examples/02-retry-loop.mmd new file mode 100644 index 0000000..9168f3e --- /dev/null +++ b/skills/flowchart-maker/references/examples/02-retry-loop.mmd @@ -0,0 +1,7 @@ +graph LR + queue[(Queue)] --> send[Send webhook
POST · 10s timeout]:::focus + send --> ok{2xx?} + ok -- yes --> done((Delivered)) + ok -- no --> retry[Backoff
attempt < 5]:::warn + retry -.->|requeue| queue + retry --x dead([Dead letter]):::fail diff --git a/skills/flowchart-maker/references/examples/02-retry-loop.png b/skills/flowchart-maker/references/examples/02-retry-loop.png new file mode 100644 index 0000000000000000000000000000000000000000..056066693503dd96f5e50df29bd58444ab27b707 GIT binary patch literal 66158 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 relay[Relay
auth · rate limit] --> queue[(Kafka)] + end + queue --> consumer[Consumer
batch · 500ms]:::focus + consumer --> db[(Postgres)] + consumer -.->|[~40 ms]| cache[(Redis)] diff --git a/skills/flowchart-maker/references/examples/03-grouped.png b/skills/flowchart-maker/references/examples/03-grouped.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3b5d96c90ceb2fcc32b669d0fd8b56a55ef211 GIT binary patch literal 81072 zcmeFZX*`tg`#(IiNJ1rqP)TIXzB471eV0AicLpVSs=?H^BS3%F7JkouYzBWzvLT8wz{nuc_o{Rkh>%@jVMezH)*N7{I zmp^{2U8JF%x_g`J-MJLp2X>YGwFX$wz<_q$9t$xy$SsXZa&YIQzTSt}`7AX=^kDIL zLt^xy2)i24%Re7nX5&Bq0)LmzlkoogxOC}%pZ+6_|CPi)yW)Q(@xPJ)^u+&{W_Xtk zUdFheF%yF?&E8WVjPni8!fa25Bzc>ck%;HTK5=ybhTfrpI=69z4<`p!gj2?Q;gZP&+hU} zxsDW@CELHlkFTj3stP8HUYn}+-Ro`8itWF!?KCt7o9UY!pBTR!FGD)<+N1&EyfQyZ z40*FKnys+9pp!21KudYOq<4)M!#_Oy7CHk$T~udSF7rhYy==Lwiu-SlSVnj7)VK`h1IF|F=DfQO+ugh93F9h<-N}Iqq{}pTD2R|l}=bx5*8N%(+S(5GxCpGyL@uH*?zEG!G^xW(;X0j<`PvPXE z*I%K4G!;bbo}Z;*vIs7-_3o>grf1~wT%<+`k&%(a#zR@ykxH5R#!O|z-x-0BRV*={ zzP}QlVI~*-PULND^1;h@5PF7Kh`$@28Pzu9@2ei*{qesl1knTgr(l-NDC+dIW~6MI zQ`2W#TW8?OPGWqrFrtqp_L>$>QOb96{mfZVNQm}tP4Ld`;L65nGW!d*iHV748lXBSqqO+=} zYEx!#+=mYdQLsrHp;>oN}yi^#t`f}Ia9H6p9>g%P{DyLGFRjgxDLL;C+# z8h(Bh?aa%=8_$ardc&nJy1Uo3(~U1zqGqP&{OG`f-xzgR?k_G53JUtS4pM;4GRH+m zl75QgzU0E&FrB2+^2Z2Hq$@ZrHujf!Y2a?GlJ9R*_CFuQ#OiQCC^Rn9Eb--aRD4Q` z#A+AjXpiLvXVnT5o<$0Bmz`Z<{N>A+19`?u|D{5Fr+uKJ!h*WhON3!H#cDt`Hl>N3 zT)13tc(E#p-*nhvc?uO=R8;g&KOhiNh9TW+Wy%aIQuba{mhTk(z_q;zGbT2kS^!)1bBpe5ps1jrQE}_c7qfrMcIfBsuYGQm zpA8T&{$_#n02j*ykMzd|{=3$-?RO0P@(o^`5mfYnNj*k@hhK%wb#S8S$ViR;HuO!l z-9*T)k_8%fLGJjjCSv6lzT&IE->={EAARg|m3Chn3Ob`ApDzQZ`rYE15icKK@4pHT zEE@W<$2DDQRVnCL4;ZbCjA?NzzC-hGE1(V=d+Va%j|ByLcw=!y@S%P{96zdAN2Fx)1dVKqvx=9pWOcMS3lis@D6PM-NpU8&1~l(cmJ8Ax>v|HGo< z>pEbm9Qy0{IX%uC9d&;0`19S2;AZ?}N=nM2hS`DdxTqsjS9ag--ZpgfYq22IwCUwh zR56LEZ_WAuHX}PWXj9!vcon|BJF~7t>UxoT(%8#xAjh0+Cqsq&S6G_`3R=q30*l8n>ittk+qzZd0gK7PL`r zBMD}?-Qp4g)<+>{>dY8TH!*(Jy>=y82S-=aTn-Z)4p#>`Z9^)g2?|w0U{H71t=%}UiGEC zInp)qMe%RT2&b!nP`BSiW$Xl6$XIKpro?&^j&~>u%9dAGy*7s1#;3J3mQqsFZl>KN zG)^DH8Th3Q?Ut?<6&T>(=%h?soVqm8cq*6Do0^igyEa>H#>R??O@9AMO#JRWPT@Y| z$qC~wvfE8N!J$P3wnV#P6SO$D5cfBmpRK;|tb~8C0HM)&Xp4=P)UF+2>0|2C)T>!H z=xO-NL>|_T8k%b~*{n0Rw8`d2zxOyxUU3Ntxd^2i`S|Wi)Ri=}{quq#m_F1eJ@o_B z=`2O6MjqwNBemmzO1b3t@}*P$seAa*8x@q4=&#bbqV#W$PEPT&xnoq*#&yGP(J?CV z)C&VCj+>LFP1oJNccY=EMs_`}7ypqC*!~WpwZ(A!`A|&}Z$%QRy0U7bclH&{)qNjs zgNMCpyV4$OABsaOQ{LK>z*y+x++GnMFr=m?Gg345W6g4mR^AV{jTtS(dolSedUJCa zgkDs0a2)8725j??*{JUB?ux4F_ZGRKNyUf#smZAwoCf1M8s>ei)BS{itH!ykTiI4) zhLzQ!HewP2>_2Tjbw6=tE?E`Zjg_<9NV`EKPjVRE*>pBiIu-w6Vdb`}(^m`)PDSoZ ztGtmJ*d88Jn0&N1t}PVl-M*)Z(SgKTU!S?;sQmwL)_Y_@`>Uc^?Yth{TEPU6~jfs_OV@ zhxz`^$=23Y=XGa=H-2<sH?3_U(s7_Ma4GY>~ESYyL8!h zchm}7LjGwU#3`UhW!>C1f;67p<)F%-sJ-TQxTL_(3S($o$b6KRm|B`??r33cmb+Y8 zbL`@3Tr)cM^?3t#u&J-oB;7h=T51|6wi91tJPU>MPXgwh->MJ(qjxb@dLZ9)lLs z{~cWXUD63I?gs*FLTp{lD_`W?b)T#dD$8-Q%s%4bf^0N{3(icPf%=Leqx`c-y-{vh zR!MhBq~~zFzK)LNj{QsPF4Srbf5whZmh4DdFVgy`4YM@_NX~S|v=l>4 z6gkSvjlB{lumtdc)@m6%5nP-@Ap(c!@Zn5dALo!MG1IYU9r!t8i6!h7;1R9&@0JPvN_K@n`zx^XMZ zec}0O1}|kQ+8Zx%NA_f`eCb%y_&KAfv!!u&ulurX4A3*~ll>}L#@yUMAJEwV?$fh! zsrLLVsaUwJW6OP1__ze0=!xHH2C9UTiCd~YH%l%BZp+lt#+#5a*qapzj7e)QQ8aaW zEV+u}09IWs;E=m^D+Bsn_cX&fiV@A}vRGI}QLsgHvK=Zs2<{covZn_gENzEAjb*S6 z@?`=IG-$QhP)jN)<(uM~Dp3uwuH{lnxn?-SQNq&Ni?zw2x>p$<29e58sy52_j20dK ztgfcY9QWY+t!uX!GJV+3dUvDSb`mmLw9C@_nkwVmPuhTQt|j`2ob^(vx9!Ad$m^7v zz3Zx}tbEp>s4uy6D?p4e(ds89RhK;ETo}=7apyrm(&qZwyn}YT0eyx%@t%3ptt@j} zTd~0jN**u#fs5N_6!!rX>MpiZR2I>D=TWCv*}~-ba7&fGjHzd0jKq@u$C5bfN8C-g ziSC)sCy5?^%rYbm=>$?ykrcA@gz85JCF(mlvyiax&!R;=Y~$z-Hwg!|`KRihx!9#; zaxdl71U2-XikFr@Vm9P*Hog(&W^(m{r^JLsMUk^(N{$y%l0Sy;5}Wj8%6{pDnoIgR zx96XG7S?&qq91-*Vewg~fw890^@ZJSHjtp9c3K>jpEC~ z^0f>dZ(waQ82v*%xsR1wZRqlOC&YG32#tME#w5>)CHl#D}N_41Tzp?W!;|4PT(`S}|_7w=hZD7mbcm)sw^ zN|0qz(KAg@iU6M+PQ7 z>6@w??92q{Ka=}x3m|>suUxt&WPpjav{P>brfHpg%BM^@ZvxSJ(#Z*>sCsLD<@-Hd zZe9)-v&y3%DUK_$|5&X34SAj|M8#6W3if-P-Ia+)?`;pqq$V!w{YaLze!xli`e@mCVdwRurMcuSUbkX?8e60fouGM z&;)S*9=tg}bty4QBXYx_%mUTS^Wn;GsVK0Yo0y-EjGylwijSPn?N06(+CM5-D6bZB z7@ATXKR6`3q7gb_6p7fvQ2!R<0|yf@zbVGaYg@^&avLk zue~#4cuw2y{3ATC)OFFChmIp{qr?wz2Zz)j;l69PoF_aT>f8yvpVPjyQ>U*F6{Fwg z9mv}%++)Ar^<2xbuArNq7sVs|{iXKfO-x*psZ9E`jH$4ZZ?Mf@b+M)c<_B!uDk!9B&UMUVRQEs z*z8TmDbIpsW@0J>Z7d^m?8;K=+}L=>&mp{2=i{ADz8vT|ZvT<9-%3vN?Nz+KPp?b< zcbLx0kGkUp!IfbKydF9p=d{BA%b|Il&wEF9xdy{MJV~9=&9&9cC^EewR^-3&l`u65 zz`#SUCQ^XuoMM?owJzbk(;QW8n##n$G)+lGe}G+wD{X;<=P7+`cQfp7(9a`I53SqRwcs_hd*r zb!Oc1PF`hzv!ux2lZoGx)`Uhz?hp!$ytPF0^Q;d{!*yJ{sOtrDoblZgW6AITXhvE< zGj@J$&E;q-z`mN_Uo&bS#m(|(htyy&3KuAbH$q z2;p}cvnE3z%x!#MHe$}a^?Qu8?`K=bBDcx1tginU>|=@8b+&P~=)C>goDW0>df;U> zfAu{|OL@?n@lH9iuh4L^dAdt=N!dj8vD=HMK0Yi3b;C41`3v_mXIvD=9WU5gTPwU# zeEasv64TOX;c|XDAtm*L&!pTvi3hE1GdNU8Wx&P-WW^IdlV%jtqkyF2zO4GYO&PYl zdn3$g!gkumLJvfFMNX>WZrU%E^-C4r6WGctVl^TnAlfCz&_^V9#L6yaO1VpjDx$Ae zMcSm*I1iOXmE}Y1z%RvN$g*8tvrNVC?RAPO^$0sK30;;+ryT5(L0&aIj zE1+Y0S`1Iw{-9cT%=<~;mTq+v!Fg7@a~qFH{uY*Jj0ZkZl5~QMD*)`f2g|wpR1vqN88NbIsVee=B5g%_Tb(=Fm)i#z!?DgqKS^SACkNzghi( z7{CdZj;=$w38*mpXsw8M_!|fP&w(l+FuM}iSmGYL)%mHXn$_lizvdE?54y}RC@mr>*k1Iy!NGWJOvwKaoS@k{E_t&n<}=ACjfrFOaEWuahWPKB zAF&Cvzf>XE+EXl%-)CgRs~uwMQiHzLfb((dTVtE z>G)@SphD57|GA#nODJ{w4UL#4Bp4l`>&(D?|GO3lQKziYS4We4uj!BY3*Wpuw6Jkxskgs|1r)29s0(e&kjho7p2~9Nq+JlA$`A9MQboN z9S^J|CcBKE2NfmlnBoCp{@o$i%Z6xmo%QIO_`;i4(e}T$ljgzib{UpaR-(F9uQ6pL zru>hvdU<#}A}#G?#m_aUm3IGw1^jM={V~|sJuiP@Ki%G`+h^!^!+{PxcufsVT4pBu z??*(%9R#X&KpS$tO7VQvp8_jtt2yN(WVXK_3U6GpZ`DIhYJf|n{>cbz1A3fAu)1cpVu-dMm0I`GBLXu(-Ak9`F zrgipfbs!4vYJ<4U=>@sz_-*baE8`)qGvzX{2~2bF7jRT>`9KI0;nHcN`0gT=&t+rpY1{^pZq*e_%9P(XR3MnuDHJFo?D(+p9(SQPGY8~^K9#47M6ciYJ z4LG%lJr_XW0(~CCgQtt_iF}7~kGK&fdHMOLzgD#m==b(kD1mj27r1N+w*52qHE}ZM zR%>U+dmxY=paTy>UEvk((>5gFP;G7P`K+1Nt)$t5pI+zAoddRyGSgc=O};<%>YxAE z4+^ga0AB=GSX5M+;P-?ljR2mQNN|lZZ+Kf&v-G5j4Q&j@%;A6TWbxPG4UiHCeTcFVCrosX?Jo z!E8X!!WH z6A}pV2KQxz79LPRFDh#R)7xa{h9@`N2EwPSNFcO&@@uj0xRnH)rwBIAo;O%BGBS#W zyZnf23E8Zsh`(#NRBG68Sd#^R_7s5!mg5GAa}gWDKM*)$nu@Zoj^@0I#T-O-R|fqL zyQ$aKoG%0lUS**>?Z*o3Zp@SopML%HCCl$uHb~P12w0Mnhapw`9xE#=L$o2v$_@|+ z1i9j+P(09!eo&B?XPw)1Rs>kZ1+%lyn)dWI@;TVq9sQMrgmliy z(@HF*pD3Iv?a0aJtR=3UF#6EFhbs;@7Nx96Qm9Z+PZQ0;`bE{6?w_a0@Z1vHHfb9oNyxj@4l3rirC+@|ts3EX0p zDu$h7_po2}465(%&D#kJ2?_P_xm)LTy`xd42Shh_3pl9pDE6kZ4jDTU_subbS-)o> zPN8V^=qD1ch=?$V zQfaj<_%trBD;S}ssu~^^eT{GjW@Sw0BMIyop@$c{&-wHo5GG9<6$sT6I(IV!{<3S z_rub1?)or$DRM+Fp_Y6+!PQB%1TQhIiy09eK^}@8jXmkSi~X9QP*wurMOh^{E-rC) zndl{~{#fAwEnO9|V=c53va`(bI39dH$w&?YTYE@7TMQ=ngcf6UK6Mdkne({oLU!Emq$#FHXMDE8II^ySJYNo*b1!xusu#yT zrXN;%@p=6d{^!q6Kgr&@Jh9T9Z+I-m$7hCkSE3t>LgLUh21&Kh6|T|F&i?-K{=wo9 zut?jL3GMbP6XC1PMYq}uwo+(7TshveJ);f`LIL-dc@Qc&ZPAw+nd|rW2)H)-HjNXn zWj_wv6>i-Not>Sq*YX=7Z;<@ice3y7iQT<>_W~~PN;RSNYyovFDK0)Hg_XqCN@D9I zXJ_5qpPuOkO$%kaqSv1wfybb zsfvn<8ZnH!Q}MsjlgSbkUOs;L8TI+|X9VK&x6gr-HRpndFiwyCUV{l1_SVa5AC(;d z4bQudrQ4=Oo5825;-ssf*|^$P|mfaP}qW&-FmW8jmQaRD>RT1;Oj`^Jg}piHUS8LX}3(rzhX@ z>W}CHQUIXL53yRi@GF%?qC;sHS7Z*de3|F-W51uE*3?>VMM2~x+Jz+~BxHDH*x2Mx z%^U923=9kk4OBAe2@VYm42T?!k9M8e&aMP3Rvn2Y!S~6LTWd3Noh~M?eb{7WACUzI z{&N4d327nb>tj(FsQV>5KRx%hOYSJ40fNMN%{v4>Pr1xr58m=2d^d?3@GMpMOZ>N? z_@N_b!&4G0%+*6(rNhj)FYsw9Snv1CeBM-49dWmIwE9PEjWVFPFv|^@Vrqss<`WS|l6%j1B!5o|K znAEseY+}8fmYHaI_6YdHm-S4|I_+v!a^cK-UTe5&!7-iKJfW^h9~*^=Dp)CevbV-H z%64>Hfm;71*&ha?wQYO#G;X?oE-Tiuj1=tssj`My1p2j%;`9|hw}7$O2;vz zA{`;85uXD(12;L2o|I1i#QL1n&Gv97m4;U=F3sCnIyzfg^1=@Y2AGoU1jfe4Qp-Q`65_6J&3 zgn2El*{%*VG{X0$5ue{YD--?n$?E(~!a^eaGn%{Ns~&Bgm{qp#K`N)OdT#|D-C647 z>_iAby=-YyOz1#5m_}^!dV0YpBEBAlav-CXyGtR~?!~1L5rPX8#l*xy$EU0TrDcv& zN|;2HYGfFBt&SF%wil?&WTnoSkrvtj)(1(V_(f3sM-SUxxs$KYt-CT?j0twNAWik= z$1T2|uXM*hBqZb|F%MSTO&{;&ZBa(utb5IOo@^Qe-KjI*RfyIzm4+L}i~5pDDJhX1 zoC}GhY;#60v{|J8?besjEsx~k={|0ekX=fx4O#VG!dP^ zwf?inQDi40aR97~!03&C3b+jTzs@^kuo5GZg%-8UTjrlDiZC%AiLYNaY z0XXFnG!FJpm6fBz!h6-7Er+ewPq@USvG}NW@7~?WLs`sS9Jg?G-YF03u0YxSHi!f+ z0fu187{)&aQsW*Ml3NKrfIy&5LtporF)FEaGVZR3m7!mQLUN}oISfQ{#FdUO5rZ7P zX5z44Ys*`UeWsBy5%hUqfGc1{yD|ieEe_6UISJw-n{n}crZ~O%!|25mBtx6FX)~ME zW7b!z)rUOIAC~~?55YCI-p&Y!rZb5-4^??v9$X)-w-#dPi$F#{sh+Z@tpl{{pTT%~ zI(?h`wwXs}@%+hGLocxJoY54LT}&x*=Ng#d62@b1YMg?;*G$@Xq5il~&uDcCcYTx_ zJL0wF=AnC|u40K6PoCnDmV%)(ApkpBx)9RROgtajab4{8x9Sovg>n;MdA+xhc?o$X zu4y8!1E0!WBSw0xMEL`eZvg`?P%vAB4Y`*ib0KhZ-`~uB@I!<>p#x-EepR6-sq0mVT!+qSyoQB2tB&@97w0v>Lf}bC3gEp4gowK2Us( zi;NHFxry30WF(zIGT9>aJd%5!*T7+|?X6uryT{`Z6}W_?>!okGDNM`O4)u%igxrOM z*WF!&yv8ypwgfV4fdWc=aRw-eoR<%}p!44ZytRmuSn;A&V=t7Wh5emC<>)^%zQ&MZ z`K;xB41pdEaCydSbvBR^cj`tWFb_V%;TF$PFI>^NKCmH6PbRR@3Z z;{93m3EXGdggp5IC=SZ7NOtl3bREN0H}0PclngT$JIzte2AFJE3-ko5WHyA|^oT2g zq}4c0RQo$3O?0(?JCE^Uh3Rwpy`}1aI`)9_E%6Hgnz z0~)+n6T6+yxfT@U$!*UJ*-FjSx>R;#c1>3Mb4!G<^Kb5{fm-wQmLwrgG@2yhk_-DP zswxqEm^92>7J@^`hXUc|GV{}bzHZY|t54Ly%IO~4bHmw@?cMECy+Q7y;!28~yTchi zrVJ=9gSOI59lby}0uBx1rkD;4e5{8NJ9fc!$uU)juVL!#^9LrxFfwPH=gX>+EWhnf|a@V|06YFs7)z8@26$HcuKM8pN0)64vSafX9da=lNW zK#U@F+H!F(EhXhLh`=Q(T51`=k~$420GZY+Mx9^3TCHa8sD4x+A$6UW{m57-8L-w7 zb{A#J)1JEmTsWf$my@-K8V$7(PQ_;cBX)n*LQE_EA1t8Oi!do!6oM_?M2SXE|lY55wp# zyuXvOf^T8tutG7>8NESA0NlhOz0#FpR~e#_S&3HU%in}DJxo$rk@D2q<2{$BcHdq3 zHk+5TUc`YHe;_LELP?#%j}?Rzb^HHpP_kmji`pwF=q&(_{(MIIT@ z80k?E1;H17;WciwWCr~BtzW^9Yz_)E(#H>oEZ(ss&K54fnKCKJ)Yt{<$w=rECToL$ z+X{r!c5<2`P#EY28z$*_qh^Pj`4|iaCyNcTHX07M?I!BWM=ZE$2eYRoLL#NM5p^RX zD6zp4B`R_dEqD>i9FLW$>mFRe7h$*FmGhhrzh!k3dN@CxF{#Jhe(~ZBBpx7A#=b2D zJhr*9x<<-XW9_AnJgu#*=5=ldD}=S2>t!ZbD8c7Wu}NR52+Q(djxBMc$5<3~L(k;` z0M)Gkuted4{35^ur3lz3lo1>Uw2PO^&Lfy0wY$sx8fxj%BfT^F2xWk##FZZ!@bPD< zp2uLc2PFo-)4ggc?vd8hqG^}HUeordeZlK<}@*?G`z#}>WHyhg=F3+(* zBQrLqv_L%_Lvw2rpC&FYxxF@xG9YfOOI3>qBWrD++(q!h&R2n3xAB1^)aXhq3=!z>g?Fqt!Bc@U(#zCU!-z0vTpR7v5gRP^MtIO z*ztQ`8%HnwV&kA*ld6XkgP2B7JYeeYG~UB6tu(z=VqHDi|MX>(9v~iaHC1wa^r60u zKt%(5WbAih&zZ}#p_`cD5_Em0NFLa?Qd=W2xJP<~-Sr3jj|~Z@u%98bJyRJpG}mjK zXYTMru&!rHA<`0`RQA+KIXM92)xgO!+ES*(Sp~l051g2I^0IVUZ_z!ykrDlMDRdmM z9lbhIQCZ^wfm*GRb6z*R`X6SwDP|33cV=P8@U^|wamTRSijbgUu*iF?e%cB+=WpE) ze$WQ3+!J5wok&<6MUCHtEV={$?K?~2f{=XcSkKiCRYP6qW{YV-Df2u5wO8;q^eu7H z_vdGLDAk7CbtalLY^7w8mlw?6Z|QS;C>3PS4FI*2SE1n7V6VGE$YJ>DNnZ%+Li(qc zk=|dTPGGAHxOo&+|{{T@zFtybE6ob!0yL0n7d_VV64AbJco`yb3sbDDI5 zdgk=i^h%UbRKuZXmh9F!DPLm}#FaOpZ{gb;kqy{AN3@)P(@zd_KTb_FK;@*>v5?hz zHHyU8w=)JIx$nqYbbh2&2{4acj2+UR%a1ywTsj#;D5da3tUTCu8B0`~tah3TIGt*h zmg?w>>{Guf0_k=W+JZdihzqQqy7s3*QX^Y~LFy(uK20x$Cr?h%PCMpZBTwEa&5vgr zM%?#jU7d!5SudOF%0rx>Tlwq8V$Mmi&Y8?5D3oH1ugy?x0ZLrnneTs8hXXAh*I&qQ z>sLH1{uks@F*GzZhl~0G@~N5t5Y;FxOQlP?cYdoe-DHg$iTa758pLab;V&)c=+5e# z##!NQ1j(I1-PszmCK7)uzSV^dF3=@+4)OUcO5+-*DJWqRJvEv*3Zf%%#{AK@&F8D~ zZ7!Oh4JjhH!Xw`uzHF;W6Lad>nov~pWA#@BEDWqTIbwnW;{n@hb2dI34*-t;)F@6M zNUJaUrjW(Gf;=5SvwEGcqSnm{+=aft=S-71iUj=Zlwwn)q6L7Y<&Sbr``b*YHfLY4 zSHKNi$n{%U6}`{m+)qRKy!>bxaOC|fJg@jV&2@CCps?WD-t#PhxvXE#Lts!xR~|(Y zaAA&*z)#gQG)C)i%>yszlfPSLF`+6+cz_F42}}X(Cvv+yB0ZYE&cl!FEpFVX_SUbSJ^=Gke%?^AG3)kl@^Xh05)mkVsYBNRL~|PHqkbs7#LW6 zWr;#pZmTh^Y*^6d`00QlI7u;zS-@sW$S8_GGK-Opkq-zn*r%PH@XJVUA9;OYHCiq~ zNA1if-QO6iS>AG$yOVL@^6fKlWAe^&(~+pmUbFZ?Xih!X9og@Ttnk(G>{$Sp2l)Ho znt)X7C)grM1l+tdp?6|pym23wn{gxtKO~$zwGBERDmJ%mOJePed9xXut)IXxCw(di zk3GKqKu-NK;>yF|-5>|S;N1nvvq%0R*4EZCwTtS`^gO8rWg14*OS%A8fBu&a^+uQb z)ce@j{=u9O88K_=g4d;_$&UbWbt6zNy;<1(jny-(_q2I&gL=b6PP>eZ+f%rur6mc1 zbAF!~(j>-z;D4~=C{|U9G%nj+oDCR2SojBVMKJ)I@9UL`6-Bx_V#8?@6XvohgLo9n zS$E*0lgP-Z^MQ}!0PK0knC`54in!v1D)w{mh3~F&M5PJe7``b4#QRcA(3Jpu39v$_ zp8Cry3ITH7o1dLds-rnfEN77@W}2PAO$%FBDTlRpx72)mHoI^H$F`{S8_cvoloMQjYYO%XOyo#9 z`BhM%HPS$YAMYMIb7OaxctG*V$2uS2nyh}C(IcTa07zpU^Ihtf=TQLaEla&OUE(u8 zP6Fr){T9HgJC9W(J!+y!!JQpkFu)SpY{@~R6Ds_HlSH=54E-iILiK1FxERfPGbC8A zv1B_jplGQ`@F*?ItPuyTK6g3)&9$z$*{2#R^gzh#U4VJ*{6RVYG$r|P)lEi*Xa+gR zWabWlOxnD70pQu!56DDb&f|Hpqfrcdk=fbV`6udb9s62wNym*QKm=`ojbi#4=JGU< zTrpGUJN-WU+y&sBoV3f4YtHfQq7sPwYx(<8zTN_Qe9GrY{)B~c>)#E0@;G84xXj(B zWX@1t9I6I|w|9=0YtfinM`Yr4T+<~3d=}cx$$>cE4G4Z^l7E5IINdZ|ztsG20+qt0GRfiya%*(WldY*K(-u6b3#{d<7g0KfHCh$ z-sw74Ams$ooWhH>D3}Ne@gWh5{M;~Kxd|N*r)vZ2dfrsefbXXUz*%ofL;*2fgd1=S zH68ItApZpJdRl3AB1sBna2)yy>&YkZ8jBf-1{hwGm}WiqcYZiGzFwQTsE}Mxz#XHxg`gL%)%Xs8z*u-riD(i z#OfyAG>vSErH~Q`-0*mAf3cmDNl$O1)Sr}-PaZHlxNO0zYb*Ca@nW`%uTQV*Xlnns`C(MG!*t<5QCnh%T*I1_}QqLY(O=eO8#v&yvc7~TjBT1Jk`|Jz!u0oAgp#V%yJn-6cLSMJn1-<250=1 zm%h&>@tbK8f&9Rxqr*^-1vq!$4@r;1?fP*Ke$%@6MfA?fC_G>@cb8e}5~vW;xWAp& zaR~_0KE@*@$F5f> zB^YTr#T45VE8)k=2eBTDO}@5%`wG9)Lc?87spT5Pm){-_7%s0QaJ#DdIXhPvJ3)8>C z5vIPL`sP5Q9llQArixg9nho%1e*6r|!A*}i8(#)|&Q(z(c%%;yA9bZsRo&SK!Ec)x}uCw}cf> zmMs5c^zmVL@^{i#$#7AZA%_(4WsFu%`%T6o#j1h9!I)bTo4by#oKjA+bzbvJS{Nc1 zAUa7&NiIPy5s}u3iHVsn<%JvpA4Hr#qd@1*`PN?#4vEyF^Z2UQ+{uKt&%u zylTw@_`PjWtM~Koo0*AtWJz)e+!1*A5MON5(|kMx}e7{J_Ry^5DWz0H|@U0hNjiAOYon{Rc6#Ju_9`%^pq_y3e^T`qe;( zS4^c~nKB;wg9Wx_nL7E6Ybz^Uknu*Z$#qQBU4R&Jx_+Jgp6?!K5bx788e9=3yxBMA)a_nep=xXrwfTz5u|?Z4@+INM`2003L# z3eyDEl@&E;7H~G59>pYDSd%8~yt$q}e&%wv_qE@0u`i3Ffr$(L(Y5iYG$8np6ioi+ zd?+XEfoD)S7>gUu!6~={z6_WE@CEJ!UbmY;7U`>eMuFA9+=JuG#GYfo0iP0^0?_+< z)nsYtiX;Dx&Ch473q1Sw8_iSe0NlVd>YSLgoaO(}bN}l2%NH*SRo&p}TU$Vy^!AQN z`fH1W9|ZZ^PtQy|JxRv^g2J6N@TE8X{31o{%++aY7!eg+X#)^EyT;h5S{hF! z2E0wKtx28dvje*=zc+%?GlzXPJ*9`G^XD4RJ> zDU*>gs`yHvX?loFde02lQrWVBAYXgtT0BAUR z&E3o9(50af;G8|JS-}T)$`318S>@_SzkQUF?FG z^NKDitkNjJbYJE9^D#%)#%vK8T{f6x@qPJOv4RHCy#iK|h>K^!#8Bx$L&_A-##3BX z7W@qDNiC_HU&#oVcp6u3rO&E0rXOH(f-OVUnMHV4M@~~}e3NuuW!f#8lcqaZu0IQkk-HCg6|@zAnF|(Guz1T?-Xq+b8D1Jcsb@tpe-83=Lsya_ru$=ax%5JBp8n+Z5VnlB%JjFcu2R%n~1 zmP;CfrzctKOJ^G0r_IN+0jP7uQ{Nf*c?2AjLyv6_fFZbc;>=+zVzQzi50V)PRz~B*@>`)-%<5hdh0FQ)_;9;t zyKAQPc3M_%9N6!1a~A`9)_XB{Z=Qe_GvnX6K%JGf`TDTFT3ub;vQ4JA9@jggp3$ou zvr9BMIu%0DF*BoP#%lKDtg(W{E)yk1klppSTlCE>EedA!j^1Zj-=r(BP`Q(;dTD{} zX8?nX1YlJvBt*Ox2(JE7Q7v*EaD%I>nT_BwzWFxcE9-%iI7fM6NKg9d3-`*BZdC%h z=J*`IXSwXrR2JhQbo zv4@9;+#Y-|>6b&Afaiit2cYaBNm^2b4Z`4~hw=Ff3!I*-B86pBUS1wTVqylp-U*l- z{SM?vuDuSyrM)-fbpPbbGZ{X!dc@2pnA`hb1(4p2J~`g^^bE$LuKgdq(ni)LJ%`d! z)tdHPIeymn{SCY$Um8V+HPfi2Fly$XWs(}eI+Ak2J z^N9ME^wY{(VZhhJDSQFgou!JrPC$li9i4YR9RYGOY7Gp{FJ8bAa;Vv`_o*e|>g=A(#==_IHmRo(gj1g0RlU_Sv0kHJzd<_&2{_*b*VUe1;=V(wrQ1l>@xB>WYmY=MuMcGD z0p%E9cufq$pku6GV`K)AgCGn(pbn@~PLmqNsTqWwdG(~*knHRnn}<%ewn*p5@Ltg; z%A|#tn~lGEU&MdO&mT%6z^-4vTnDGu&o+O`knz4FB+*P!@Yrj?D;delxqcnLFVX4l zQM~u=^t`LHX-W4vcBA#sG>i1z=diS>s7OfF?W5`RhdYn50F8R}7`B!@#6lNAQ*~}p zFq!?MkR`rpsOr(0+9&B)SgA(z)Ybc|KtB+j6svp!~^JRy294f9*zK~?exHC?IPTNqrk}{ zoG3a_V?f(4>g&J@Qc#zL??nwE&GmNAF*EC_;)vYbV0X%nZ?X6L@#8HyHaYn=4}F}p z0OD{|Jl8jKng>oGqNAh9hC?W-Lhr#(rH)+nq<2~`O-%4SN-}~^`)=`ILPJ9tbWUEX zVF><5e9+jvQ8oWI&{i^qL3O+~tj;x8i6 z`CV-hwv^wcdc5x={j%wQ_<=R~Z9al7G{u>ln|GUC9J#!n`^;|s$B5V#d-zGvjm76{ zA;#Cq(-*FeYcmvN7Y(b6GU&faAQ~9)hvFv+S_+KJ1DD&EC4p2Z-qXXlyMC~jvkcUK zgI$NA`ZRxA$B0Cc_;tGTsF&Og9rVFs?>yc~&S&|~^M#ga-V81J%OL7{k_BK`Y;x-B zVOv*3nj){~tSyt^dUd*ls<&l99YqE(*wDb(O&?TGIes`N?}Ban_%4qb%L>Z@`BFLt55{*e>`k}P2Gr>dibZ1W z_KNimu{t~l{ssNeb6velJ9U3Q;zHnRx;$*ZIGJ#pln=!wo(W`^{c|weK(gbnX0X9e z0_zuzaaU98*$Bpk0#sV2YQ(qvd}$zY_YpD*2NVyJ1w`)1!gva1zE}p!^ZgbWuk~A9 zfYJf5m^_j%zc!GMb;~&mq)Gj3qY3Wl?fvCup7`R^7BybWjnCqkt6P^!yNaYib)9P$2;|zeYsZ(0rS8uH>BAMCNw$=O5l^6WnN&Jn_oonR zWj&RZc}mV8D(*-Ihh+okdM-Tp%7a_YhKF>gnCky&0mzAJ@11=>$!Tb6*46?PCt$yS z*ZYlE3z|M1qBcAGmq*p=>gvewD2SZG)L>GQlNTuKNYk2YSKqj~b2F+1a9p*AR)fNV zW!u`urqGA;zUvfmnxEl@z|J%h$cqLeU0kzsYckaN@Z)``?^adD)%!1Lz0#IsG~{Rm z)<5Y0pR$@O&$!+MO-(2kR*Ki~#O<%i&EGR!&LUiT zIG|%=?opf$is6*T%Rt4G^K#9Xjlq~a@%@dFWCuc2Kh~9qj7r)282e0HJL6zI8b_;r zSxoCp`rtM z6nd{}9zWCs`kP;)=hyY)WGcV>Kf3v%Cu zz44YsF%QoJd(cvIG?|O2wN0~T7&sw$UMSPpqSFBR&-Yh7wOVGQPTn99={)DX=hUN_ znU&hDhZjF}wu*>Ix%BQOMRPw$KM>lHALYY|44wCV2D)~o1|N-%*`*+QA8Q6|yVQf* z&eeO@y9;;MZz}T8F>G#JpsCiI8(i+qG^MB?(Cmp%3U^HRw&%r%%@b_yzPtUDr+rZv3 z1K|^yF9p5SRV6UJ7oVtptu8!Jc0tWFFTAPY$Xbw_w+w{ z!SBa#c;qsJ;L}DWPmT2&MZ6iSwhw{@;O~8Q^(c80zHQep-+!RiCm}g`8C)pqk2-~=>gwXJkCr=uE-Oh)GvNExw8L6! zTUUOM@W>DPpg(f}WXO&;Wyp{Ge6lK-)Wje|m5L7^TAo>13>MYRV}k{gw-!Ygk~^OR zS?%P*!lFy48WEF9Q}QA?$s%oKHMRM4P;w-`*br$}oX}Y`PzbR*`jv5TVM%POaa=lZ zJ!*&$xaflLsx(9}=2p}uM8Xn=Qj)(skdqT8;*hpjvjgwcN>>hP_s2vMU*DjbzfzfX zql6!#Y@%g&X*OAMu0iiUK9#agS?a=xaNXPcsr~J6Bq6$cqM@N>>1SDk;ou;iWZs9h z{S-DmpL-};`H`oix0j3-!|nMGR_&}T%J3jsSa3GTT3Z?+?E&;fCHvu%6D?7XtLB&_ zUGHQ}f_Dkq*lo@T-19S;Zc0A!kOKTgMa#na%!FMNkwp{_`{mZGiD~@A3t2{&*-=CS z)`rI0wgFw(Mlp@}fqutM&}v~7%CvrW&PwHKj9X99h@1MNa92q7P8_#PX&-2i&Ow85 z+ikHtV?NHp!Q`AB&eV*LyAlQlmk+x@R}9k9Uo;GQfK+e>B17ZSo{C!&yI^gG0o~GX_!G%>z zLx!|yJP`oBJVIihO^2DkFT{6>)k`dg7IuZlQfG&9L2Dd>hV+d&Eq!RNb1Hls3LpeI znFo;^in_8PiSW&jC3noBZ8HrXQo5?BnuBPrzaCs-XJ_Z&xOn|CuhSDFA89o;wIJGK zO{J%rnisH~*DhaA12s+GlYjuZ07gb#+w5C8Cr_OM;xJd**YSx7kVwKz@aB1rvOs#7hy1Yyw)D3KG>$rieLx;xVTLCZDx|C@Aj3H0nlI4HUXStZ$W&3N|Kgms6-YCP6T;M1+NGeweGg9b6Jr3XId2M>kQuFHI* z&m}Pjq_>>34|@4Uip1QJ^)>iLjEH2yyupwVq$5S8J}dI6g1l2pME5zl0PL*}!HTl- za=a9@qW0>wYl9o)c=i*S&N@qp*#IIcmImqv*cu&Q>q^PG)=rb)>D;tHQeAJ(ja8tC$yCq?HYExv9P4a#l5d)DOvdc2K4lCAKMO&mu*<_b$;L5qrZcKb3& zL^Jmg&O<4s)`51UjXI#m^5DC$6O4l(H}dpEJsUfxotxXDc|*sKA2)F6KBPIB4(o|t z8Rw_!rlx@#>r+4;Fp?e$OSimUVCXw=h9Pa5uS)+A=r{Akk-kNNPs!O_N#+%=UD8h= zxI{nw5&c=YqlurNg{3IRkqP~`GH`d$I~Y8fC8MvgT3pZCnEU*J-T~p~=TDb%if_zX z0eM!_(-$vJ$22vmiXuC~1{sP;2!#C;LIi?NOX?+^x>JJOAR^~-a;0O1p!x+6-`7=7 zv!08ajSqM5ed!B+?G=dJnE0$3po+BuHeEDx0{ayFmwdssbgTB6ziJaBsvZRmhJ#Zx zzy9d69{$urn9O)Z|N3w}#P3>qjMe*p3Ctj)poR}H}ayP&k8iB=0Ch3c9JV- zl+Xxiw{dUjztz@8^UR71QFYzfP*2S^VX<2Gr60O6W@Ewum2Q(}b(W5fWm6PV5U13i z)Ti3obdRPIfDbsBG-+{3*{p1(nBj_t;QO%YQeJ_0k_>o5b^bnZY6bhTMT5Z{3OaRIZM`ltI+5x$;y6EkGe$wp{zoQ^jbBN4t7Y6LV4)wQ zl!T03CW+7)G;>PcX83vUeV>kYO8f`z+8$x2mBA*+O}|g-&{2Ue!=a z!fIzmU4eO+s$pdY{2+Yc2xWmS1==SZHJN$nZapQWylTnIZIp3ErwtU>l`fO+3;o76 z9d|N@-MgZfsZXV2O)|^>?9MK+zrr^-T($TxiI{c|%fhltUo%a8L$AYk|9DtW`|vm} zG$N3sThDv;?06??%dQVMT4#kSQ(;*R6n8r7CcyCgLxY)mjEB6L|4OpJ83w_PSjeMe zNbl2-AjF!3-sk2CjD?;)lV~S`dY5L~7R>tj1OL6>0`D(?`hvB8)&`K0twHzMvaU|X za-OJiU1aaJwYCo2+Z7;B-{wqMjX1h%_fy-GeZh}THY7{X(5&xS?1HXOaUZ`YJMf;& z6#StEXUlH|>|Ank65iPbx2=w&2ho!E+U|O6lG=RMhYz;0{mdt22YoF-p~vV3|9Zd= zEKl_*;!dEcK!3T3u2EI+n)=Xk462_ievkd@-32%@maz-7G1{j zM~{Bu$G3;5@Rp}9{pe){gU%Kp<8{2{8OF&unWIg>vN1Mc3!YkRisT2Kv*NCLNd2Bz zOvL&8d`&-fMe>=5`Yy@AGdlXL8R%&8YZoVgC*bqy-OLa_c0$jgS}wB5{u!5;lII#j zEeLedxA+*}StR9>KHL8u{Cl@n3#Hy!lU`APPvFa!Gnx7YtUhT#pTO^5ZR|$au~Uup zgQ)gR0iXy61?&u8)vazJM6RDwSJC`z8g?K(_H zW_gccUn(}=A$ezh9Q>{*PzY&VJMb_xOk~h`4Pc<^YZV3K%~@a<_g)^YbG>_!p-Ke5QKD5R4J_UodnOcNg?lg4AQ9@NosH@JRf zKR7zYa`p&Bn#rh_PC;6}yT&#->8_vbbF>twQwGPuRX z#gADG^A|6J*hVxBzogZaD?!O6g5NWNe8g9_Sk$>s4nQ!9VS#lIw(~Kg1<{>cupg%R zLA(0_JL!vi*EVrT7_>2`wQ+50hFdK->g(NhR9?hdUucOrM$6Ag5|=)iX-Qihat%Ca zbb)~;&t+^vZQO=cR_qBZ@OU9c@w=p zF1=TMy?xA{#XPWNGu$Jy6AZaglFbakoyXfki*7n-k1zNjqM|AQN8^tT%CDp!Y@6*o za}*dVta!crykqT8S)of@UTQ2~gDA5`D~T7Cn_Ap?b}A3QyxCrZXFrrw-1peAkZp=B z?;Qb%zJOhGd3gXcRbI|=?#m|cz!(Zg`zVpA;JH%5@R=D^!;mRiJ9lMZF(WW%@^j9+h|q(9o4(S8@BrAA6+R#~ zd&^r_`aD~l=C7M$yfh~!^MZt_(4W}>eV#n)ihJI#KKnxwf6K8t5Blo^D0S1Tuj#Vd!F zbGAIYx?IuKJ{NuKAfzES0k=?Z`Qn9#qhnEfu#~c{#}l#J;;q1Y#?TV_-wlM>4cuL? zyg`&~tBzZgs4G+%SoNy2^)Hv`w>1Xd2U~zN!mYetSMXX$!!E*je1CYJ`$ZGaPX7#%`Q z{4KW2;tlw4r-?ijRK3EncF{9YJB=D&AI8*qNW|tFT|m5&QIdE|98-!uQ%Xac84>Yo zR00Bf54%Vdb1(6hyZaKB@W>hX{oRr3)bZjc=-wo_|F&Kz4&W>@^T_id%sz7B zP%@{}eGwE1q7C>|D~?U zpV-?wz0!I(SK(uRu8Td?73P)|?m zOx%xR2(E|b<$*s-Q1ygrSI>0lY`WQjs99~9J+&)cD&mc;AtH{# zx7Z%7f^6j73fK-c)h~NxoJ`TWK3t*_2fE`hg)KR%@;s3reh8H98tB>1LI4kcbY5 zEfEw3-SRrW*+l=brosJ@bG(|GJhhG>&PidXJr0CLfP7}PK3`Cm>)Hd#$Ap<5i(L%( z(tFTH(9qI4a-+aB)q&5Yzt!!q(z%|jd*bpqh#onEHwTJMk}ihy>93r!BHJx@8etQ2I<%=Vt%+$ zRw!IMx6;00mtNlP_r^TE-7~#m2JG^Y&Iz|2^sPVr({19O0c|Byh|3A&m#@O_eqR&;Px!0v7p2y|>ys zwR%cVs!32e%SNftZ%AQEU_^>6O&FmnTN`Tur$*HS^k`d;E#7GWMiHzzz%h-<7lkOeWaxFN6XEe4dJJdAd34 zC$U&TOiLxs8H6J-u#KzzkpoZ2CRIS&bM5|Z9)1}25K-`)k8i=QGtjMv*N zCP~&CO#ZI2q{)+nWM$`pzj$SRY3VAi7zWtw2^=M}Ok2|pr5Y8aa&+g82<#BrsTZPl zyV+vydrY7ej2P;ElHp@$2mnjLbp)Yve3}5F(E3u517@CQV?mhIap0G@FQ|d&N1HX@ zPjQir&E-G}UGAIorxGXb&WBeFqDJNxi2J?8ar53Ljwv3#>aaK6-_W25hHJO@n_=#M z=O{Es4TZ!9?+%@TYh+OC{UL^xa8U?iZ5$cm$l^7H7-NR-n<<X9WJ-eA+TGcr&uHt#Ogn&9$`vfexd8Y(EH;%n*P z918@Hx(RE2f%-i#6~YJunoS1R<*M{}aDr{K$vklAZolk~0g{N!2vRURI}Eq9*U*!#1W&h8>B&nY>7+9_xRP_XpiNGo&vv2Nv3n3a;eY=3goDpVod?4a8Vf9E z6GBV@4f=JbalA^=SJSo1f$-c{q1D zsnpRxH7T)_po={8A=J-5`W-;tbMU*EI|pL=VF&Z39qu2oK5Mk8^=L*V#T$~soSuuXX?IS&!MN`UZT@!F7m_X29w^aJHRvJp)EvknnOSJya#QK^)NgTR&* z+~DOh`ji0UC5PlQh%uIc{qSGg@oq>Z+Ji-K)fD8k@SBbTJ3PMlG{Yqp#;TM5mgtto z5J(5zh4`VlSx}%&^e70UZN@`=lnIFzRqCV~_Z{1ilG0Q8@sS|L>1#$kkT{;q%W5k6 z`@Bb^^?-tK+(9zcr)H^r%Km2+oROLB|2@f(pITp4fWtDO4S84*@R%l zlMmniZ&x%0ZU@*=M|0O4`a@0%SD`ru<}kL47&zvp0aPz0X`-8XJd7h~{ftdSDs~lA z)%XD6DZ`4uTDnQq-(7NUV_8s5H!)oa&@v6W8E_%>q=w(TU&k_iWe|ma)g!-o7s%1i zj%rUn48Pc&eV*g$)!O|9bxyjO!m(xO6klwK64)q}EPK)PwU@#Kk$5BUBrk6e`B3D- z9FzDxAl42;-$Vp5$G9O)f>Q3gm5d}3M#trw>p&39mq1?K$|tH%Lc`RU7zA}lY5`y> z$H&|-hKG#c!N@oc?dTGPl3dw}2F9+@HrkvKD-*y-PlW>V0eo(1#>wg)r&l73Gek`f zL&|hl8~!27Ii@M7YhnsgJZ^H?vFC?I!27SwF)^J7Geu~QyX`{+KNY91#hO^dHbeRm zSTZSBs5cvr?-T>9|Gm^Dz8kDAy~C^7p}`FIlr^VKs=2}L&DP1Y>u~}7xafj9=lxFi z1Z>z?(|WNIb*5oFywE=oa;1Sl+XK^vLI*3#J^`I@qzzSfqq#KUSuJpIcX;RU*Mr(M zX}*-}Z_+rz3OH+9byxkEage=cRw?<31WFzp?jIYWUZ3FUN}jy$3>m0UvqN}OxmaKx zKNiy9+R6L1WoAb*2cOnIm%0*v`T-n;v)hg~n811==)|SiXV%sRdL0Zcc{^3f|LJecQ@eB{(ZAwJ z>Y~Ai;7XkZel&rAJidWV2G_O*Ge)(rUt%!5E3d6y1I-)gDE_|w1?-;6$ukC3k8kG~ zP5j?x>p2BB;()86t;)(%=6fpy41u!vRz;SvQ zXggD)9cnuH}MtMEtR9o766*T_laB3sm?bREZ#1PSFdvv zk0j8qL@V_fU8;U>4~ACZ3DOgPwDE)F!T)#!YPh%OzQ8J0hc4yLH4Ow;s8?3|)kFru zJ}@vvC7CjG=it ztG&G?9~px2dsJM{_d9>zEUM*cSAjwE&(3tVfSj6~Zk2RvXC-QG__227FaoNa+PM+G z_C34P!9rmG)?#qs0&ylcMRj2n-|uyaZA3&olku4;8^3zD#7>IUo@d`QAx2V7tf}d@ zFyy`bME(?7URCY4xuTDm>tPk`>Fu-S&AS=TK4_D%b3B*+oSB|CdDunvN9y!!#488RM_Nk}8B{p@SK$uDKM zaZX{;4wGnY7aR3g58KzoC}9&pIxdyYv*Lb^0eX__?kd#yqrHirp83l6M3AnADBMtE zW0WT>=RtP2%1?fr{3ej{!SO0mJqDJ2cfHjyY-RZg5OcEIu=1gOMDgC~+?x$UZbuY! z?Yl5lrb`7}8O3iKc>G@X=a73#)ruca{_gB)!fIUz3aU$7SKl&?M94`=-Mjb3-N(yY z#Qx_q7%H;~Ks`%;p=wNQYjIZiJ!lx~=?{+lyu6aPWfgGh&!5+nd1k`5BPrf3UW4uZ z-_==3_tzC{W?QWuq3ef};^TAd9tW-rWvuDuqdOp2pH*Y^$-n2c#`AgBYS}Ic2Rpt` zGL?_d%9^Gy*VBk$Vq2-N%s`g}+#P^K_z1*1egRA97-jN7xI~?1$Xsj1zhp?zyl&yP z^FASJ{^x`MlV7o&1((os$ojq%fxd5Z;t~shu`<xS7J8Zh(yKhYyzKjb4@ocj zIiAoL2hR8*5QvSRI1Z>hmRA7GcrDOzOb+w%O829)$hTGc4SI3;l}7pKk*XT$KBwkH zr&By`_OCJ@Sg1HYZz8(D9z%aksRGj016om5Dyd$>CeSx7_o&pBd+;Q~=Li6tCspOw zdL27M3hp1ztSNZ$I(z1yQ=}%>xV-W&UeCv4X>Rag$r@=zqp`o$iZ`;~e4Ift_8Nq0bYCoA&<1Zk<_{;|867TMHUk=dunJf1Qw+!o9>(;vAz?kz1icOs}GmzUAc&Y;U%-w?A-S`dVLa zUi?Y({Q2{L&HSa!ttbXZje5BvsV?X0*e>!UWnvH@O59Gw2SAfL{t^;pNK+wK z6?9<&$i8o001kY1H%&oGnozsx(UK;!vs*uLq#flbBt0|xA|&Lsi?fF5c!?|H?{t}K z!<8ZV53qHC;%nqkEMm-WV51k-M4SxA`rnq9kPw&R>uc=j9q7Q14E!4GJWe#%*E&wZ z(Z49+3qkvCB``~ukJ=!2r>jr}Rcy0ySLo%2t{Q#;<#EL!dD^dk)$OuRURz(wb4-f) zh9kIOZuZGQGa%CcfS@cXY4V>y?=X;nyA0PN%h2aj>E@Lpe6j|sTHGAn7(LWr_RFq>^ET{( z=sWxmv_@p?_jpB~?|6OpixuCBU4uJC!L+^H#&Z3L>22&t?dKZlGA_SAhOV;B#96m> zIK7R&uuh##Qn$vA*ZFVe*~ZKv;G~!#M_1w5F?sd}qPrwu;x1UQz9;9j0AKk-r_ARr zoHikvK3QopVQs#5&?WGT*yL0Zoz`DtM;ZmNb!t!RNWQT_#$zc#!QGYlH=5ea>b%j{ z?wd#_Vb-G2tY;<$6=PP^QBdcx9=&35#rrmc><5QP)j8^fFgsjnAhr=PHqhOb&M$m@ zcvURJT2fDW2d5GYkAIK}1WP{sHeQHhx&ntT${a@gX*Lo0!p&5Mo!n5OJmEiBMChh2 z`l(sBr6_fE?YsY2X8RcdH&DSj(Q7tFN?<9GhN{2RVR9I&wu*69w;l^^2kxstAe}!R zVD<2FsYee#PW|XH^c^-Agj53+aqP$^zQ-sA%$*T#8Y}n6_o&kA8jL=_Rst=~Ip|s& zuC{RPFImq*p~TqaIMxuL3p)3$S*6i)(YqkB+~&pVlCwZYsbsS#-UXou@~q)UHM-V| zCo=zNiyv298At{z~#SGeCv;bzL9Lad_3fABdzAv@X@A*OdX&p@J za4Bod!6DhihnpvZJf9!nHW3-Co2wz(^|h9lry=`H^E|H)6#dubc1DyN+UFi+qud*1 zIaV2BNAxS6o-X2hVMx`R@> zp2Vqe(0|3>A6rQc4dWLi$x28(%R@`pC(+|Qd?+~S`$s{#M1H<+_$3Nh*C~v=yq3@h z5Y$_}zC@(qAphH{*M}%IA>KE@^7Z_<3JETHHM9`2;#Fx!|77N0Wgwld#oOaeCl-IdP9cTAk_r>sY*n+Nsn)$KEq$e#u ze;@A@ORvQsqfn>KjxeP*QhiW^B6Tgi%-Y3C%8|^rvhJp6nwfqL!oZ>H11}HCPj|7c z-w6Wl;=n}f;L$uibQgj8$hvFnzJ%dGTpEu9ub7AO!uV>UTNi2aBP9TwbVahz2M7BB zW&?3jMxt`qWs#QwuMGBz@us%wAN7{hF}H~fY~f&; z<^|Gd(f5rXlaQ4oS1Il%`RP)g?Rd>+oiFzqbYs#wVPpfI7 z^NNC0S#nG%tbg_yN*?#fIt+jLZf1gRL3e>FzFmaILh~D1TpqAh- zIIRX0D~lb>#@B|of0y&xeNa7Qak*P{Qkb9jmjP#GCB^js90EpSVXXo#!;+d5qCR3X z$9VPS`uOsnRO`;eN|1MnYJ=+lDt^&!pFP@n#1~3iVRm=Fos!Pp8Tw%jgCW7j8y<>V z+!t2o#{rTiGxoTq&g@lx{&bRpavUyD!K$WsRld{Eh#C+#H`Vx6vdlc+G|PKX)c5-z z1={$lj#jmx)WH~lz*OPe+rce{{c_ijlSY>lOMSq|h4C*ND;p=Zq#@rHg@lDyXE+AF zo8_k?q=M$+`o0@au!VI_)W9J6cR@o}!cXe%-OrrlkO!`XysYH6MLO7lA>08(S;>tf~U*%krogN{(o+f%G!_|AZg@5G&eN|T?HSn9o zMCU}^)@m)hOLOO+R=1#TvzX4JIiJ7A7Z4K}+lS}7`n`^Obq;K7Xs6fyq(Al}w>5%hXBf*lmN~%5xkX`K8_t2E@7HI?_ajLIFJe0J z-|q6s4zx9!_5B6>_VMniTAIvH?IKoOb-wuLsRWwNWGM(pt+zfaGCoNb!dN=m-V%x= z(jK&U8M-dnpm+)%th?^M`~nId;%#1V>f24+H1 zzt)hXO5&sTP7l0|Of;l088NF5yuWiWKa`8J(Jpsco}oFj6MPeAwl_LD~gZ; z^pm}dm4mA#Ki&X~>`1_-Oed6-{B_}Jnu0rZslM-4fcsQU{p3Po?v_>MTK5wSq{>oc z-W6otK6zO_zCqsnGq;(3M0L`>j`?gCHoR2Lbh&%bDSp<$0hBG^Np_1Qw>ngO%eQMm zftXy1k0i>RC62RVC6SEh0^9Ptm9>19&^1C~aTP}8Q*y=Gvqgg9#rAEV<}7CkN#3Mt zQR!Q}u}72<-fVqLwQ(KUaM353GRjOCRqgC^^@Zx@Ev zGVc6g6q=Bph#cu`5!{?IoE|@S-oVXXOCdnp@M8M#c%)`zKj*11B@k;Dj}3`Rt0?%< zk9K(bv1z0cq%eK4rD(nRkcuq^nHm6z6ZAosm2JO_yVRJylNuNMHA_*t$hOS+&8rgs z2JuCq-^Rwb#Kkq^gTcyk(bOK$J!cZUT^?{b0NnlrPl01j6H>iSn1%1WF39T{=~x-; zC|FNL6%P5OFC;PjA1z?xF=S_@c_h5r5nq-@tAn3ZQ)8y?%$4526&LN=HQo2|sMN85 zZu#%tu@=}mS&w~d`AG8hnAe8$NM%!x@>{to^EiT$ZPTiuh0J%-pd1f$D3Cp~2v`z? zZWNiuGXdG7ZFKM{SkZqZk0jfGIS{4!d&BS6SC9Hu9PGVF2qop@7Ta)KlFMakxBeFn zj`=Gy_ua-e26t}2aX&iiMqiFB+5e&H={->XReKF7!l)O!#bVFAWlHVe(RUk`9qzBe znO!h=M-bNM(@c>X1*Xw|-7)~VU}M0K0Y6a!Hqs=k98`zdlLd>b-zJ~pEHJs>76e5q zU2C$nt}uU2H`m!4&CJ@u^xaGneV>sJYe9pbTnf# z^Wb)6!U@E_?ApOgg^ULjenG-UguYw-qwtUBeTBhmzr9iq?Pd>0X~yl`(9Qj^c_H`#hE7w5ifq8;}kkJ>;bZr z;h`eeSN+9IraCrctG!Kiwe`{QOuw~t#x`cBJZJvD|8}_M<2(vqJ*vTCl8wjZ1Qq#L zZdyTXnp=kLm(VoAp4W>5qDUxmSaw_vJp@Ypl%`^K*R=ymfxnzj*~>4Bcrf6ShI%tI zWvmknqAboxdMM`wr<+q$)wzh; zUk$Vg`dD8g@uL#4j@No2;g`us0aNT!!S9pxW(pR7$9h1V@H2}SW|uBDA`lOMMw;(j z19SOqz?EvY{4g*Yq>%Z6SZF#4{ z_bS$Z9(1jkfd-em_&NCD_XpcrzeDtXOm^AtT-Y91o_d?sY@^K~P8_bL|3J>38OMO3 z$Ki#JmQ@oFmb~0ah?dCho7BTr;q2$=vPvB#BSxQ$YECZEwsla;AMK2(YKF~yyM#!+ zM8>RukxGaD)7upa5Eh3bU#i>RSlZ#bM@Rca5n}YnJS*~^L%P+tW8c0AAnZ;Ddt3(W zB?u_|-hl~*W>86;JXFC_g*e`WBc<->0do;7_pX@{d5nF&hR;?#ukyVBBwfqB(l ziu#kLuG=d{MxNZpl9I|$d!c0lk85PO*3o*il}AHy@V`0Pq!d;7iHw~f)M@n4Q@3=Hwbzu$2+ zJ9+k=yrf*rqUr4>8xN*K?(XGo35XTvw}Zi>+#C9+P_*G61JfJsDU!fnH5;(@V_Toyb@^F=)&ULbrITGhD?(TO%&t3Tge%lvB>C60xGY3O#mD zhctzK^78H4>HdWp*a7Xe59dxr^T@3FPz^QoO^KYB7ceWM`DWl8J8T}s(mrT3Pt=*d zh}GkLoI^}IR~^q%`*m}{6wEyok4`~aSzI%G*d+pl4XkBGi`IU#hTn_$vs83@;8ws+ zWv%v(_-T`(WzuE5>T0D(>V3Ds-EF@eWT0CR6b}LMhGAJZGkk){AZ-#ji8xzZWm#;q zn^a2cj%Ji3_%$>%3^M!;{ddwtMMr*Sr5yet73hV|u;q!pJ_)mlh;)mKHSn7pqp!lI zl<2g8Ltfrk4}wdynqyn0u5BEtuBNdn9B5FJ^AVP0ZkWk-byiGiP4xL276GU>X~|un z(eBMAv5{YZjmp;6c1pzHp4{^MZi*C4I0k!j6MjejrkI2@)EganURysy$I$;M*BiPb zYwwR2@ScgUlvEtQt-KjcnCPj@F?#x@y+^rf-XLAdWuLWOxAH>ZFUsNa=g(_@)_F#o zl=&)x;{8au1^%ft&Lm={6(8$UZU58VFNU?fXXF=%p8YkVLq+kU)+TVs|9mu$F&6WR ze;AiV-)g&+qaqGWf&T7qymW}~!_+{sx`=!v?n!)n{oA9xLhV*-b!$eX#B=B25@K~y z7^ZpxLc1e4h0NQ^(e|PgF6I(%i*>rPu$f=aT25ZvJh6_gTBBRD`c+A&#kV3gdgi=o zO^PWj{`)DA`D#pF-Rs0cR)wn|=9wRilrwN^Tf{dFI_~Yg-QgVa_R>uY6kalXN=%jC z#=PJpdu4#hq9508NKUD4OiaDOOwTzINa4Vs%_r1#Pbog|2U&4mg`dJ&mr!Fzl>Hf7 zKUvqD1AAqnZ9>e~>3bBEL5?MSoqDWj^w6?}(B+1s|7u_Rc`v1n9TljwDge^Z11STw zAj6(1(|Y@IMXttj|FScv*-1g;4OOLR!^PdS+H{UF(>f95M;r?EJC;?dnr5b^1}fx^ zgGCJka*>VP>}tK1Xkr;1D83Rt@q}y}PF7ytQ#R6`o;gE=)lm$#%AYdWAqagSj0+8k zqlT!Znw?o*b>eZc`)sDMZ1C-(3n7A4w14aF5Hv3wvg@rCxMF6FD$}G_61$-_mbDMo& z%1!^8?YvS|W_F!M)~hI|MVY6jjPyXDvikh<7-)8m16%j*-W9AyuU%Q-s8Zc^EzhZC0tw`Dp@Kj zd}q%52Ay7C|B;t3ud%;b^iiGxy$jRvJ854Tcq4Nu1}SG}2`F7WP_lN}_rGrw|~x!W`sv#d}(Nbf5L;w&vNsudK{t z(Yo^fy@p)RAjXVw-Zffui@df=%icYiphVlb26 z+Vg1#{iW;%|7avR4VJ|vl`V;#@|Zu_p9`iO>zg|c{`GL@Z{~^W;p#5MBa=P}_@tPT zsKtTfuEzYF34_fOLkwv9b-oQ^B{!C=o)OJ99q^FT8gwR=L;3t${HmzWL!LhYIP=+EWYpIN z+E-mz9W+Wl&dhcxR=?TJCRA|ZcZ85;o2e3;1Aw_vjSlh$6VSlirqjXMPoF&-`M#Tx z3qSOujb1<$6E$!DsnQJ`ZXjRo%KVjVWmYwCU)b4gW#=)Mhqsbeb~G9v>4I3>1a^=` zcya2Hw!CT<^QC7V9%VK7I^eok6_T|Etf0X+mDeA2=d){W#ua2Nj%l;UM|Lnelr zTlAU4jCDdki16(E8Ne3m2mW0?+O^+79p z4kvE#2z*LQxj!#LZN5dfp5ysM7NXkm(W@mSB;T3G@2k5pytCjCHLW&&Yer!T~I$>)1*}ZuG;m8saK5h`2Tt3n9y#Nv|jpAP+(6z z60Yj&lYA$XCk2}8-Cm!0F!YHUJ#$B@FNJ5A0yt%VzW^qN#~^}m2gGDU?z<*&Vo*Rx ze45nTyR-dK+?mfDzId6+E&!Su?yZld1qJuO>R0jB6b?&z()rDhMfv)$&r5Rv8FH@^ z4xVn1|HlOcY{Z>1sdN<$UeP=<<5KeXpp9ydRju_i*$h}Gq{gJ*RFVgaPU9k&Q#e?u zn%yqnTeVods7kMY6JB=g6F79+!yVwHL9if5GkqfHjRy<@C}t-pWb;T`K&1u0wkZ@`c#R?jOf5g>7a%m&3Z`(tacOqu)V z&aqJKWu^}VVp3=deGkE=rNpr-gmpDpLTWHs+9hJ)V+07 zl;8J1I;a>RU;!!!D&0yq7=UyR9SS1d-57vM2?$7c4V?oFt#o$|-CY9=`8(rVe1E>* z`&oD0b^p2Rod>F=lmVyzD*yT{gE zc;l0zRtK65Q9VJ6ymzvQ==2J zd7tWGdZW%9w_a^m1}0Q3%|jk%eO=S&$gmBAL|~+VE#eHt@I4T@AQFZ;?CqifbNI%n z&174K4H^aN)yas9(`hqj0yF&(HHN{OKmNMXwQf0Q?n4%Ep*-aug8?i4!Xf}?TEoS{ zot*5C+~r-~(;EP)@VHZu)XLki&#Erp^;r?5g7P}74CUMK0fug;g^p;Uyxdz#WrUiK zd=zp1!Nq`Drm(3ent&?a_qL9J-LzEf;K=YONQlZe+G!|WIqb8L8^l0`Xp2Ci`HG6g zffmAj`(Wwkl|aD6voOq*X_@w8|4%W4P#g^VKNu=DAW6Y(!#^-bvnni!!{t(ISJx}M zcw51@Psb7zM+3A*9M;C0yT7nsg^GciL2fPt7zNbzJ}LicKH3hHIG2)??QOl4cCVM_ddy9m}RuhnjrcyB+c}%}q=nwYF@iXGHH=0P% z5Ch%4H}z)fY^_XXuHj|l>|lG1oLxsiuu2)LFdE>MB~|B?Eit6zQ~{YBCMKB^;Vh14 z0P|)#6nQj~-n8hy!rAHzk$Z>Zq^b<|$iO}d?Nju7bgrEw(OH!%$n68^(i_F^s>#zP z;>0r3a?{9~6@tl^;HNve6-{Pwyv4i@pfZ4o&v|8l0&y7`LHmPWfO}x}bHD$}DYjjI zZ>vH~mrQa>O2(<2#1m6}K-n;z83K5^)pc}qFr387x$ZH=QOXtUO8~ZGo~}X0XqzPn z2XOtSv@U>KMpQJdfmMUI`8izD1$0=Hj*f1be%~|8`ox^559J;TDsgGkL)Qyu#O~j} z2~RLQ@XuJkj)zx$Y%U7mXqdcmjt~M*nYXfibgMyX+h*=v(fI&;W4IX*wKbE>Lv3tyhY3FXuoY?fCC?QED^f%j_E$!6d8T(N_rE9ix)7n ztY+Ax$;Jq{9J9aUTho)G(j+aR*YO++(20YtRZ{t>zoLb-ADNmoQ`&lPT%I7Ak zTt?G*r=X=D;nDSh_9=)xUIN_Agd{O~C?gXM3i)@y78_2mK>&V)F!B*>&jOWXoYx>j z?*Zv5=8Fn!Q|uP>S2G>z8wF$(4SyFm3zK`Gm|_th7ZI_a?`M5gmxkub;-uuBP2lPt9PDgs`c}Q7b}xlZm+A*7 zoa<>0pdSK!Z~A6lTxov3AE*;<)FF{+zj2~PU3@QMc`gudo5fatI)&#=8p20oN4Z@+ z9S50;x-Ykw$lpxAzg?fn8X(}domDYLrxcnQp1^x3Cp(sFEvdZ(l=3Vln+7+{n$b^t zAPtZ?op?qf@T~FK(uatTl7C*qx9ADH-&@&T9zB8-%5fESN zE&(ciQ0`&Bw3;o%)Lvu5dYE|($+Zz(iO?pqI|^x)|9V$|I$=6!lrq{k|Jr(^w1)t${*kn`=hoZ>t$v_ZMB# zf>fe&A;R*rs)X{zj-pQ`-Y>CDgl`=FW=KaT90LBqxEO9@^mH{CQ~aQ&M5lS={-%q? z20`XG{U`QQV^mJvMWrsK%~*_3?G+6jchoKn(2#zs{tCbNfmx@@d2YJD6*dLS^okIO zw%}7Gw|a%5@k7jpfqg zd%MBUWgb+d0Tk(!pk8QoY|F&G_Pfe&l$#Y~`G!EswKHI9?#l!n~tTl?ae2W#zQS`YZtU+FVU@xM&2o>m2>=&Wqq*_ z7by(I)MV0l-@=+?X-(#&db#W}l)2>s7E@8>c7rb{dLv-9`W+&d1C}z{Gcs&?Cbe=T z{`H`sbu>wt`7II7r8x{f>-+=3NdW!WPZaz_Am06mkv`-su+s&{R zQ6RC#TjHcUG$|Ok$I8liD}5Oh=W1%YN?-#bp3x$rpwzLyfA*z#x#Q<5vWVy#1QaV_ ztNn(##sUyK1&!854We>w4wEMO!O-V$-fPW*6n@urFJ1(+noM?~Q9mfZ&YiZ1Iy=KI z-e}$IGEtio%j5x5$FAC}i2LR`SmY}}H9w5|P@Fl?>hCkYJZ_=5=b;o*NFL3Se0Ar} z+~&*mTE>ePKb{pj5PM2TyOB1=_4)G>s%MoV_&(-8EvapIeSN;puMB};u+eL1;M|iL z9@?B*S0GhSe}etu-2NW9+gbv@d`<8bRJF0h_lXe~*C;89Y$3M}>!A#zQ_p{ZS!mJs=* zGLeKZL&Y{JIdNqzMea(ocbLTUd&Of1GiWp#cE3&MbMdOXh>AYrDgHBmB?o<<=qFnh zJ1nGPOvD@j38D{(sZZTb13|8K&uZ>GEd<|TDtU`Qz@0^>6}FNkx-nd??*b>&y5p%{ zY`3#_Ysbs$Z4s@{F`fH~pGoS3E6PJs<<-T3<7%SWxq0a9`_#lofxde=w^UMckMjz8 zzTGrfQc!dLOrj&Cla0r~|G4d#jh``5-0|gGN8hk^!f0W8Kyl~Z@W4M%$e9sToTV;` zx}%QwQtg2V@i1$~w4_;#f(>!Dm5l=lkMRLEaSWH?BBU{pQ0Vo`^yk?Hu*LPU{3M(3 z4jkd^V2W<;m8tby$Y^pR-%J3Bc?GJR@GKklTm)`dzPNmi8mg+g+<_DHH79I5w5l~X zC{DXO^w8|(r?M~-vU{Q;gW{{BhzVF&rdbPs5bD!-vk$bf+FD^VGbsuvvIyrf2Eh#CjQLre)17}gsQ%Yq(U2jnPi3(~v!B^rq z?RX$|)I1`-@%L`HVHYOHK`H8_uj|UHc1{ z5Pa6RTe>r*Nus+ZjZ0*iiClAX|2NRc<(%wi}vH}_~eYi;%Y$}DG6P*@-qc-JUvac>Fj8D|l~O6+aCNQ;NGB__+NhB?`S9%C`C)D#oSrQW65H*W5Yc7+ik3O*w1!*s2RODkf)&$K@p*$F-&I*v#Qhu?FEe3BhhG&G6n`V zHUrW2*xP-kOjD~-?-QL>z@V7<}^Mv}@r`$nkAL_QMGT8ahSA4pJi!T$ah+FfbY z&>k)o1%vbjvj`p?S2~RM8wiY@TtRs>41nrJ=~puX%!ezoz3IzgFUd7_l$ZvbD07RI zY~5TLgR;YrEv8l?gPIAb&4NBd{f-x@l|}TqJ_hprgPEck$xLkLv4H9Tmf|r}Nvgre zVyQCyc1*n@Uh~ak(VExPP?2WN>Z0D9kEr%YoJtEAXI{sZ-}RXj%O14WfSXZ4H8U3N zml`dSv}@Jy`>LglA|Ld zBlABdK_7A9T;1L1&K!*}hC7STf)q2 z;NWzkHH)yMuy4y(zWde2^^u`x+1gtZFu>*uyDz8Pmpg6ZMwjES1ixDzls;{h6Z4Lb z^UK#&zIX>vF6wZ1rGD^=JbvcaoWQ`&eH)M6{j@~fz7L?}*Ovv^Z=Xe3zI-L^DM7u} zXuaK)Sdg5Ea9wH%ZEYt6p-Da1WmWoeZ{J~KFD2WRJ1cMA`wh-mUg)#V4E(3p-Pf-` z@^S?bx}8EM!TE1N;F?Xy{bzl>2$p61hYuezQ?;v|=SFatHwK$5(1+MK>9C(Z0mlYL zKZ7dEvXj8@2Xe!@ntKtH0*Zj3T5NdpvdXjoXn%Wai=i*RSS@(XonnT>Y;@ za~Aj31~*a$wG$F?xqm3xT9j?2qE-e-TBJ^#g{EharEPPS6N3>*Tm3!w$I0FQK_gFDkHLY;YJ`N8LPhOa#iTvy~ zO<;JG)W#^nqrLz-&zUus84{wPghy*0!AeL>*dFz@?ztTduO1ZiO=7vIOmJ`D%{_*J z0_7Oj_RH8;_Lc@md;H@aT7MAXq$l?fB10LJD^40T*vt_aDRODMRleoTOniK0RKmc^ z!xM1vztttc1uGK2*P~n;Fsl>Wk_{5-4(! zQ0)*!sB6YtBK{)`0Pu2q>4~?F$LUYUXNXRr(*mQybh>aE1qkW%3d=hW^e|V$t&>Et zl24q}@m|Ox!(mPHkTjX^OMpBYxJc&Xr6TU;Bc)X9h7~X;>W~Dg%yjXTmwM3VR!=n@ z{I;Q+MebbIp@x%e_>asYn9LJ<20p&g8dA^ipr$VuU&wjD=dea8#Ak23v9gfqxlE_k zeFCUblM*8}ExTW0*F17RSU=h@=;RD5Ep;q0w3p!_*do}J^Nit^71{4|-Fh%mJ<`;y zOc52mysNgZ*iWHctf}WPt0+>hcT)pu9s1POZUCh0+{+oXM%b>sWFoe^iitUL&~j5Q zMi7%D)*4*=ykv#;o@KY=n2bNO6YY`=iJ6a> zD(G&9No%0OvVQ%dgpx>5mNt0c=>%}mpQ=~te`Yfyox7E9E}t+(n3Yqeu9Pal8Kzd{ zs`GBc-iGD%${gMdEF)M}`#qQ9HgA>41MO@bc-!Ub@;+;{XJ*Vd@N5bbFPJn zs!a57FgC1N$)2!7Ijyr!k+9>|LpN7CPl&8i)J28cRj_VW2{vSjIQnc=N~ccG@(G5}IT~Lf;N= zL;A#%8vH7@MnafAnr;d!Akn%HXy2?BT$ELWDNyDy z7mQ=ssjlA>dnv4~I3 z^AfxjGGh^T%dWq`I5Wk#x+GX81ob_`50;zJwjI1t`$P-Im6?IRkVQB_=W}T7(TlB$~1sTM#ZqLJ-fD+S@ zy*Y!4z~QQ#Koujf zMsClf&UrSs!GmKd2z-ym=|FOR%U2_X_z$=lg$N=&$RuQ7F^^^@?<$CYHouQ7Qd3g0 zy=@d{Ji@N-?k)BS*q$)&uR>ul(r7|tO?-{}$&tfyUxtWO>p-@~(G|IFZ2CuZbVfR> zIDpQ7Kxw^ z`iC!Du6a32j8r8?aegtsPl#kJ&p;b|mlEUrV%P*^Atr1BYRA@Nuv8rMEG!$f2=XJ; zg3uiZjXi3&)uP(K`@(X7-|lsBGp0A$Wdf}|FuQ}zDT>|a=^CIULeW)a^;AYH)9+LP z{@Yt9dD<_aA2+}NBog_wZ!!4ptMAfoP(ymYbVppD6qcPBATgYJA(p;4U!^1BuGt!p}Gg%ouV5>6fYx>H#Ja2yANjdq#@}1^Q z8O82?3ng0Qd0$&rFR8R~6M1N2r8|X|YqqDT$XvU2OcYh8Y^w@b<&>&4(nuy<=)MO-u=50A-^%C}U$|d#DK?OUs8{rZWn|$!C{0 z@*26M(stqHJ5V<;+`Yu4(}G5EpAN!NQ!Vd1FWrfQx1_n{MswCR(Y-HMJWFCw%eo5nGBhYs$E)9F-b|TYsaG!;=i;R`q=l^*<)_*qd^(@MsEt z6!ASn&geyL1mhW2de*IYrqV=Gb>bBF;-Eb$mS#>q|eF1#@4z_SXo)A ziENuis=GG{&7X~pF;Rt`A({9E1o$f{Ux#||S1{h5S0kY7I}LiyVs&i>5A+lwx-nK*l2=J8uv6MNX$1Ce#C0h|uQFZ6klth!9PIXxE{55I$ zgp>{!<2u#ub_Uoik&5k(4AefGzFeJYP@&$AZNQp|LyN02j3Gq92er9dbiBLC&+#T> z(0Q5gb#~Y2Xp}nhr0G?|nDER@I-%;)l&38p~6wjFy|hq4Smo4NaOb7GybGW1~C+Fv;Nvo00IF#*+pDIK)u16ETNLe@V~< zxlvyGYu{(&LD-+>h44znhZh2Mk1G>34t^D(Oa|*GeunsCLs0&{zO4)vLgbirC0*cV z&=gD6sUPM}le-0MxB;YXQlC2oBZ8wsgLG=RB4R?DlXI%d%;fTXF37oD_$ZK5n&AIs zDiQ**6fAndlRKa7s!_aeGSWlC-y&J3uA)M(2$3W3`gG|`@T^fhTr(Zg=Z#C_e|8cV zci(DB4U$gLqhPbYAv00TVb@xIdqtUYV>}EtnROqH5ZZnoSW8hy=sEJ_wc$__%kJjh zR8JuU!cCF$3}lco+3Z_-{2L0n(}j1*60q=wi^V#>o}S&pfyg-|r_J9p5a2%;FH^L! zVUw<^&{tB78`fE6VpM{V{(P%ItaFpiQuPOjQ+IsDBuS?|aa#UWbH3e5eo93oTe(gTH^%i$x3I2auf9r{Lc*M z(`?>#wl_D+LsnZxM^_SkSxQ%zGj0Z5hhK%*1s-cv>{V0hiRV76wN1=^p%836f8u;l zEz-Dc{ly52FC=6t{^k@#h{=pwS|@Z5VVVQ&3gMnP9b zS=3#MuX>Z(^#l)c|0|$TJw=b|L~)w(I8D!fxt)F(?qqraJ)yL zHnM~N$d4Jx%K-XL=t0R~FBU1dvam6bq7wi7L6L*Q$Vlk5BfVbMo*g#UZC1AJ&)^nT zHo#^oMIV$N9+cM?ZEbYZlsfsv0r*YBjjoXgdRRQgA6?k+*IK&_6mQu8?H)h1I9`}J zb_eWQFwO?*&M;Q~TFwc}KABCG8LIlxxkO0D2?=R z($DRSeH35sV`mJX2T89!`8Di8>o*R?_4^~2;Rgj;YxO)jg`E##^HTQ znbcV_f$tfZt00E2T~Ee%QCCIjyaLZ-0gD4POdtsy9N`*+Wlo)gHbgBSwn#hYVsMdBYyh066Yh9}3!a?~|zJ2pDZpCHS*S#8I7 znZa-iUNyOR%rEidllP14UKsu`kWlE@N*V?a&>cblIlH)Gtj>%?W`2Q~nr7BiJESMU z#S_6dp>%oGXwG`Yq-$?&LIZR;e*R|Hz`g7d4r9`F!W*;Z(AbFBjkOgR=Khd$mf%~~ z_7>8iw#re`vaO?etYwn9!kM@btn>iji(5booH~ucMxbY8BRQv?cXP5tT4Cc%;b5+m zpzA}$-vX6mA?5j2rq?Sj5Yu0Zh#Ff2lN~%&JN}B_Xl~N}&i6v_x5BQ$eF;d{}Ma*{)762S^D)kRK+BzAE=%r+u zf;3*~1=idMY`CdSU8V8+Q(5X_qg&?s9Q=@DQqqymnSPh$J z7_An8O%rURsVN0wI*Yh3i#NaUMXSllv5zJeTf9}Y_Q219OTVjfCp^>{*5>Z3fAVtotJgK>Ug3MV1h{rq z8Pj#G#MF02v>j_c%gwBMoKe%(*D+>EF~iRCroHq%LMl53>I$k+ncH>fd5Ze^x*YIt zo@D~*#}Z=B=BMeMEmoC1dv(^D`y9;CDzpoDQMibR*$Vk$uQ^6|3;09Wik>Dn+_L}H zC@vyumT}qB%f<#rg{8PG58;!s|8S-bJ2RYmSbHdCKYkL%#K;6Q2^-cN`q`T@C@jXv zm|bpiR#=vo7B1O|6`-mb89K-WFUt#uO9q}cc|ud2s2NM5kWtIP|`HG$K!M2A(s30?C#(L|u=w7CVCEM{PL zG;og&%k0)}tJZrd?r`RmR9aHNb1Hp_Wh6Ot((4B5-2KPOm7JzRoT3JXw1+0LC3ESS zqn%kT3fH_y&+{7lrYx)DWd>GXZMI*o6OG~?T`6^7 zWsVL;=*O&iT}1k$<>rWFI*W-O#VLrG?##DZa!Hj=P* zub=#*_Qp!ZUbh4EHwr5Aly0J`H)pzWk@`KKa6BJS9gxmB8fNpEql}r!{d{;QwtLf;vt*B1pQ2NbK;e3*yd>b6(-}`0>F=fbj6pJM`$kVz|Ao;o|YKP z%xz|B=`mO4^J<6#yzLlhZEI#M4UXOTY}OD-r#B=3lrBP`4lD`X&w4HiNd|ZcCIvwu z1XhezS>f=Nj40p0+^9IAHBgETtc9eCGWI#f-<)k1|7u&z@9Yp2sWOnF+M7F}0uEDb z&HFW=o#ke&gx3#J=`m-37n{7%2zt>+wZAt-wM3Z17 zgK3^PtYm zyM;Ta#SL224Z9sS4)7{2D(Fdmi(5N>_@~>cIZv@a@-FPJ{m2EEEd!_bpQ|A<3o&v0 zLWk`ys4v?~;4)?%n30ht5OzWcxjkyVKR<<5iH*4(w_0W$#T%=+RBDT4 z7JswzZam0oB}yB203oS*G#(T2-rXyNd|zCG$-P7^40mkYU4HL7TM=3LHvYXyFwc~* z{|Z{JP}$4@eJl%~2t%YAgwX~{vg;f}qfTv77$?cdlq?%XhD%~;C^8M-kjqlZqK4Au zt-i#S^N#*R&KesnNwsE4cnoMTx7piqU~{p`2CnM|_?%R&+CJOSq8Fz_QmscOgq;amzKpl6mheLc8oSlCZc9Q6z!f1DQt`r8O{UAFX zs%YC8G(bC#y24(cJvV#Ipy9UZE9P3zntYQ-U?eiB_raC6GNYNA=TLFCkp;UiPla0A z+mCIgEp4t0_dMO`>*hJju^Dx0LiMD%@xq(pxcT?n1fBE)egZR6PVn#4K|IE_EE@f2P^<~*DvT@^0&MlLDw zE=Q`k`|8cX@G1@mxSOSVz<>`*wLrYpf#L%_5|pM>7bOz3vfInPU3dm>JMnc|-)d$K zbX%TV(Q>q}b_Lo-?#=lK{YR08zOXfqs6LKS5{gR{Onvjri$EvLt@mJ+$wf>3B@sKG z;)rG4MP9<|i{JH6h8Wu140Pgx?yc%*a+m0gYY0X1wc@XZaivJ&p)_9LpE2VZIlXM$)2kM9Dd$DG(UNJ3KRKW{ zj2=eN#Hi&p%YL74 z*rA4^1KoEV7b$WNW>+CXs1*3>y7@Axq2_r;~K>n*!Uqk8vybakze! zGY=b@YgQV$1^~^Ne*Nzd>S$Gh&F+cwP%BRPR7c)c%%_L$P@i|$Po;5y%L4NTI~Qb=t10p8WOipG4a(w#?>Ce$sSR$`rc;)+%#z zAj98{zJo>-Z#+4m9eT|pvk#Ac;m7l}?W>CZv50(!1QcK*s;le>T1aZXFT^Hm!>%JRnF_x~?Pn84ZZ#?Bq1p{DcEekZmc z^NJjSf0ZFPntXUZ#W3goe|>Z=Lt!_oL8kq)trZ>EHZOeHZA8C=*I-xDffjpE(dznc>0i4tNhnLhUPB>@T^34x8%%Tn=`_U zb=Y5nFWq95uj}bYl8Ye1dh`4%$W076#Oqz=0)}56#kt_)$qELA8?T!KwfNq?m%j zznh_@-?>C6{z?Qdi1YmFALpii*XH8?^~4TZ9y%%{BLxMM02>1X9|IpBpV%o&?31&Q zkkC*qO~csc=2oz?+1}n6a<;9{d)DWHo>!CnqEFApCh3ykV(ud6?(E_MYIK&Bw-9i( zR>YV&Gx%v4CX5}OQD-e6j&6J86qY{~*WTms+E zS8)Tc6NJZ2vEHPXiKHa4MWZJJ*C1N=+#=CR>%VY;oK z^a~7~D!Ymor_>WTr{hIva<^&x6xr|+t$S&T+N=(&PV#Tdx=O!ZLoGM zED?0JhHylfmo=HIN1}NV_eMT_Pfp3aPt9_Z0WNTq)pGH|Maoov^O2YCq8uD)CBaBh z5iWV~rU4joJ52NR);+7bh_GKBF66V{?-0mG?5_`1N%mJXyh*r)bNSLiYo~C;Rd%UM zmwwz<6C!8wLV*q3;+L|<52$~VjuGj@?-|_#$t5%jGO^rN+nO)4w5 zXH$0^O#>1^bfM!pZc#r5m`00CkT5%`m6E6J8tjVT@f;t|ClsnT;iHek##dyaO=nKb zt(J9Ui9VtL{_WdjSHq()4MSDO8L;8r)%8tI{4JAJ)>!E+7?WU_aCtsXc2gY&WErf; zn32tsEB)$~l#B!qk;fRn8^63c*j$AL}42rY|!p1Y6etIMkOCH8)Tkk{g$c zvA6F2_dv@+iGj*$%UtGQHnP;Mb#F-ENGa6O(Xq(*_H86PJ%C#@>uUUBw-{mkN|ulJ z^%oj+ZoGQG=KaZ){RRm~7ghW0=x9&DgvRLH;|08At0DtFm zjXSL}|45lhhoUU&IBT_E6e%!9^}%dBQEi7vTBFExyltC}u_FHh=G(bWj04K?2jAn4 z_8*L~^j^WA1Mul(amuBQ(dux@Vz(>1VGm@%lNxV=O&Tn-r{_!B!lOqKlm!ebS!%_u zs4czFy9n;btQBTQoNFWSr)R5OB_gfw{N(-U8E9#Th!Gx*ds=)YYhz`4@MFI~KIJVR zA1|);-dym6;6Y9^qHG|%k5>)X0x-zYe+(VrwcsbFCnKPQ7}LQ*E;f(}tmy^V8P-2^H=Rw)k5r%nNQ^o} z9CShqv(xl%Cp^`IqCyb1&D$RHOsbomi9kX3GEY#_7r5k_BV9m-U}4m!f}ETjoOCLH zBjJN@s8`$1loyi><_=rVZg%$yQc_Yn{z^|Uh~`N=tEpNiTL&6%LG)h)2WHrj(t#Si zwL-oNof>&>y9)qZ+B)p}jZDP_d{CWfZ9LPYa~w%Eq2Q?~!5#Zr+?Xpz2k~YlY^{uE zuDI&(;PCoA&P~5=fKa?E)oB6o?0pK*sU4Yc^{4YUAf)Z;S8~fD@u1CEi{VQfny-6zYXD_Z?zu!|W3Gcv3 zALPuLs4(5yPVqg{fWP~gt?#_I?mjiUWe_U>c0VygJ@bFQsi#{?YO32_cNUA#i70i8 zCZ>deUdKHF`>}`w{}+T^HI$^X2W#O@9>=V*k4IUFH}@@UmqNp(5Y`eDIdTADByg$7 zUQAd6)U5a|$Qo^#SgDiQlg{cxU3+JB=Oq_DyCus39)nn$aWyd43A-jS+p=pO9;aI? z71>en@T$SwpozX#Y904>_GS}c8sh&4b_a7$*v8A2F9Zhehwb4L2JhagBj?tq1lKDH zb4%Z;XL3Hp5vJpFSOxVRSUgV9fn%gA?=;AD;sEZke0f9?tR}!+z<>Ea#}aG_$t8F& ziIlarwgxNC#|vrNprCc%m)b|qaD>Zl-M&?QI*rJ!`r)?yOFR<+@IX0;E!c{IW)koM z?p#nuQ2c|g!n~ZEeiWBkMTuYrzxqD^=J&hJR>UzF1Co<3xw*y$&pI9%Sb$Zi2>xQhK+zRP$I;vq^u z6FtH!Hg_|R_SWI_arX7~@NuUQcpwO!#!~~85_9go!HkEe=VnB83`08r09A1Jmz&VZ zDbo_8oZAbr>#;`*tH6Y3c|zNzD!9^XF}oO|Cx->`1PG-+Mj~{#`HGIFLw!52Qg&}~ zIluuh=&-Tch9#D_yWT66rbbXxON&M}=HRGWsCjD+07k-FyJ;FHiQ`;TfSrbX#`Jq% z7XpDkT3Q9*OLN9ApRdOWI1C67jIRS+C}c<@Nz~oi)eU_@1F*mi+Y52db3Y^E=z%1G zR{6(HkM9|GKM}~ZEpeEL6*@gN8@10S^o;BSv>ZIuuKjS2FRfTrd(#?k!QAa5JfFeo z(dZo_Ok}npc!^8vWNC1N%Xk)m3@QNhEU-G-3823Gy@IzvpnkI$caZnHFuYcWLrM~8n44Z}H#7<`?r>dtrR9swK*zueoEw6g7 z0~gqL&dov|ERM@l3#@FcVEq3Z&`wXM!VSM?(CAN2LWq0`FeKg5Ne$6#BdXhAD#UQj zC#Lv@GXOvG`?=dAC*K;L!``vCKB|b7ZdQ5po%3W>7XXYbwac#aGpbcS_89p|@*=N72KrImrr8PWCe&#)jQbYLInCK=&Y0=ES( z;a3P2g19h0`*{s=@aZO{&R+oRgFCPEgTmcRVDGrb==_U9gx&Ub^*Yli(`dojr2n2R z$VcRH44`npvcf34KYp690N1{c4p1ae@H5DiKL7ayZj8PU%U%S#{#T=?=%0F1_b}y!2EsqzmDoS z{y3HprRVPMrvvSy);2qDN0OC}WYz%q3fvh&|JT#9Bmyu>DM@J-Epyh04<9a4M7?Ck z$F;Muk&7B1A99Ox+tq*O{$2`EhR_l?*-l@iW~~IPPgE}Ah0bc^N^a@edKAV({*N2t z-1@9-v*e$qW!m-abg;9uL@d`F=FOy2zI|lj-es)PhoE6NIafx zmdP;83rJqr>*@K%(qyuCz}+nA+4dbnV)gFW1D$$ku@_IK?_$w#C84 z1rWpNpxExmsby(tX|NKIY5>ynqq&_}3&dZ(dX)#>$P@eg^UHBv7t%8XEB|1Qc5XPx zC_)-XfQ$v96U%|Xi8E8i?|$|zDIv_|j?aZ(3ooS!niz z;3)nI&JXM3;k}C^NQAEczWH#`T1!SRN>z!N++npCX!AqgVURkJB#jtoK%AcLOpKaW zj2b&NyKO{U#T87cj^!u+dh2H2*`X>BFD><|0wCE3vWH)zZa7JTdGu{GS(4dxGv5U$ zUN91g7+^^9x}AE9mR46y_4YClmOYMU)14D%oT-Jk zsbd{FUpN@{B3AK+lc)tncnye217Ts6E zG}>C`07eI}kaDD1)DGgda%^b)`qMssxY+3T-~>fnhzcfbRSpnb@dL>?>H<@M=!SAB zOUlvNdHkftOp=Hh={sJo^83V}QT1()TodoSjA^wf(T0eTKIh5yR9d@&-NOvs{+ z=Wumh%f)Zs{cKIv<76vP5MgxkZl=-)pDZZuNOzwEmudw?usLXe92@iYzk7_P(aFGB zL8hevB-K-N>?qmyFJzT~m#8-hK6Z%O-rG|E55fDp%PH5$k2+3juvPx`z@Mw*bZ>`z zj-P+ZG4WVRoaYUrACDc6hL%z*hy)hm%d@SY6$7DAWrZTmO5clrlD2pIJG_H&yfDM#+n` zJ^gV&w6fJU!%~GBkph~f%d`7@8L<@A){cGQP0*8?6e-Gd=VGxQRG;n9RL;&B=#X>j=K1*eaE|6n zUeOaCbr6mNx+`uTe6_m{#p9Qr&YSpQt$~0*^{MXOoQiDkJCI1Kr+E;iHi1Vv*7^2cF*g^@ z{!*jPP^o!{y~@jw&j#AAj8ACu#BG!NCHYZ{JFVE zBJ%nLQsV^9K3K6ny1898(`Y`DH<#I2-5<{H7*FqJ1LoE8m4Dyl+iMhTh56{93_?X0*r5~f@yD9_Ygx+XAdsFLT;Z|f^fB!@t7}54tcA?i) zR8+pmobC5o9BQ#L!8^2g8yeQx>>ab?c_vONWpjl3KU5QIS*@i!N~j$zSwAr9IP;U_ zwCI)s@4>Fb3@i*x6V|evD+Z)z$KF~(D^$+325!d%(?qvI<8 z*)~s92XP93{9cLbmU(H7%x@iEfd&1G`)DxkOe)54PVFaP$Z2rNiruWZwg9XLpi9n| zmUI#@jxEY|MD>~nb=t;B5VBEZF6%!4M4;r@pmb|sC8u&q!mUJHY4&!ffT_tFkP!;K zhtV-RYlGp{e*6nj8ddab_jT<|N9vveuk8bld&_q{WXT-P<-fZC zC%UW=f3WBnnCf7af5B~l`UR=&)|kK-?U%ng930g=`#Z({e{v)z58O}xLb1SKbdch; zrm3WcVW7q^*5rAp1VRs!gv&Gxb7T&HQ_N5;#SLm9K%L0^-Krq$FV--aSp`Z9V5dvo z>3_+U=<)zIGDtW1;~jim?x}n!d<1+xV8>)Z`eHFjk%v1QR9~fb6R;sQziHut#31pB z&iiY_{olIZB^!*{&j>gyvBSW*62H|6A+nVDIt(a|8e zL%RS(c)4_(RIt+Va;r860?hcpVw0};_uOki(vQiUma+7j#Wvjb8d^8*5Lr)2)>zGc zc3G>33mzGUfnM3+om)}#3u9Y)8}5^wdd){0uCBesaD!w6S_lUV6UUl&ro{ z2Ls@e-QRsd`nB!MG=Y;kJ!-|RdS>Di#M|uyNrF{AfI?3O6j0Lq7RwmLyzwMve!38l zQD8g|zyX2jIS3}!qlp7tfUN*(1)_pMjE#kqYYw>NO)V`7kX7k`EVyTEBq&^s^= zJ>b*8BK$*U&}1O}_bS=(*Cl`smYad<>nF~~zij-yKys6iW2fHjMy&$dEo%TWCOSdP z)>(z~@6{+?YrO3@=S4*55u1bL!?;_Q{z1I~msLQP|7deSdena7D-$hk7p{Zp1jotO zD2?JT5%%c%1ue?}V8dRJdjlAp0k6wSR%g{0WaZ#8b4W8~w`odwr~T4E8E|rc3+KPa zJU!`oKp+WQkENrj$retouHb4vV%CS z#>4I`7%89`DD;RWM6yeOsE<>O21>cV(3~U*_FeejXiYq?`{Ahv0rIFctfRcVjBs{A zgX!ULPfhJfNA>HmdwQZ>2}F6pp`ob#xU-I!oz`uA21$?B+WvM97A{%nc6nhWv9^oz zYMCBzfS}JokmdThM|E^pXlrbC_Ir4oi&pB+&W^NKOMQF)-Cl|LA|T*0usadUVZRH8 z!OAcKap68E53_QvCLi$n=1&BxZNt^3mX{;r!sEijb-WCf$DAgzlMBHJB6RK|O8T>< zEsSzIYY&ta+y=BZoIbu^`edAW9uTdWp&)9hBY?=_Me&2C$;iYox|TOMuW@fQSl6 z7chiSh0sZn7DyoEKFsXd=k9aw=llgHKTYmENUHWBa^s6UH`-wscx zLL~c#5B*9UbpdlP)6UkOm$7$~lk7LKXp^XF z1Rg$>^+6(8soE6mDxL$Sfa^T}Pg_#{9{7aVCz-R&b&xJmt_~|Bt7C}c`Vt^GV^Riy z<}z+yqe1PnMZpgZ4H+K@)CmfrA?G|ZB=&s3hXS-pMqN>-iN)QA9+g%DB{4A_`gQu) zU1Tw^xPb*5e(^sM)FAU9bE^~nMxvG`4sT;os5}G0V5ugYqKXMz8E62p-5Vv(h5$BO z?t){S0)|Hb&k`BEbCO(Y&TtT#&FlD8F+o&94M5HRjWUnbQPLEG0PgLl941JqX7}}#n$wj) z#Xst1Saq~{&~W4tVX`DRvH!Up%C&T$*DrQHv6n)r!%{Nl2LICVp*V!B>kcyS+Ejr zC*{1%!TA>q_Dc~M8uuSKtrP&8uuP9WVS$L`*GU%1bHE3gKj!cj>GgGvOvaUHRJrtm zNVI`!kW$ub{k7Cx%k9NM9c}OjjGAg??y!CBKQuq~=+F*3i1sV)DqgEQA)*uXqZ^&4 z&i}ZSoOQtnMY_1Ki{ouA_AX-@CpE! zU;0mU`(~+v-}d5vW$vKAABvT*KQXur-3Ne zZq5CH$NAEw$mQ?%zg|@}N4fj1cZ>QAAP+^$RRNE`J6g{reJ%C1C=#rBG~YA~xp?trxA&$chz_!c2-wr7 z7gor`Qtr68jkthyaaD0~)hpt}r%ve3HR6YiPX!;orqK%lD_hr50O8YiI^|x1Os61E z>tDW;BNZ^a=m2BT{QQGKWvT$WpZ^<@|B)l8GFBNnhK&->Vc{PG-2K|l0Qx~VGO;ui zdA=hhy~!*Eq!J1U=sKaC>!eo%eo!gXl)1UNrMac0C5OFf=e+eKcggkYb73B=uuz;^ z-2`BpNF)-#hhlj%r43zkvm``r7|zen>U>2OmM^(;?X%b;KC{zZm2ppOtDD8M2_|ka zE1c%KE48I}61e3aeE;^B%j=gM_WwMiA4d9W65*1z4FF~W;YP0#l?yzgg=%DNddx&k zUd2WaUn)FOFEN@Dc7!U(Q=x6*G$3YW z@TGU@7qIgyRL@{>XNJpmeQNlQeo{@JPJgkc*Y@NJXBNv?2s3$RN-1ZOb9ndtwP(26 zIJt-#2Y-tKPuTj?r_Vw9GKLzh2KwoE5Yn-aIsKz+iEiB25H#rLsMr;3kteW#!u7Yn zLVgEb6%YbFyHF5s4Z?6xS+0DoS+A(y z_HcI$r4W_6z_|wNGm@z6W(sMn+%&kv)DY zFB@a6rxy#7nQLmDDoV$yUwNNzn|liKnPvaE7T?@TZ7SVg2=NzW^+Y@S`xBM9qZU6- zKLO{a(!<3hdSU3_{(KQ|^fbDsg7~z7N}1PDcRIn@{u=-oKs|ro{2%7#=CPDc4GsBZ zYY48xA}=E=X!~38lcQ|bm&epIwrM}7KWi>}TgTKlU^Fyj2iDAWd3kW(rKj;<0iFKK ze+d=uUP_s+S@~w>Z8itA6<}A*5ED42652aD1QHWt!MsSbhxPxnWgfIprvH9VHCpp{ z>4InDT}@j+Xam{#TwT~=2AZOXrl@5gz>AhWJ+<#Lyv zo$0tEAHNUH8T>3RIl_Vi57O zS?@lH>1q!=ecIa4&_EAevv1K`KrkeyR6MU&=z$zdF8jW*v2I+izVtnL8FQIBW0w12 z?=lL7BE1BTzUd`*`gPWM{g6;Am)RJ2q1_^xOkP=7Sy{PK_wmimeQYA>-$YEH_T7hX z{%V4jukQC||GXal_D_em|CRq)F!{ef`S(-%->3BN)$>0JZ2xz?{Ig!&5#x zy4HcvD3zZBrWOA4l6?if*xA)1>H06?7kuMpyx;%zYrn)?{D<}0|E2%tS^Kvd`2X`g zU*liyTQ7H3S62sQKJ@iHmgrV;7d67mk(QgDo0j%YU;ZzO)YR?ch`@3)NX@B#-%-63 z{Y#X9z0ctrA>aSj6+CnS`Eb_{ow-VTRxny4mw82kLc6k$ojiW`)XP+_ zgsrLF8D>Lq_k6-+o<0@<=N^B#=e@hFoc&&?_B)EROti-D-KLgYnUMksc# z>cNr+G;BtQs2t$!>DkGRl*yr~x3(DU_=&FaR%X!Y((-{E?hefs)uaF1m8j(}L$ z-J9#E0(VQd&HbN0_vFWe0s)dsIR@fxPtI4s?;)R8cB14k3Y70WoFGLpv0gywJ}IPP9HkLwuIt7<2u3% zu4?S=cA=Uzvot9!X#-C^u|c>Fw{?RLPlC>S)1CMVIlme>Rho#>VUTu$4fC{0F&GNT z5>jCG&UpZ3zct{fX(4`Jw`Y?O%n@ z^6xu03}7qf_L(~zf(o<=Pnq{kazdXm+B4OKS=#qpEY$NNqrMa*S_=1X||oZFlugn&u>M(KJoVF_Px8*Kq^jS>Ps^t z$oS?H&D_7?V&RV8JIV`XMdeFuYTGRa1(hDmzIFgeMFJ$ui32$xvYhV}O~GY+nu$dhuhKu1oPHvgEJSsNTP6j3+|-h^%N z`kbFJP0st%Ygon6I3eX)%5cp1IWzGek8VAR|9qQ`0s*_*!!0U${eqGos1>4(i)8-# z;QNragCWSWf)KsN*h&#F^6B8F8|V zXQrLD@~Tb#W8P4ui{Dt8<^uOP%m}u4yM^D^hqd)GPNl)&oafG*JHt(yo-PBx_#!Nv zEhIGj&Y#asXOY#Fmd-Jqy`9J0dC!b0jNovlIDSirCR^LH8*FSR*j35O0|wF315M5{ zoNyh|0@qR|coSb^-gv=|t*MGW>}UU1-}<*`bxbl^^{k`s>wchU*v&d3g5Xyrxq}5;+}De&SfYQabe07UT8-%6y7ks6l~Ga+ z)i!%uSe50=nN#D-9G=rPTN3g#hkm)bl1lJl`Sb|@?IP=E>lMZ) zp!^*VSg3)Hw&l=zdl(_KEqicM38^=4SDw(7ywbYd?;nXTKsT%!h58_MBrx+29B*Pg zJNQwDX{7O;HqEIn9}lsU$JuxxOF8Sp38h+B-Wa^Qs9hgSeUa|M-F$bZ86RMVk5}1m*)%n-6lHGE zs2vVzeS3=vTSfZHXV6+O-eK27WvoZr_@k!x*mB3X5abL`s%klYcQ-{BMw`G4?lyYR z8w&-(v@zzxJ>tQJte?64<`UMPyRe;8%c{h(6_LRNFHipq-S(OEY85)CKxCCGUJV9G zc3ejC6vSUp{nJ#>%#4OX!vvLI-nix|RC#X}W~T`AptGkPqOY@KEw{If9I-~0j~x3{ z9oMRlgg8W{br)~v*7j7Fo z{#2^+NqS~e8N-Jh;}a#(yE9kX5yv1WeMZm=S#mAbX#gD(YKQf`zMqgHy!PtK7aO= z|FUq>;L2Mg>$@2Zv=r-V_AtUD2xGpN9wnA0(%MH32SV{7yuXhMnBqfqcfFShW2DE7 z277pJzH%=Hy2(&D&CicNLpXWlV@LrROdYz?Kj|3p;#VI(o!yvzKEbXAjOnVGU|{z+&9e@sb!om!}G_j4#1FNavo5fhDQx5WpM z23s~xn9?rXOP_*2%^8o}+Y5%-rwqmNo~WA)Z$_R}9_A9+d3(1v-fph{4G8+SyrU+u zS$YLUiIY-CW62^Yi1v+ir6=j?m1KNgR4|^V%HYY+W0v@9#;Zncm~u{u(W@&@DlrG- zecY!yQQupwSNpx4_hbZVE!O-)YSFVC5GI8WWpAT)b@ub^Y>IL@{*dALTYX*F-s(;s zzQ8%&Hi(>7XSa7B3`cDbdlRu{Cr^AOjThX%?e^pK9OS{Vd%@MZF82C*_JrzAkj#BTQcqS=4UbCh#N{xd#(Nhy;((m+Gn3n{<+q>0I_+v8fxZqCkql+ zj6~kqQgbI|44-HAcJQgXGzE{%^KDJho|+!d7sC>TWw7Hls!?|U5UlROBmvqnpP zp-WTqdz<};*u2Qi)1|T?k@^(HqVm%n*|;A$UUZEU`B$JG7xuuS+B!r30K{&uKg^TwOWTn+B+>M5mZiy2T_ z34R=gvxreqo>0@uQP$RHf%bMc?ExBD@eS*^)mALHsF%kc&{J@OkHzA*&8WBhz5!;r znYQO&NY?S(KW?T%99))GZt5EUK=ro}muIA_oj89=^QrP~eIy%NmDED)pIjjRoB#DDkJCxk)8c!yk@mch_d0SI4E3WV&p%Vgvh#BD1%z z3AE7ZOnFF+5??1Nu_{ViUmr6^Su*RtUU*kg(~_yQ_B3&7E9VQDvA)Px5;&-^H-ND( zs+^o1V#lfwDNFBl?{IQJ46QVb+vN-N)2d$G@XO)WZ1~m*a{d;kn3Qe-`>>tsj(BpH z_btNu<{|q60Sr}9v6UM^UVQtWkV#+=^xkz1a`o&&IG2mlRkBg21`$t{AuE`^PDbcr zU!jiAZK_01<3iZBa+xC&^dG%p4jRLS zK@Uo{I~yWQEi%t2Lj3w=#^k7COfSE(5MtXF8^1!tD0(l)%o%beP9V##ha2l!kjxPY zYJB@ha@vW)99J%>7K%>c>g-F#2OGT*9{c(>BMi&WhPgdN;(= z%sXT{zC-;pX}E)Xe`9l3>I6(2>JomN;5&>&#FQC#Qhpo#BOpKBz*Tl|@gZKHoeNW# zwlsdMZNeeH!J*YYw)A|`Ykh=VRKs400}@&CuAuy9JEOYPNu$oGH44$fN=HW9NA3;vpt=zji zS*#D6RRR9B29(B~dCftiq3))-0QD+Lt8!lTa^V`d_0lr?mV>+|0vF=hwIxu!+}VvE zCVJ~XIQ26&Ugdkn@!;#7;1oXHVB^%Oq5vgSa_{O$b3ezqb4U--i9uxe(o&sV=@imn zfzV-BQxjHdwG!ub_!lL2Y(@sNNo8Ha1Nl*_oFSb)O3$^=58B^2v+k}oFvCpoCZ(6h z_rwE{)oo^V6N5`7ckCFHZ2rEUoby!row1t6BTof?!zKR34I2p038tMnDHCpI=6=!PQCw)fCLdej} z+AqL6fVWU&s^p0?hEDJ1$IeUEY@T#3Gc@f?^;bleOFOSms1lQ>ZFXA zF8nB+cl}fGD9KeIf)AYBYSskDKTRX;jporDeHAs=MbrDt?ryG}X7??~gpqcC_7VtSyqwtfPF5!EuVtX&SDr(SOQG>Vm=tbkmm)?q^E|W6_YEmffQ|j`@@97DJ`33%ck$m5sPtbL<{lTb)sZ5_B67c-6z$Vz|zcj=R%KBLe7Xla%s zKd8RlU>n-p+h+)bv1cU}?Q1bO4$Rz#OQG3nJ4|zbbM!TDE=bhONdH35uES(Whkd>M z)X=P|Zi#8Dq{P=127_L-{L+15W^JXwCX##(WoJAUvG+tu7tDV%jNbwdpafNxp5k~H z)l;Z5LkhX{t%0nJXxUwd*keJh(QeoS=>L2Dd7^=NY4UHNe4!AAx>L=fwSFIN?qt3i zt6zgr&Fkh9vE4-S^7Dq<>r2ARr!67|+_-|K9$yxFx5_27)d*aF(h}v8v}mc<0#S_v z-Pm2HTHkRidb871MpY^8R8a#Wr7v-g^AWaxO?9d<<&wP}H{=zBS~d512VtpBNoAVut} zpUVp046pOKPK~8!y)^E_W0NHGUxjaxdhuB7pe{uEZoPH=m!6SYIz6I;Fxh)Yvfm_74z$Pl<7H zGxxud*#oT~ykV&lwvb@qu9y5$Y9VfSqZz%ihK<|_{xs_g&_0Up`E!~t&q{KkMcjM4 z&fq_#$=!vje3qC{)*-(CqA@C|_Rww0FVAUnt%eb>o}nMUNiNVw$Wr2He4{-q|F<_B zJH5ZHn}oU#{)S4t5IT9-)n0kijJY-8z1Uc>jFoNI)Q&~c#1Dkt(_TeqMO5WANZ2=8 z4HxQZH8fSzyZ{6N(3La*dr+#fo<&IxD8=fc5WcP#?n+1CIwhEln0`-a8c{+)_p*cI zV3p%a*(;j|^lD0&+w(jr`;gTJygo)BTR%$SE99bX)gkt7^i2j$of_pAnn5cC5jld> z3A%ct?}hFUyXNPb`&7d1Wv*Y>ptkM;+!3IdH6@Qw-meS9;^*6&SD%lSdGPXkY|f@n zfJ^J}U)A2)+S=TBe!tEMDlBoTOux=!tkO4xh(|=3XQ$UyK-c@gVV47&yp})fqIPYg zYR+;Yfm=1`sR;b(d1@r>mE5Po9N!}+$vflk(aT$1sh(8h1WLmc=N1Y6nYGL#2|&>e z3S(q_OEsh;b+qJHT`=HQ++XX6qLxqN`e@{#aMM{vFULM=%DCIkX%j&K1zw48SEY;7 zGtbN}Fl{l8%R$TSXLyy}(47H95blG#eFRmK$NrKuo6E&Z-yHj=&@g!|xs@uks^4at zOm(j~dUHW?9bHd3W7@g?p+pF((fsqv3c~@67)<2KZ+Dd#dM?{$TR*#vYw?;T6Jg9! z^B^kDa!2}AH9qF)k?YFPTT%{#3fg&2aJe8dpY((1ynH5ONX7CdwtKr-z;fN$?y`w+ zMOTwO3+Fo58}$>%GrD9Rc}v^3Wp`GYX{XrisXmO~aH$mf>&U*B#`z#;Bce$xGYU9@T`{>Y_G%V()ol~Y|d4%-ILb9g5i+d`$a7d?vshB8z* zQ7|Rik+phxE8U3M|JzH9L<{LQl<{iG7~Qh%qRNq)B&#Yuf$xtnKz)~bhpd(qr*AZW>2PwI|?>M?S5F*0g+WwZmut5fC5R9GPr z7|pC6Yp0dviTwj2`W28Wk_yUaIeVa|)Lew7+F##4Djr%;Vh!&Dtq75^Zm zVdb-F=?J%UWZiS``=jM9{lj4=GV;_Y^z&$M{*a}6!T_>0Yz?ab&64NY!3PR{dcNu(R`K#| zR1$@v=GXJPsdjrp;mpgUd3fS+_s31Ujo0zx0h!}nK1x2r?~2vLk1c{`^1J2*?*U|H zby}y4)^pC$dQ!Jdyn_FW)v(BvWzacStBF#Dfe19)uA!uU$!7FN9IW0JSVQ%*-}F-m z4d$My>A1lfS6|1R$(OYoBPqIun=hn;PNkV?S(}G8P1DZwPA$YihDI!1cZO||qqDep z)o5qK`is=w zFbP@+_T!ieBnPr3hqRB(M0KWfa#8t0=YJ=vxsRu!Zn9YuH#zffS*B#q1Xng(yQUN= zHn1(8IUs~KpU4l_BwAPEsCO|z@0$lLeM{e}zrB%cFHby9Y#ysSA5UtOto@U79aIDZ zA@S=x)cSTa`}G>sEBVDYZ<%pdn}GUb;gSG`G&y77;%a>an1tnroVoTI)M>ZT;f;RcAHz%#|U#eHgYU zC&z{u@|6+XaKp%Qc?cV$hIz;Bn&%ODN6Yq}p=)|Rw+wR_6?bCsO27H?g?px>@CREY z`Ie2|U^|o{Fd?b}FtTeBY3W)%Qy%Z#Exx5EAF2Kw`JP;BJVmYU=F+olmzU$`Bns!g z&#%e?sUsI+)~{=39z|b)V02RrEr=Z`FCE8TInYD@r3EOG3;XuT+s0N`u#$t5!YM%tN+pyzY>I`-&G%BR?V9Qu6iPcZUlDlEM^p{;{Yo=w-2_W)WcBBGfZwaZ3~ zc8Os-Cx5u0pg=pe)Hf7`66S|wyxANOL)=j4%ATr@>;^N{+4&TV7%6`3I5lue!NeA4 zKcoRtP$xAN_p|TJ?->wpXr@xe?(iWIzX2Ro~8tx_46_uo?>y#wudd zpyy7`{u8@)6&%kZTg&=6&K^L}X{x=F0yAVMK?LdVN`5CEp0%p;blxm7dtRhxDM7!E zF6)VRKD5a{qRUy9G(7gy@nt)&mFH-xi5EV>f}jY$&>_z+b(8R|7WT65^57Z#<$}z} z___&Yq+0v?GMMm+V`1Rf8Bdpf3aqt|v1O5ra~?0&*=k=LMv)5cpq^6+RguztR`E-m z!LzTCO*-V=zLLk7vdSq%rwQblWBLJA*N7#gr@f9@WQEPS=s+Q2PM638A5tG<#t61# zBZ)WOF2%7`1+=d5S?fe7x3>L!;2|ajTbWa@6zFNsc>LH5zA@GUh2xII%XoczO4Psv%l4Rv6CC2L(ajPtDHcsSLLQ4#5Z{6O?Lc%ve>VzWHUI~S-Q99d| z$6CV}t}L8_>MMPA(b3Vf!}vYPp@20RtITW9(D}U~G}KwGyl2xLo$3#uL)?Ag(y`j= zFarW+Lo~X}K}ZyPoa2mbI^>FurW+q7t!S1MtNI2uU1HRsg`){MQaEtcFHJSfKS3-t z=4{CI$C1Xa*LqudCSLuTkrKh9E9jG9Q4tVxACuE+QrukzFOvm+y58YU=lCv_5I#D= zHVgNA@0uT3xyH64phnKxyyeVa^&XfXbw0=u=PV~*NILQ*C+7@V$D86zeflV0>7rF& zYFED`W~FqXsN#xR#KMWvP}|5pmg98&F~@oC8STzu(@?(??6UD@B0s#)&jq7780;pjul`n7m^>DTqSrUVjr@I zTdF?09@wUeXY24T{VXw1p#}Bo!>w(7Mqb@;)NhD*hZDM&U##nm-MeA9G8&FM1s`ox zd3ZBvlmE=`ci#!(D+@tp{)H3j+()fdyGDAgEZd`ouQJ$|#j!8s#Gx;YT0(BEZnv|m z_%1N(RDm%v3tR1sng`VM0G01X3AXZWKme4Kd_OS2ME`!$rt@-1S&_NHnD?Eq=e}}{ zp=r2-wT;=<pq5`carfT+eL4 zo$Ot(T~Dl1W7KxRha~)AqbsvE&(bq9%x0V(Y`R-F3d&sRR(&I4X)6o4k|mp1D^kJu zpd5PHG`r}#lu-?=GbGI2YWa$VrG&o6)V&1M{%UmKY1VUQvzq}THhUDIaQSJF;*;y^ z!Y*09!y)bt)puc#UF$dq9J+}H10@>O{NFP6W`5f*E8ZLjA-X}1yu(JkN*1(W zROx6sNkPfk9dwYc++ibHH$;2&qW0Dj?H=%IlwY>0fzsy;sh;wvNAqf|A3Ua~%nqqo zCD*|Kn%6=b$C$+@4n`a8ZTE0;N4A=FaA}&1BykW+6Z*}NJ>`=}_ zB#Y}_tFB)Wx7wZK$4dlE=XE5+RG9d)(|?%7#6>!%0^g?zx^a zPM-$C`mfk)_bBp3!I%W-2D(glXc^dt;>~TLyyua@%_(M|{65{6^g)A;Ok}KO&#RB^ zGfrCw6xzkVsS^V1y9u$L9qrK$q`eAkZJL>sVWpDaOk zO?>{WVBN^`)Kv1gBckcjl_QH!xc20>Bw=AAMYq=czbsy|qB^;!GUwL?HZ)Ihdspq0 ztgmmbOZ84U#-BQ)BuGvX+qpJW7YJ6~*E@Ef8E{ z(&^7po!GZVOD7jh0ZeIwjiTn#iT%c0Rh1i}jm#FFO-sxCxf^PY^{=n$ac|8D zPq|lxIo3%ZT|N!&LQ~w;UirZ|3Hi*77mPOHsqZ{-f@pn(j0@c7{YHh4v7J()eyWmfDs}<`C_&$b+2rSv0$l;MrUu$ez`7>)2$g@15VGFerVGXoy zHc%;HKUM6`Fq+k$k2U>Ly6ztscq*}f6ji~yw(dg|-P#bFp(`;nB}$<@%9vpCKxYU%W?GaD zIP680D;nD!oJ{J2EO5uft_Mz#&gI=07ucNId2uJ363NugL5Vem=#s8{Q{BsVI`rPQ{jH6*L_{ube?(AK&t zh8B1&^uT5eHO%Uu9FzeHUJPin62|rJbe~5La;74`V-VN}BxXbD_u~2)WQ1R>(X({- zKz%dC?7+qG;brYt2#C_B&+kQ&4L2cIhSRx|#+Pp+#jRu|nMFhVS4_v?53FjwY2H?= zXFas@&RaFQxVAE~b+Fp>?q1B}3HipX!8@}#s7>8cO48=eTm(H@8i zGrVR-)GO-c%eKQ{j|7UGFw54NM;3wV%*QyW#cyP1J(;uqz_s zM;m}+&3(Evdd*!$y^@EXFf9q3CX>Nn?i}a38FG@ z((QKv%WPP=;d%QY<{Qw!V&%8L^`7scu}g3LSM^ zJ?1d|cC_TioBq8uVVL$yzh>C09nq(n&!0U#VjZ7#jh;WeEd(70U8uzzrc$?#I&0I+ z6cH^5T$dG%J!thZA1+}dnl;x6!}Rr>DM=t7fd%0cMiM9Km;0r^ zArJ_vy5U5Aox;x18vtqgF6mPHgPK2h(QSMjN1%&dlayqE!&*mMf>A2@I)ak95NBfW z5lDeheKi1H2-#t_akbAxv1AgOMCkFp4g`S>_4{p=vOwwJB%1}pZEuHx6Jls*b=Rkl zs;u{PlHiZ$(>BF?tf?Jn>;cPTt~rbxal{wL zc4~a5WXN#C`wcZTcK2rt|Ftaq$CvL;U*xULjEfVvVKdBxFy~`_l!eoXnLWi}=&M z;+7`PiKk8JFm22Bs{>g0MbGeg9>jRWLd|FiNkvkP{u~LNi@G)fd#_A)O)7*Jet!f) z_+}*!5+bhj^CHDeV*!kB(f1LFMA8W26?Ln3LH$nMVI!5YJOI7XtuU&uI0*`oU`V(I z_WRa2HEIakTzC@k#Hcl6!f0nQx&&oSZN7y)_*dojqk3QZc2>6kYSRc;@2dv;UtZrj>)(WX78{XV#OlOIdj{;6DS-mI;Ggz#w@{jv`Q1?l$%FA85L8k^-H(Rr!wU)Y}tmHFXVN}0B%XN@kA&wvS z?^eavc??NkzqItZ4g&u+Q2znv=OGlgq#!xyr-KtKir3hoL0<%Mkm}d8p$;dDCu$ zCOdtd zm>>hilx2KpF`@a2nY0KrY!b~Xv97tNHX-<1vcmEfA~sccz~?^I7;6yk(|RnmFLY&& zz2x{@HOaQZ;oh8=|NO{lMjh`gbo?QKY>dvDeIN~;YSd-HWWkYOqJf1!kxRV?_iodU zdn!R~TAQB3>#uICjn=>tzX;Az&F4^korEF}(JE@RU6`3Lwk=m)Er6^K2a-YpCVUEL zsC*){miniTS9ZHT6|D3$D_I#Yb=2v4sj&{{>WEI)N866Q)9KKfqY3Swip80Wb8ENP zrpIbD7jklP@=s)#3zMthLy^};g5N8%T))k_pWRqBc`AsJvENa+rf?Veh0$s%Yq~?q z2pj~6iJfvf)ORR7IM;vA&CmxOh>}}Wo^{veRb~#3Jx}BoL-1M4dE+5#H>`dW2cBvu z=_|&WDEGHjphyAe1&w3PdJAl2-G@7>;-3u;I`HzF2^W*|%?-_D4YNer4V5~O3sWD8 zO{ox%bKK`IOI1y}2#W{UN70z+L%p^HL9S+U3(p3HZBT9tB&xvag6$MB=M>s$7@rPi z8i=-vMI2|+)=LhKu1lz3lm@oxobl=Nj!>(t6huAiuzO>AkSl7V3`o3dC5(iCx5qF{ z^SHZKEagzBdgqqYCalk763*GNG0mXBLyz1+&M@8fHGa64w zsNqqw-)5e~Y|6~PuY6=CW?L$DNK^Nwb#E@#po*yI#1J>1lp)@Ot?V*)4iZDCjVsN4>*R?8I~soHnJxLw=y zag<|JC14IyvT>mnMsjP z!mMGkA7)6KT$fzsi15?^`ANF~+@uKamGlXC+T4!78QwiWX)q^yd1^cL732SFZ4wp| z_kxBK+Y^6LOd@mSo0F@;2lLOyaZG^QFD>*dB4gLcAImBYXz;2R5h&lUn0~p!d3Xc| zcxH(#rM>Fdnw63HVz@vh?%rogpIUIWuN>e&_^i)^MmAY3EPH!(%s%BzO3e~D({pOC z(}8qLk*v@UYSFX|G3%|-ZW0R9v|6;-y84#fUG&R*qgzir6d znJFp=7KL^fJm>UVBGhFgcPOw8IoMrg(b}%`x$?%9x7qO>x7~?X6Ch)B5u(@o9|W*az}fm#$ct_xnMOWWR>fPQgq9fSEdj8+nq!S zd3n6~By4o~7s*@|eT+xSp8HI+_~O!>B68NPeXa9ye=!&rH;Rt>*@Sa`QmO^}0s3C4 z3F*f`5QFUB z$-%iaaRBu&uBeNuJ1TR*liLj0^lqS3|ACm7Z|&XeKAx=q>gREz9mE=GDMfEdLT`rFr?qYP)45ELhZh46VeBXQj9XR z*|n4U<;&}P3uQ&yAB{V5(i$?cvrdU$a;fz0h?9z$OG;aZC==_cxv!na8uf@7b_t}V zUAkpuxHj!RZIbPChy>1#yP>e#W?Q{Snm}(IXcQMdBYBTU+tV@t{`% z`}Y#Uw-)o5#d}ZKwp$H_J0j11wzjDuYUaGiZYfS2huvp28j|@vB))}oPfXG0Yv8j! zr)I8RYZ->@wLKw>J!NC>)IOy%tuIVK8fN!8N_VT=S0;Db!0lv=aHlb zF7;b6bqh94O)cmja#M@zZBVcI*p3({^ctbkzL*5Bp>-PO_z@uqdjWeiMYT>*EUYs= z*d|-%P-?RtVTQNGXY|XqvQZyRrYy`j@`lvVVfo&=METQW5C~6`Z{I+4rsZHu$lxJ) z*nE}d0z^=aRS(6^EXVpAm{>17SGv(JsWp)4h`sQ{xX+VMAoBAUR7VcXgLePWa56(e z_w9UL*K03BMaO_X500}xfM7PD-4daaPf@M&g)X@;avfHDj=#Mn$uRR`j-@*@U0Q-| zWdy^YB&FV4!5kh-k+9Vzj;$PqC&aU8FLhlaoR9Jb{3v!*gV5iO8K}^=N#QPLAIbKi zJhVwz7yJ$aHu*Y-E`S&dtg{WAc3yC~6SlEzw;&&Hxb!GSxGi3tcK%9ajiZ{(Bk}e{y&vGDTv#;@_U{Q=KNVIrCj}A8+{!&Q?RCD zC>vVq8V7W&CSLi<3>&%>aTA>x!J3R>Zc0WPEAwqh?(U$YUXy-I#3{(1$8OaL#fk=v zLGkrd!j$IYrz&Tjr2Dj}N%pmGYXnihMTYaQ6~b8&Ow&4N?{=pCrqV(8m6?9imY>ZU zC#J@n;lrw7K~sH@p8k8LHI#|q^X>UU6mQX$=3w&XWR`YYN>`VVt~uK7Ed1%9MDEPq zFm`A4nsUi&+LU$m_Qc^i-$GYdaHDvsjakb>-`(TB@GwV%+pkLxoQTpLG#N``$4Az0 zHw&#Eex)0!t?i5V&hKq(hZf>c!#z>qt&M>zm;iFq6Lh+7ao#4J;A!Tg_l@$I=NyglGtaem1sn6k0$kF5?^X;OrUU0x2W?g?7&j=hYFH+Ro-ix3AT;PM z!Hul<8I zX9YEty^Am!xw%)M@W6@|44!}2pYPkV6J12otLxsbyS75Dv6Cj;O^3rhDaxxbMT2UO z36CGQn0|J{2*_GD$@m6qx6}R9Uhv&RlNdaD>L+FQ*{Z!mTN}BHu`$kQpEXZZ%WUw{ z+&zzt2pST~AwHj(pvTTo`K6u)lWXH4RB$C&H67UDJ9iZ<(zjX@U-Y-v z0}C#+FS%>^1J;VG=CNtEC%VG6UhjT`9*91Ysk*Z1W4o5y(|ZhWs}}I(bY^x%Sv;4j zoWIn-t)l>ZOz=Edex+FE+wDU+0VKH0kZ_zD?H!usPjf|Mmuq_tcgx`XJ4{^n4WeJK zev?z|h#y$fj|y|4&E3O3WW0QvlqPAFQ(X0S{&MSq=;zA~bj3^5MtY09UADP0-;}5K z|7q{q|C!$Z_`W2!bRbCjuXc%X^LUkgwQHoEe1jP3LNtgV0G`}qFo_0#*Y&-?SfJm0VP`~CX7_j*5HjeMSM zrcy@fFXqP}^bnh4_|)7Wj?7hUE|5-Gmlg`u@WDu*@SSy*^hffe*wN8mveEc z4I6QBr1)Z|re@I5dsQE!v#ufxqn2iJ+yd1|$sGw$*Zu};-l=Y~DGpZ8i*&BW48Xw7 zC~0EbSoR1+?`-&nuXnSdL{n1aQmYu`0P*^$7UrjGzAP$2=s)Wpnml0i1B77#zqaN$@z-tPcE3Py>lxkw!{p6brDn5|lh zy;o$3>$KOb#~-o?eLZH;z}*2kuuB8xe?T6xPypV!FoDq5o$Lv3C9irueQ44i-w@5e? zS5LXEb?+c2RM{Ljo12>%a#C0Ckt9kg>16wZIFys#7>ZGK4BfUvqRjU{DLkbkDy`)+vk(Re_Eo0;sfINsu%KAPCHGoW~X~qlfv(#?@ePG1soI+}`P)xOOn| zdA*sc>9y*23dZ!G)YOzTjvPY=b$r<=0YbG=y@%SZ5h6eIt79zzwi~fjKul(3g(Jkp zpjslQn)6ukCK1)ARYOUdX5$5amB2EjZG?X<4$TcnX0d9yv(PMZZT)SfbzzZl<|h-n zuZ*TIqsBn}>T43QCEIpg!gg>?ikET;NmbVw3YB?>notWRDP_=tiIM6ZVjyS z8t3C?zxO5{Ja~2uB&Hhv?H01(-5a*IBkLR^V+jSzfn5Vv zXZdm3YIQkQMu5?&wBFuVQ(K1Y?1kf}eS9oJw#KYM9n3d!V#Hjf5J$+K2+yIEB;Z$c z(ECr73AL;Kpjktp%9At5m;2bW&Ti@8J#D)%p)fX0GDu|K9;ERyjlrct4dS2)wS50e zJFV$cKl&n%27f5;$=;|Vwy@c38-vx3M&nTlAqD+J6O5Ihr=N8nNtqe@c=E%?0vpL& zSOIllPw?OvvBk)*KT+^TrqbhyWDO^^hvWK*%RQ9oR%K+jdRb{{z(OwC@b?D12!rA7 z=Up|N3Um#zp#Km+o#+Le2v+J-lRKt_)nsD3b zvBc{6p{e*X@V?~(Matq>s)#dMBxE@!PW0hl%R$tMi|mDWRcOl`rCsJ)<)#Ff^QeG7 z0-MP*LmGwm3Ot&x>?Pe0Kp={Q)4v@*dqTMQ&E*rc<5ljq_-)kcahlPWh53a=MV3xP zrU|>RsMsOfT?8#|7vl2tpQDtQGzSa8hsvBJ_At(s-j z=q6fEfEm7ehVB2Q3@K>Q$~U3yqX$qk%9>4u*Y!s9JQ{Q1@n#oS)l~H7-`9kR5xAz= z2aa3)d}J8q@WhI1V`rW@<0clSnx@*bF;Qu^rsk?Zz-x?n@PzFw58<2QkFIqN06{j< zBx3M&&TZvgAIkpJLnnyWp)qbCXzKu6fR+wk)dicr$}To_twX0k;ToF2$BBTD`7xy0f`az%9NppZTmpKHo{89ehc z_pPp8T03A+@(+yFH{iZ83`MMZw!@$rv;HAJvm%z;W`V_!PT3_nGQ+Rq%aavb;?ckn z#&@Kmsn{|967Y62YZO@i)L-H%%J{Y1tM!(L1+UFbCBOLZiuq0ZTIw>w90*?FqS_fKGVJSC3YWd_+1>q z2?BqXepmy5A`zEesaF#RpSIp^OZ{o^D5095zdp4(boW_&@tF*5arLOmLh6}wvFwQq zE2I3Q`j!Hubx64lif8CX#uhTO3{&L)l@J8NEp0^allpn3p6*|94CY;N>-&g^N2@ZYZu0s?N^zLR#sMoJS}?O z@|@xOe5Bz-?5IF^V-hL}DnIzg{D{{Is6A$!o8I5F^t3$r1!l1PlR=DdHl7u2JW;oE zBpe+r0Z!BM+_|3Q&TUZK+?|%&+dyj>M^cv~$2b%@m$)B}Y56ynd&uRiyO8tD3VYrw zoakP6-beE4)E~W+3uR3_W>MtEpm$HxO5FS52JX8YbP~ROUW#ff`Un)ssppbWf@sMT zB&6xR|1Z&1Pl*5k literal 0 HcmV?d00001 diff --git a/skills/flowchart-maker/scripts/flowfig.py b/skills/flowchart-maker/scripts/flowfig.py new file mode 100644 index 0000000..5613084 --- /dev/null +++ b/skills/flowchart-maker/scripts/flowfig.py @@ -0,0 +1,953 @@ +#!/usr/bin/env python3 +# /// script +# requires-python = ">=3.10" +# /// +"""Render a Mermaid flowchart subset as a flat-editorial flowchart HTML plate. + + uv run scripts/flowfig.py SPEC.mmd [-o OUT.html] [--png OUT.png] [--scale 2] + +Supported Mermaid syntax + graph LR / flowchart TD + id[Title
sub label] process node + id([Title]) terminal (outlined) + id((Title)) terminal (filled, end state) + id[(Title)] store + id{Question?} decision + a --> b a -.-> b a --x b arrows: solid, dashed, failure + a -->|label| b a -- label --> b a -.->|label| b + a -->|[40 ms]| b a bracketed label renders as a measurement chip + id:::focus id:::warn id:::fail tone classes (also: class a,b focus) + id:::below id:::beside layout hints: force a node under, or right of, its parent + subgraph name [Title] ... end dashed group boundary; groups may nest + +Directives (comment lines) + %% note: An annotation rendered inside the plate. + %% steps: sdk, relay, queue numbered badges in this order + %% width: 1200 +""" +from __future__ import annotations + +import argparse +import base64 +import html +import heapq +import os +import re +import shutil +import subprocess +import sys +import tempfile +import time +from collections.abc import Callable +from dataclasses import dataclass, field + +INK = "#2B2233" +MUTED = "#80708F" +BODY = "#4D4158" +PAPER = "#FAF9FB" +PLATE = "#FFFFFF" +ACCENT = "#6C5FC7" +ACCENT_INK = "#4D3FA3" +ACCENT_FILL = "#EFEBFA" +ACCENT_LINE = "#C6BEEB" +WARN = "#FFC227" +WARN_INK = "#7A5200" +WARN_FILL = "#FFF4D4" +FAIL = "#FF45A8" +FAIL_INK = "#B01B70" +FAIL_FILL = "#FFEBF5" + +SANS = "'Rubik',-apple-system,system-ui,sans-serif" +MONO = "Monaco,Menlo,'Ubuntu Mono',monospace" + +TONES = { + "plain": (PLATE, INK, MUTED), + "focus": (ACCENT_FILL, ACCENT, ACCENT_INK), + "warn": (WARN_FILL, WARN, WARN_INK), + "fail": (FAIL_FILL, FAIL, FAIL_INK), +} +TONE_ALIASES = {"attention": "warn", "failure": "fail", "error": "fail", "accent": "focus"} +LAYOUT_CLASSES = {"below", "beside"} + +NODE_COL = "minmax(146px,1fr)" +EDGE_COL = "76px" +NODE_ROW = "auto" +EDGE_ROW = "60px" + + +def warn(msg: str) -> None: + print(f"flowfig: {msg}", file=sys.stderr) + + +# ---------------------------------------------------------------- model + + +@dataclass +class Node: + id: str + title: str + sub: str = "" + shape: str = "process" + tone: str = "plain" + layout: str | None = None + group: str | None = None + + +@dataclass +class Edge: + src: str + dst: str + label: str = "" + dashed: bool = False + fail: bool = False + + +@dataclass +class Group: + id: str + title: str + parent: str | None = None + + +@dataclass +class Spec: + direction: str = "LR" + nodes: dict[str, Node] = field(default_factory=dict) + edges: list[Edge] = field(default_factory=list) + groups: dict[str, Group] = field(default_factory=dict) + meta: dict[str, str] = field(default_factory=dict) + + +# ---------------------------------------------------------------- parser + +SHAPES = [ + ("([", "])", "terminal"), + ("[(", ")]", "store"), + ("((", "))", "end"), + ("[[", "]]", "process"), + ("[", "]", "process"), + ("(", ")", "process"), + ("{", "}", "decision"), +] + +ID_RE = re.compile(r"\s*([A-Za-z0-9_]+)") +CLASS_RE = re.compile(r":::([\w,]+)") +ARROW_RE = re.compile( + r"""\s*(?: + --\s+(?P.+?)\s+--> + | -\.\s+(?P.+?)\s+\.-> + | ==\s+(?P.+?)\s+==> + | (?P(?:-{2,}|-\.+-|={2,})(?P[>xo])) + )\s*(?:\|(?P[^|]*)\|)?\s*""", + re.X, +) + + +def split_text(text: str) -> tuple[str, str]: + text = text.strip() + if len(text) >= 2 and text[0] == text[-1] == '"': + text = text[1:-1] + parts = re.split(r"|\\n", text) + parts = [p.strip() for p in parts if p.strip()] + if not parts: + return "", "" + return parts[0], " · ".join(parts[1:]) + + +class Parser: + def __init__(self) -> None: + self.spec = Spec() + self.group_stack: list[str] = [] + + def parse(self, text: str) -> Spec: + lines = text.splitlines() + if lines and lines[0].strip() == "---": + end = next((i for i in range(1, len(lines)) if lines[i].strip() == "---"), None) + if end is not None: + for fm in lines[1:end]: + if ":" in fm: + k, v = fm.split(":", 1) + self.spec.meta[k.strip().lower()] = v.strip() + lines = lines[end + 1 :] + for raw in lines: + line = raw.strip() + if not line: + continue + m = re.match(r"%%\s*([A-Za-z_]+)\s*:\s*(.*)$", line) + if m: + self.spec.meta[m.group(1).lower()] = m.group(2).strip() + continue + if line.startswith("%%"): + continue + line = re.sub(r"\s%%.*$", "", line).strip() + for stmt in line.split(";"): + stmt = stmt.strip() + if stmt: + self.statement(stmt) + return self.spec + + def statement(self, s: str) -> None: + m = re.match(r"^(graph|flowchart)\b\s*(\w+)?", s) + if m: + d = (m.group(2) or "LR").upper() + if d in ("TD", "TB", "BT"): + self.spec.direction = "TD" + else: + self.spec.direction = "LR" + if d in ("RL", "BT"): + warn(f"direction {d} is not supported; using {self.spec.direction}") + return + m = re.match(r"^subgraph\s+(.+)$", s) + if m: + body = m.group(1).strip() + mm = re.match(r'^([^\[\s]+)\s*(?:\[\s*"?(.*?)"?\s*\])?$', body) + if mm: + gid, title = mm.group(1), mm.group(2) or mm.group(1) + else: + gid, title = body, body + parent = self.group_stack[-1] if self.group_stack else None + self.spec.groups[gid] = Group(gid, title, parent) + self.group_stack.append(gid) + return + if s == "end": + if self.group_stack: + self.group_stack.pop() + return + m = re.match(r"^class\s+([\w,\s]+?)\s+(\w+)$", s) + if m: + for nid in re.split(r"[,\s]+", m.group(1)): + if nid: + self.apply_class(self.node(nid), m.group(2)) + return + if re.match(r"^(classDef|style|linkStyle|click|direction)\b", s): + return + self.chain(s) + + def node(self, nid: str) -> Node: + n = self.spec.nodes.get(nid) + if n is None: + n = Node(nid, nid) + self.spec.nodes[nid] = n + if self.group_stack and n.group is None: + n.group = self.group_stack[-1] + return n + + def apply_class(self, n: Node, cls: str) -> None: + cls = TONE_ALIASES.get(cls, cls) + if cls in TONES: + n.tone = cls + elif cls in LAYOUT_CLASSES: + n.layout = cls + else: + warn(f"unknown class '{cls}' on node '{n.id}' (ignored)") + + def node_token(self, s: str, pos: int) -> tuple[Node, int]: + m = ID_RE.match(s, pos) + if not m: + raise ValueError(f"expected a node id at: {s[pos:]!r}") + n = self.node(m.group(1)) + pos = m.end() + for opener, closer, shape in SHAPES: + if s.startswith(opener, pos): + end = s.find(closer, pos + len(opener)) + if end < 0: + raise ValueError(f"unclosed node text in: {s!r}") + n.title, n.sub = split_text(s[pos + len(opener) : end]) + n.shape = shape + pos = end + len(closer) + break + m = CLASS_RE.match(s, pos) + if m: + for cls in m.group(1).split(","): + self.apply_class(n, cls) + pos = m.end() + return n, pos + + def chain(self, s: str) -> None: + src, pos = self.node_token(s, 0) + while pos < len(s): + m = ARROW_RE.match(s, pos) + if not m or m.end() == pos: + raise ValueError(f"cannot parse {s[pos:]!r} in: {s!r}") + label = m.group("l1") or m.group("l2") or m.group("l3") or m.group("lp") or "" + arrow_text = m.group(0) + dashed = "." in arrow_text.split("|")[0] and not m.group("l1") and not m.group("l3") + fail = m.group("head") == "x" + dst, pos = self.node_token(s, m.end()) + self.spec.edges.append(Edge(src.id, dst.id, label.strip(), dashed, fail)) + src = dst + + +# ---------------------------------------------------------------- layout + + +@dataclass +class Placement: + layer: int + row: int + + +def assign_positions(spec: Spec) -> tuple[dict[str, Placement], set[int]]: + """Return (id -> Placement, indices of back edges).""" + ids = list(spec.nodes) + out: dict[str, list[tuple[int, Edge]]] = {i: [] for i in ids} + for idx, e in enumerate(spec.edges): + out[e.src].append((idx, e)) + + back: set[int] = set() + state: dict[str, int] = {} + + def dfs(u: str) -> None: + state[u] = 1 + for idx, e in out[u]: + if state.get(e.dst) == 1: + back.add(idx) + elif e.dst not in state: + dfs(e.dst) + state[u] = 2 + + for u in ids: + if u not in state: + dfs(u) + + fwd = [(i, e) for i, e in enumerate(spec.edges) if i not in back] + fpred: dict[str, list[Edge]] = {i: [] for i in ids} + fsucc: dict[str, list[Edge]] = {i: [] for i in ids} + primary: dict[str, str] = {} + for _, e in fwd: + if e.src == e.dst: + continue + fpred[e.dst].append(e) + fsucc[e.src].append(e) + primary.setdefault(e.src, e.dst) + + def is_drop(e: Edge) -> bool: + v = spec.nodes[e.dst] + if v.layout == "beside": + return False + if v.layout == "below": + return True + return primary[e.src] != e.dst and len(fpred[e.dst]) == 1 and not fsucc[e.dst] + + order_index = {nid: i for i, nid in enumerate(ids)} + indeg = {i: len(fpred[i]) for i in ids} + layer: dict[str, int] = {} + pref: dict[str, int] = {} + placed: dict[str, Placement] = {} + occupied: set[tuple[int, int]] = set() + ready: list[tuple[int, int, int, str]] = [] + + def push(v: str) -> None: + if fpred[v]: + layer[v] = max(layer[e.src] + (0 if is_drop(e) else 1) for e in fpred[v]) + anchor = fpred[v][0] + pref[v] = placed[anchor.src].row + (1 if is_drop(anchor) else 0) + else: + layer[v] = 0 + pref[v] = 0 + heapq.heappush(ready, (layer[v], pref[v], order_index[v], v)) + + for v in ids: + if indeg[v] == 0: + push(v) + while ready: + _, _, _, v = heapq.heappop(ready) + r = pref[v] + while (layer[v], r) in occupied: + r += 1 + occupied.add((layer[v], r)) + placed[v] = Placement(layer[v], r) + for e in fsucc[v]: + indeg[e.dst] -= 1 + if indeg[e.dst] == 0: + push(e.dst) + for v in ids: + if v not in placed: + warn(f"node '{v}' could not be placed (cycle without entry?)") + placed[v] = Placement(0, len(placed)) + return placed, back + + +# ---------------------------------------------------------------- routing + +Cell = tuple[int, int] +OPPOSITE = {"L": "R", "R": "L", "T": "B", "B": "T"} + + +@dataclass +class Piece: + sides: frozenset[str] + arrow: str | None + dashed: bool + fail: bool + label: str = "" + + def same_geometry(self, other: "Piece") -> bool: + return (self.sides, self.arrow, self.dashed, self.fail) == ( + other.sides, + other.arrow, + other.dashed, + other.fail, + ) + + +def side_toward(frm: Cell, to: Cell) -> str: + if to[0] > frm[0]: + return "R" + if to[0] < frm[0]: + return "L" + if to[1] > frm[1]: + return "B" + return "T" + + +def walk(points: list[Cell]) -> list[Cell] | None: + cells: list[Cell] = [] + for (x0, y0), (x1, y1) in zip(points, points[1:]): + if x0 != x1 and y0 != y1: + return None + dx = (x1 > x0) - (x1 < x0) + dy = (y1 > y0) - (y1 < y0) + x, y = x0, y0 + while (x, y) != (x1, y1): + x += dx + y += dy + cells.append((x, y)) + return cells + + +def candidate_paths(a: Cell, b: Cell, direction: str) -> list[list[Cell]]: + ax, ay = a + bx, by = b + paths: list[list[Cell]] = [] + + def add(pts: list[Cell]) -> None: + dedup: list[Cell] = [] + for p in pts: + if not dedup or dedup[-1] != p: + dedup.append(p) + if len(dedup) >= 2 and dedup not in paths: + paths.append(dedup) + + if ax == bx or ay == by: + add([a, b]) + rows = [ay, by, ay + 1, by + 1, ay - 1, by - 1] + cols = [ax, bx, ax + 1, bx - 1, ax - 1, bx + 1] + row_paths = [[a, (ax, cy), (bx, cy), b] for cy in rows] + col_paths = [[a, (cx, ay), (cx, by), b] for cx in cols] + for p in row_paths + col_paths if direction == "LR" else col_paths + row_paths: + add(p) + return paths + + +def route( + a: Cell, b: Cell, edge: Edge, direction: str, blocked: set[Cell], pieces: dict[Cell, Piece] +) -> list[tuple[Cell, Piece]]: + fallback: list[tuple[Cell, Piece]] | None = None + for pts in candidate_paths(a, b, direction): + cells = walk(pts) + if cells is None or cells[-1] != b: + continue + body = cells[:-1] + if a in body or b in body or len(set(body)) != len(body): + continue + result: list[tuple[Cell, Piece]] = [] + prev = a + ok = True + for i, c in enumerate(body): + nxt = body[i + 1] if i + 1 < len(body) else b + entry = side_toward(c, prev) + exit_ = side_toward(c, nxt) + piece = Piece( + frozenset({entry, exit_}), + exit_ if nxt == b else None, + edge.dashed, + edge.fail, + ) + existing = pieces.get(c) + if c in blocked or (existing is not None and not existing.same_geometry(piece)): + ok = False + result.append((c, piece)) + prev = c + if fallback is None: + fallback = result + if ok: + return result + if fallback is None: + raise ValueError(f"no route from {a} to {b}") + warn(f"edge {edge.src} -> {edge.dst} overlaps another element; check the figure") + return fallback + + +def attach_label(result: list[tuple[Cell, Piece]], label: str) -> None: + if not label: + return + def straight(sides: str, wide_axis: int) -> list[Piece]: + cells = [(c, p) for c, p in result if p.sides == frozenset(sides)] + wide = [p for c, p in cells if c[wide_axis] % 2 == 0] + return wide or [p for _, p in cells] + + target = (straight("LR", 0) or straight("TB", 1) or [result[0][1]])[0] + target.label = label + + +# ---------------------------------------------------------------- render + +ARROW = { + "R": f"border-left:12px solid {{c}};border-top:8px solid transparent;border-bottom:8px solid transparent;", + "L": f"border-right:12px solid {{c}};border-top:8px solid transparent;border-bottom:8px solid transparent;", + "B": f"border-top:12px solid {{c}};border-left:8px solid transparent;border-right:8px solid transparent;", + "T": f"border-bottom:12px solid {{c}};border-left:8px solid transparent;border-right:8px solid transparent;", +} + + +def esc(s: str) -> str: + return html.escape(s, quote=True) + + +def arrow_div(side: str, color: str, extra: str = "") -> str: + return f'
' + + +def label_div(label: str, fail: bool, extra: str = "") -> str: + if not label: + return "" + m = re.match(r"^\[(.+)\]$", label) + if m: + return ( + f'
{esc(m.group(1))}
' + ) + color = FAIL_INK if fail else MUTED + return ( + f'
{esc(label)}
' + ) + + +def line_style(horizontal: bool, dashed: bool, color: str) -> str: + if horizontal: + return f"flex:1;height:0;border-top:3px dashed {color};" if dashed else f"flex:1;height:3px;background:{color};" + return f"flex:1;width:0;border-left:3px dashed {color};" if dashed else f"flex:1;width:3px;background:{color};" + + +def render_piece(p: Piece, area: str) -> str: + color = FAIL if p.fail else INK + common = f"{area}align-self:stretch;justify-self:stretch;min-width:0;min-height:0;" + if p.sides == frozenset("LR"): + return ( + f'
' + f'{label_div(p.label, p.fail, "grid-row:1;align-self:end;justify-self:center;padding-bottom:5px;white-space:normal;text-align:center;max-width:100%;")}' + f'
' + f'{arrow_div("L", color) if p.arrow == "L" else ""}' + f'
' + f'{arrow_div("R", color) if p.arrow == "R" else ""}' + f"
" + ) + if p.sides == frozenset("TB"): + return ( + f'
' + f'
' + f'{arrow_div("T", color) if p.arrow == "T" else ""}' + f'
' + f'{arrow_div("B", color) if p.arrow == "B" else ""}' + f"
" + f'{label_div(p.label, p.fail, "grid-column:3;align-self:center;padding-left:8px;")}' + f"
" + ) + return render_corner(p, common, color) + + +def render_corner(p: Piece, common: str, color: str) -> str: + style = "dashed" if p.dashed else "solid" + quadrants: dict[tuple[int, int], list[str]] = {} + if "L" in p.sides: + quadrants.setdefault((1, 1), []).append(f"border-bottom:3px {style} {color};margin-bottom:-1.5px;margin-right:-1.5px;") + if "T" in p.sides: + quadrants.setdefault((1, 1), []).append(f"border-right:3px {style} {color};margin-right:-1.5px;margin-bottom:-1.5px;") + if "R" in p.sides: + quadrants.setdefault((1, 2), []).append(f"border-bottom:3px {style} {color};margin-bottom:-1.5px;margin-left:-1.5px;") + if "B" in p.sides: + quadrants.setdefault((2, 1), []).append(f"border-right:3px {style} {color};margin-right:-1.5px;margin-top:-1.5px;") + parts = [ + f'
' + for (r, c), styles in quadrants.items() + ] + if p.arrow: + place = { + "T": "grid-row:1;grid-column:1/3;justify-self:center;align-self:start;", + "B": "grid-row:2;grid-column:1/3;justify-self:center;align-self:end;", + "L": "grid-row:1/3;grid-column:1;align-self:center;justify-self:start;", + "R": "grid-row:1/3;grid-column:2;align-self:center;justify-self:end;", + }[p.arrow] + parts.append(arrow_div(p.arrow, color, place)) + if p.label: + inside = ("B" if "B" in p.sides else "T", "L" if "L" in p.sides else "R") + row = 1 if inside[0] == "B" else 2 + col = 2 if inside[1] == "L" else 1 + align = f"align-self:{'end' if row == 1 else 'start'};justify-self:{'start' if col == 2 else 'end'};" + parts.append(label_div(p.label, p.fail, f"grid-row:{row};grid-column:{col};{align}padding:6px;")) + return ( + f'
' + + "".join(parts) + + "
" + ) + + +def badge_div(n: int) -> str: + return ( + f'
{n}
' + ) + + +Port = tuple[str, bool] + + +def stub(port: Port | None) -> str: + if port is None: + return '
' + color, dashed = port + return f'
' + + +def render_node(n: Node, area: str, step: int | None, ports: dict[str, Port]) -> str: + fill, shadow, sub_color = TONES[n.tone] + badge = badge_div(step) if step else "" + title_color = INK + if n.shape == "end": + fill, title_color, sub_color = INK, "#FFFFFF", ACCENT_LINE + title = f'
{esc(n.title)}
' + sub = ( + f'
{esc(n.sub)}
' + if n.sub + else "" + ) + frame = f"border:2.5px solid {INK};background:{fill};box-shadow:4px 4px 0 {shadow};" + if n.shape == "decision": + return ( + f'
' + f"{badge}{stub(ports.get('L'))}" + f'
' + f'
{esc(n.title)}
' + f"
{stub(ports.get('R'))}
" + ) + if n.shape == "store": + box = "padding:19px 21px;border-radius:50%/18px;align-items:center;text-align:center;" + elif n.shape in ("terminal", "end"): + box = "padding:13px 24px;border-radius:999px;align-items:center;text-align:center;" + else: + box = "padding:13px 15px;border-radius:10px;" + return ( + f'
' + f"{badge}{title}{sub}
" + ) + + +def render_group(g: Group, area: str, bleed: int) -> str: + return ( + f'
' + f'
{esc(g.title)}
' + f"
" + ) + + +FONT_FILE = os.path.join( + os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "assets", "fonts", "rubik-latin.woff2" +) + + +def font_face() -> str: + """Embed Rubik so the page renders offline and headless Chrome never waits on a webfont.""" + if not os.path.exists(FONT_FILE): + return ( + '\n' + '' + ) + with open(FONT_FILE, "rb") as fh: + data = base64.b64encode(fh.read()).decode("ascii") + return ( + "" + ) + + +def render(spec: Spec) -> str: + placed, back = assign_positions(spec) + if len(spec.nodes) > 9: + warn(f"{len(spec.nodes)} nodes; the style caps figures at nine") + accented = sum(1 for n in spec.nodes.values() if n.tone != "plain") + if accented > 3: + warn(f"{accented} accented nodes; the style allows at most three") + + def cell_of(nid: str) -> Cell: + p = placed[nid] + return (2 * p.layer, 2 * p.row) if spec.direction == "LR" else (2 * p.row, 2 * p.layer) + + node_cells = {nid: cell_of(nid) for nid in spec.nodes} + blocked = set(node_cells.values()) + pieces: dict[Cell, Piece] = {} + ports: dict[str, dict[str, Port]] = {nid: {} for nid in spec.nodes} + for e in spec.edges: + if e.src == e.dst: + warn(f"self-loop on '{e.src}' skipped") + continue + if spec.nodes[e.dst].tone == "fail": + e.fail = True + result = route(node_cells[e.src], node_cells[e.dst], e, spec.direction, blocked, pieces) + attach_label(result, e.label) + port: Port = (FAIL if e.fail else INK, e.dashed) + ports[e.src][side_toward(node_cells[e.src], result[0][0])] = port + ports[e.dst][side_toward(node_cells[e.dst], result[-1][0])] = port + if e.fail and spec.direction == "LR" and node_cells[e.dst][1] < node_cells[e.src][1]: + warn(f"failure edge {e.src} -> {e.dst} routes upward; the style says never do that") + for c, piece in result: + existing = pieces.get(c) + if existing is None: + pieces[c] = piece + elif piece.label and not existing.label: + existing.label = piece.label + + xs = [c[0] for c in list(blocked) + list(pieces)] + ys = [c[1] for c in list(blocked) + list(pieces)] + minx, maxx, miny, maxy = min(xs), max(xs), min(ys), max(ys) + cols = " ".join(NODE_COL if x % 2 == 0 else EDGE_COL for x in range(minx, maxx + 1)) + rows = " ".join(NODE_ROW if y % 2 == 0 else EDGE_ROW for y in range(miny, maxy + 1)) + + def area(c: Cell, span: Cell | None = None) -> str: + x0, y0 = c[0] - minx + 1, c[1] - miny + 1 + if span is None: + return f"grid-column:{x0};grid-row:{y0};" + x1, y1 = span[0] - minx + 2, span[1] - miny + 2 + return f"grid-column:{x0}/{x1};grid-row:{y0}/{y1};" + + steps = [s.strip() for s in spec.meta.get("steps", "").split(",") if s.strip()] + step_of = {nid: i + 1 for i, nid in enumerate(steps)} + for nid in steps: + if nid not in spec.nodes: + warn(f"steps: unknown node '{nid}'") + + def group_chain(nid: str) -> list[str]: + chain: list[str] = [] + gid = spec.nodes[nid].group + while gid is not None: + chain.append(gid) + gid = spec.groups[gid].parent + return chain + + members_of = { + gid: [nid for nid in spec.nodes if gid in group_chain(nid)] for gid in spec.groups + } + + def nesting_depth(gid: str) -> int: + children = [g.id for g in spec.groups.values() if g.parent == gid and members_of[g.id]] + return 1 + max(nesting_depth(c) for c in children) if children else 0 + + items: list[str] = [] + for gid in sorted(spec.groups, key=nesting_depth, reverse=True): + members = [node_cells[nid] for nid in members_of[gid]] + if not members: + continue + lo = (min(c[0] for c in members), min(c[1] for c in members)) + hi = (max(c[0] for c in members), max(c[1] for c in members)) + for nid, c in node_cells.items(): + if nid not in members_of[gid] and lo[0] <= c[0] <= hi[0] and lo[1] <= c[1] <= hi[1]: + warn(f"group '{gid}' box also covers node '{nid}'") + items.append(render_group(spec.groups[gid], area(lo, hi), 14 + 22 * nesting_depth(gid))) + for nid, n in spec.nodes.items(): + items.append(render_node(n, area(node_cells[nid]), step_of.get(nid), ports[nid])) + for c, p in pieces.items(): + items.append(render_piece(p, area(c))) + + grid = ( + f'
' + "".join(items) + "
" + ) + note = spec.meta.get("note", "") + note_html = ( + f'
' + f'
' + f'
{esc(note)}
' + if note + else "" + ) + for key in ("fig", "pattern", "caption"): + if key in spec.meta: + warn(f"'%% {key}:' is ignored; figures carry no label or caption") + + width = spec.meta.get("width", "1200").rstrip("px") + title = spec.meta.get("title", "Flow figure") + return f""" + + + + +{esc(title)} +{font_face()} + + + +
+
{grid}{note_html}
+
+ + +""" + + +# ---------------------------------------------------------------- export + +CHROME_CANDIDATES = [ + "google-chrome", + "chromium", + "chromium-browser", + "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "/Applications/Chromium.app/Contents/MacOS/Chromium", +] + + +def find_chrome() -> str | None: + for c in CHROME_CANDIDATES: + if os.path.isabs(c) and os.path.exists(c): + return c + found = shutil.which(c) + if found: + return found + return None + + +def run_chrome_proc(proc: subprocess.Popen, done: Callable[[], bool], timeout: float = 60) -> None: + """Wait until `done()` reports Chrome's output is complete, then kill Chrome. + + Headless Chrome reliably produces its output but does not reliably exit + afterwards (its shutdown can wait on component extensions), so waiting + for the process is not an option. + """ + deadline = time.monotonic() + timeout + try: + while time.monotonic() < deadline: + if done(): + return + if proc.poll() is not None: + raise SystemExit("flowfig: Chrome exited without producing the export") + time.sleep(0.2) + raise SystemExit(f"flowfig: Chrome did not produce output within {timeout:.0f} seconds") + finally: + if proc.poll() is None: + proc.kill() + proc.wait() + + +def export_png(html_path: str, png_path: str, scale: float, width: int) -> None: + chrome = find_chrome() + if not chrome: + raise SystemExit("flowfig: no Chrome or Chromium found for --png") + url = "file://" + os.path.abspath(html_path) + workdir = tempfile.mkdtemp(prefix="flowfig-chrome-") + base = [ + chrome, + "--headless=new", + f"--user-data-dir={os.path.join(workdir, 'profile')}", + "--no-first-run", + "--no-default-browser-check", + "--use-mock-keychain", + "--disable-extensions", + "--disable-background-networking", + "--disable-component-update", + "--hide-scrollbars", + "--disable-gpu", + ] + dom_path = os.path.join(workdir, "dom.html") + png_tmp = os.path.join(workdir, "shot.png") + + def dom_done() -> bool: + return os.path.exists(dom_path) and open(dom_path, "rb").read().rstrip().endswith(b"") + + def png_done() -> bool: + return os.path.exists(png_tmp) and open(png_tmp, "rb").read()[-8:] == b"IEND\xaeB`\x82" + + try: + with open(dom_path, "wb") as fh: + proc_args = base + [f"--window-size={width},800", "--dump-dom", url] + proc = subprocess.Popen(proc_args, stdout=fh, stderr=subprocess.DEVNULL) + run_chrome_proc(proc, dom_done) + dom = open(dom_path, "rb").read() + m = re.search(rb'
]*data-h="(\d+)"', dom) + height = int(m.group(1)) + 80 if m else 800 + m = re.search(rb'
]*data-w="(\d+)"', dom) + if m: + width = max(width, int(m.group(1)) + 64) + run_chrome_proc( + subprocess.Popen( + base + + [ + f"--window-size={width},{height}", + f"--force-device-scale-factor={scale}", + f"--screenshot={png_tmp}", + url, + ], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ), + png_done, + ) + shutil.move(png_tmp, png_path) + finally: + shutil.rmtree(workdir, ignore_errors=True) + + +MEASURE_SCRIPT = ( + "" +) + + +def main(argv: list[str] | None = None) -> int: + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("spec", nargs="?", help="Mermaid spec file (default: stdin)") + ap.add_argument("-o", "--out", help="HTML output path (default: SPEC with .html, or stdout)") + ap.add_argument("--png", help="also export a PNG through headless Chrome") + ap.add_argument("--scale", type=float, default=2, help="device scale factor for --png (default 2)") + args = ap.parse_args(argv) + + text = open(args.spec, encoding="utf-8").read() if args.spec else sys.stdin.read() + try: + spec = Parser().parse(text) + except ValueError as exc: + raise SystemExit(f"flowfig: {exc}") + if not spec.nodes: + raise SystemExit("flowfig: the spec has no nodes") + page = render(spec) + + out = args.out + if out is None and args.spec: + out = os.path.splitext(args.spec)[0] + ".html" + if out: + with open(out, "w", encoding="utf-8") as fh: + fh.write(page) + print(out) + else: + sys.stdout.write(page) + + if args.png: + width = int(spec.meta.get("width", "1200").rstrip("px")) + 64 + with tempfile.TemporaryDirectory() as tmp: + measured = os.path.join(tmp, "fig.html") + with open(measured, "w", encoding="utf-8") as fh: + fh.write(page.replace("", MEASURE_SCRIPT + "")) + export_png(measured, args.png, args.scale, width) + print(args.png) + return 0 + + +if __name__ == "__main__": + sys.exit(main())