jackherd 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/INSTALL.md +2 -0
- package/README.md +41 -60
- package/assets/branding/README.md +5 -7
- package/assets/branding/jackherd-logo-outline.svg +1 -0
- package/assets/branding/outline.test.ts +30 -0
- package/assets/icons/bark.svg +1 -1
- package/assets/icons/bowl.svg +1 -1
- package/assets/icons/decide.svg +1 -1
- package/assets/icons/ear.svg +1 -1
- package/assets/icons/lanes.svg +1 -1
- package/assets/icons/plan.svg +1 -1
- package/dist/{chunk-M6DDZEW4.js → chunk-MCP4XJQH.js} +17 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.js +19 -3
- package/dist/plan-format.d.ts +22 -3
- package/dist/plan-format.js +21 -7
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/install.sh +1 -1
- package/kit/hooks/hooks/approval-gate/index.ts +22 -4
- package/kit/hooks/hooks/approval-gate/run.ts +29 -6
- package/kit/hooks/hooks/approval-gate/subagent.ts +18 -0
- package/kit/hooks/hooks/merge-guard/decision.ts +70 -21
- package/kit/hooks/hooks/merge-guard/xargs-program.ts +182 -0
- package/kit/hooks/hooks/sent-file/index.ts +19 -0
- package/kit/hooks/hooks/sent-file/record.ts +128 -0
- package/kit/hooks/hooks/sent-file/run.ts +48 -0
- package/kit/hooks/hooks/sent-file/store.ts +18 -0
- package/kit/hooks/hooks/shared/board-lanes.ts +15 -2
- package/kit/hooks/hooks.json +9 -0
- package/kit/hooks/statusline.sh +1 -1
- package/kit/workflow/skills/implement/SKILL.md +2 -0
- package/kit/workflow/skills/orchestrate/SKILL.md +31 -6
- package/package.json +3 -1
- package/schemas/jackherd.schema.json +26 -2
- package/src/cli.ts +3 -0
- package/src/config/read-config.ts +5 -1
- package/src/config/schema.ts +22 -2
- package/src/context/fill.ts +12 -0
- package/src/context/session-log.ts +43 -1
- package/src/plan-format/clock.ts +4 -0
- package/src/plan-format/dependencies.ts +2 -5
- package/src/plan-format/lanes.ts +30 -5
- package/src/plan-format/terminal-text.ts +4 -0
- package/src/plan-format/waiting.ts +48 -0
- package/src/plans/active-tasks.ts +60 -0
- package/src/plans/current-phase.ts +17 -7
- package/src/plans/current-task.ts +63 -5
- package/src/plans/lane-standing.ts +12 -6
- package/src/plans/lane-summary.ts +141 -74
- package/src/plans/lane-tickets.ts +15 -0
- package/src/plans/layout-phase.ts +57 -18
- package/src/plans/layout-summary.ts +85 -67
- package/src/plans/layout.ts +253 -89
- package/src/plans/live.ts +22 -0
- package/src/plans/phase-models.ts +1 -1
- package/src/plans/phase-ranges.ts +45 -0
- package/src/plans/pull-requests.ts +6 -0
- package/src/plans/selection.ts +19 -16
- package/src/plans/sent-files-read.ts +22 -0
- package/src/plans/sent-files.ts +121 -0
- package/src/plans/signals-read.ts +54 -0
- package/src/plans/snapshot.ts +251 -55
- package/src/plans/subagents-read.ts +82 -0
- package/src/plans/subagents.ts +132 -0
- package/src/plans/texts.ts +16 -11
- package/src/plans/unlisted-lanes.ts +10 -5
- package/src/plans/view.ts +3 -3
- package/src/plans/waiting-click.ts +76 -0
- package/src/preview/command.ts +83 -0
- package/src/preview/embed.ts +209 -0
- package/src/preview/images.ts +89 -0
- package/src/preview/open.ts +12 -0
- package/src/preview/options.ts +32 -0
- package/src/preview/page.ts +89 -0
- package/src/preview/render.ts +41 -0
- package/src/settled/board-row.ts +1 -2
- package/src/shared/is-record.ts +2 -0
- package/src/shared/private-records.ts +48 -0
- package/src/task-signals/agent.ts +15 -0
- package/src/task-signals/claude-read.ts +72 -0
- package/src/task-signals/claude-signals.ts +112 -0
- package/src/task-signals/command.ts +71 -0
- package/src/task-signals/fixtures/session.jsonl +7 -0
- package/src/task-signals/matcher.ts +96 -0
- package/src/task-signals/record-store.ts +40 -0
- package/src/task-signals/record.ts +68 -0
- package/src/task-signals/text.ts +13 -0
- package/src/task-signals/types.ts +14 -0
- package/src/terminal/open.ts +13 -6
- package/src/terminal/text.ts +8 -1
- package/src/terminal/width.ts +2 -1
- package/src/update/command.ts +2 -0
- package/src/update/config-shares.ts +30 -0
- package/src/update/update.ts +12 -1
- package/src/vocabulary/index.ts +33 -1
- package/src/waiting/command.ts +35 -0
- package/src/watch/appointments.ts +5 -5
- package/src/watch/approvals.ts +2 -2
- package/src/watch/command.ts +91 -5
- package/src/watch/failed-tests.ts +56 -10
- package/src/watch/failure-read.ts +18 -6
- package/src/watch/failures.ts +29 -5
- package/src/watch/feedback.ts +1 -1
- package/src/watch/gh-process.ts +9 -3
- package/src/watch/json-guards.ts +0 -3
- package/src/watch/lane-fill.ts +1 -1
- package/src/watch/lane-model.ts +1 -1
- package/src/watch/lane-parallel.ts +1 -1
- package/src/watch/lane-progress.ts +19 -7
- package/src/watch/lane-report.ts +5 -1
- package/src/watch/lane-rest.ts +28 -0
- package/src/watch/plan-badges.ts +9 -2
- package/src/watch/previews.ts +1 -1
- package/src/watch/pull-requests.ts +2 -1
- package/src/watch/source-path.ts +1 -1
- package/src/watch/sources.ts +1 -1
- package/src/watch/stream-output.ts +12 -7
- package/src/watch/task-parallel-input.ts +118 -0
- package/src/watch/task-parallel-read.ts +149 -0
- package/src/watch/task-parallel-touched.ts +39 -0
- package/src/watch/task-parallel.ts +206 -0
- package/src/watch/waiting-line.ts +19 -0
- package/src/watch/watch-events.ts +13 -1
- package/src/watch/workflow-runs.ts +2 -1
- package/assets/icons/bark-dark.svg +0 -1
- package/assets/icons/bowl-dark.svg +0 -1
- package/assets/icons/decide-dark.svg +0 -1
- package/assets/icons/ear-dark.svg +0 -1
- package/assets/icons/lanes-dark.svg +0 -1
- package/assets/icons/plan-dark.svg +0 -1
package/assets/icons/bark.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30.55 52.37" width="28" height="48" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-0.643 -0.176) scale(0.948)" stroke-width="1.845"><svg x="0" y="4" width="22.4" height="20" viewBox="439 80 402 359" preserveAspectRatio="xMinYMax meet"><defs><clipPath id="jack-head"><path d="M458 250L465 215L480 185L500 160L525 135L560 113L600 103L645 99L690 102L730 114L765 138L792 175L812 215L822 255L820 290L802 306L772 313L748 321L740 350L724 388L700 413L676 420L650 407L600 377L560 348L547 329L535 318L500 309L470 302L458 280Z"/></clipPath><mask id="jack-rim"><path d="M458 250L465 215L480 185L500 160L525 135L560 113L600 103L645 99L690 102L730 114L765 138L792 175L812 215L822 255L820 290L802 306L772 313L748 321L740 350L724 388L700 413L676 420L650 407L600 377L560 348L547 329L535 318L500 309L470 302L458 280Z" fill="#fff" stroke="#fff" stroke-width="16" stroke-linejoin="round"/></mask></defs><path mask="url(#jack-rim)" d="M694 108c.6 .6 .6 .6 4 3.5c2.5 1 2.5 1 6.6 1.6c11.2 2 19 6.7 26.4 15.3c3.3 3.4 7.2 4.9 11.5 7c12.2 6.4 19.5 15.5 25.5 27.6c-.1 1.3-.4 2.7-.5 4c0 10.8 7.3 19.8 14.3 27.6c4.9 4.4 10.5 7.6 16.2 10.9c.5 .8 .5 .8 3 5c.7 .8 1.4 1.7 2.1 2.6c7.5 9.3 12.5 20.2 11.4 32.4c-1.3 1.2-2.6 2.3-4 3.5c-1.4 3.6-1.5 6.4-1.2 10.2c.6 12.6-3.4 22.9-10.3 33.3c-5.1 4.4-5.1 4.4-10.5 5c-4.5 2.8-7 6-10.5 10c-6.9 5.3-12.2 8-21 8c-1.8-.8-3.6-1.6-5.5-2.5c-5-1.6-7.1-2.1-12 0c-8.3 6.2-8.3 6.2-10 10.5c-.6 11.3 .1 16.9 5.4 26.7c6.9 13.8 11.5 30.9 9.1 46.3c-1 .6-2 1.3-3 2c-3.4 4.2-3 7.1-3 12.4c.1 7.5-.4 13.7-3.5 20.6c-.5 1.3-1.1 2.6-1.7 3.9c-4.8 10.7-11.7 16.6-21.8 22.1c-4 3-4 3-7.5 6.5c-.5 .4-.5 .4-3 2.5c-.5 .6-.5 .6-3 4c-1.3 1.1-2.6 2.3-4 3.5c-6.3 5.6-6.3 5.6-7 11c1.4 5.4 3 7 7 11c2 3 2 3 3 8c.5 1.2 1 2.4 1.5 3.6c3.1 8 3.5 13.7 .5 21.9c-6.6 9.9-15.4 13.7-26.7 16.8c-6.4 1.2-12.4 1.5-18.9 .9c-3.6-.2-7.2-.2-10.8-.1c-9.2 0-15.9-2.1-24.1-6.1c-4-.5-4-.5-10.5 0c-10.9-2.4-19.9-9.1-27.4-17.2c-4.1-4.4-5.6-5.2-11.6-5.8c-2.5 .1-4.9 .3-7.3 .5c-34.1 2.3-34.1 2.3-46.2-7c-3-3.5-3-3.5-6.5-8.5c-2.5-2-2.5-2-6.5-4c-2.3-5.5-3.3-10-3.9-15.9c-.6-3.6-.6-3.6-3.6-7.6c-5.9-3.5-5.9-3.5-12.5-3.5c-3 1.5-3 1.5-6.8 5.3c-5.1 5-9.8 8.1-16.2 11.2c-3.6 4.3-4 4.9-4 10.5c.4 1.1 .6 2.3 1 3.5c.1 .6 .1 .6 .4 3.9c.7 4.8 1.7 8 5.6 11.1c-.1 .6-.4 1.3-.5 2c-5.1 1.9-10.1 2.8-15.5 3.5c-1.3 .4-2.6 .6-3.9 1c-7.9 1.9-15.6 2.1-23.6 2.5c-2.1 .1-4.3 .4-6.5 .5c-13.9-1.1-26.6-3.5-36.5-14c-3-6-3-6-4-10.9c-1.1-5.2-2.9-7-6.5-10.6c-3.2-16.4 1.4-30.4 10.5-44c1-1.5 2-2.9 3-4.5c.5-1.5 .5-1.5 .5-7.5c-1.5-3-1.5-3-6-8c-1-2-1-2-1-4c1.8-.6 3.6-1.3 5.5-2c9.9-5.7 16.1-13.1 19.5-24c.4-1.1 .7-2.1 1.1-3.3c3.9-12.8 3.9-12.8 .9-18.7c-3-2.5-3-2.5-6.1-4.1c-6.5-3.6-11.1-8.9-13.9-15.9c0-1.8 0-3.6 0-5.5c-1.8-4.1-3.1-5.5-7-7.5c-7.4-12.1-10.1-24.1-7.1-37.9c2-7.4 5-13.2 9.1-19.6c3.1-4.9 3.2-6.3 2-12c0-11.8 7.7-21.9 15.4-30.2c11.9-11.1 26.8-16.8 43.1-16.3c1.1 .5 2.3 1 3.5 1.5c5.5 .5 5.5 .5 10 .5c2.5 .9 5 1.9 7.5 3c3.5 .5 3.5 .5 8-.5c4.1-3.4 5.6-6.8 8-11.5c2.7-3.8 5.6-7.3 8.5-11c1.9-3.7 1.4-5.9 .5-10c-3-3.5-3-3.5-7-5.5c.1-.5 .4-1 .5-1.5c3.1-1.3 6.4-2.7 9.5-4c12.1-6.8 21.1-16.6 30-26.9c4.1-4.3 8.5-7.5 13.5-10.7c4.5-3.1 5.8-5.7 7.5-10.9c10-11 22.4-17.4 36.6-21.1c5.4-1.4 5.4-1.4 8.4-3.4c13.1-6.5 28.2-8.5 42.5-5c2.7 1 5.4 2 8 3c4.5 .7 6.8 0 10.5-2.5c.8-.7 1.6-1.3 2.5-2c9.5-4.8 9.5-4.8 12.5-4c31.5 0 31.5 0 38.5 4z" fill="#212E34" stroke="#212E34" stroke-width="16" stroke-linejoin="round"/><g clip-path="url(#jack-head)"><g id="jack"><path fill="#212E34" d="M694 108c.6 .6 .6 .6 4 3.5c2.5 1 2.5 1 6.6 1.6c11.2 2 19 6.7 26.4 15.3c3.3 3.4 7.2 4.9 11.5 7c12.2 6.4 19.5 15.5 25.5 27.6c-.1 1.3-.4 2.7-.5 4c0 10.8 7.3 19.8 14.3 27.6c4.9 4.4 10.5 7.6 16.2 10.9c.5 .8 .5 .8 3 5c.7 .8 1.4 1.7 2.1 2.6c7.5 9.3 12.5 20.2 11.4 32.4c-1.3 1.2-2.6 2.3-4 3.5c-1.4 3.6-1.5 6.4-1.2 10.2c.6 12.6-3.4 22.9-10.3 33.3c-5.1 4.4-5.1 4.4-10.5 5c-4.5 2.8-7 6-10.5 10c-6.9 5.3-12.2 8-21 8c-1.8-.8-3.6-1.6-5.5-2.5c-5-1.6-7.1-2.1-12 0c-8.3 6.2-8.3 6.2-10 10.5c-.6 11.3 .1 16.9 5.4 26.7c6.9 13.8 11.5 30.9 9.1 46.3c-1 .6-2 1.3-3 2c-3.4 4.2-3 7.1-3 12.4c.1 7.5-.4 13.7-3.5 20.6c-.5 1.3-1.1 2.6-1.7 3.9c-4.8 10.7-11.7 16.6-21.8 22.1c-4 3-4 3-7.5 6.5c-.5 .4-.5 .4-3 2.5c-.5 .6-.5 .6-3 4c-1.3 1.1-2.6 2.3-4 3.5c-6.3 5.6-6.3 5.6-7 11c1.4 5.4 3 7 7 11c2 3 2 3 3 8c.5 1.2 1 2.4 1.5 3.6c3.1 8 3.5 13.7 .5 21.9c-6.6 9.9-15.4 13.7-26.7 16.8c-6.4 1.2-12.4 1.5-18.9 .9c-3.6-.2-7.2-.2-10.8-.1c-9.2 0-15.9-2.1-24.1-6.1c-4-.5-4-.5-10.5 0c-10.9-2.4-19.9-9.1-27.4-17.2c-4.1-4.4-5.6-5.2-11.6-5.8c-2.5 .1-4.9 .3-7.3 .5c-34.1 2.3-34.1 2.3-46.2-7c-3-3.5-3-3.5-6.5-8.5c-2.5-2-2.5-2-6.5-4c-2.3-5.5-3.3-10-3.9-15.9c-.6-3.6-.6-3.6-3.6-7.6c-5.9-3.5-5.9-3.5-12.5-3.5c-3 1.5-3 1.5-6.8 5.3c-5.1 5-9.8 8.1-16.2 11.2c-3.6 4.3-4 4.9-4 10.5c.4 1.1 .6 2.3 1 3.5c.1 .6 .1 .6 .4 3.9c.7 4.8 1.7 8 5.6 11.1c-.1 .6-.4 1.3-.5 2c-5.1 1.9-10.1 2.8-15.5 3.5c-1.3 .4-2.6 .6-3.9 1c-7.9 1.9-15.6 2.1-23.6 2.5c-2.1 .1-4.3 .4-6.5 .5c-13.9-1.1-26.6-3.5-36.5-14c-3-6-3-6-4-10.9c-1.1-5.2-2.9-7-6.5-10.6c-3.2-16.4 1.4-30.4 10.5-44c1-1.5 2-2.9 3-4.5c.5-1.5 .5-1.5 .5-7.5c-1.5-3-1.5-3-6-8c-1-2-1-2-1-4c1.8-.6 3.6-1.3 5.5-2c9.9-5.7 16.1-13.1 19.5-24c.4-1.1 .7-2.1 1.1-3.3c3.9-12.8 3.9-12.8 .9-18.7c-3-2.5-3-2.5-6.1-4.1c-6.5-3.6-11.1-8.9-13.9-15.9c0-1.8 0-3.6 0-5.5c-1.8-4.1-3.1-5.5-7-7.5c-7.4-12.1-10.1-24.1-7.1-37.9c2-7.4 5-13.2 9.1-19.6c3.1-4.9 3.2-6.3 2-12c0-11.8 7.7-21.9 15.4-30.2c11.9-11.1 26.8-16.8 43.1-16.3c1.1 .5 2.3 1 3.5 1.5c5.5 .5 5.5 .5 10 .5c2.5 .9 5 1.9 7.5 3c3.5 .5 3.5 .5 8-.5c4.1-3.4 5.6-6.8 8-11.5c2.7-3.8 5.6-7.3 8.5-11c1.9-3.7 1.4-5.9 .5-10c-3-3.5-3-3.5-7-5.5c.1-.5 .4-1 .5-1.5c3.1-1.3 6.4-2.7 9.5-4c12.1-6.8 21.1-16.6 30-26.9c4.1-4.3 8.5-7.5 13.5-10.7c4.5-3.1 5.8-5.7 7.5-10.9c10-11 22.4-17.4 36.6-21.1c5.4-1.4 5.4-1.4 8.4-3.4c13.1-6.5 28.2-8.5 42.5-5c2.7 1 5.4 2 8 3c4.5 .7 6.8 0 10.5-2.5c.8-.7 1.6-1.3 2.5-2c9.5-4.8 9.5-4.8 12.5-4c31.5 0 31.5 0 38.5 4z"/><path fill="#4A4E51" d="M651.5 106.5c.6 .2 1.3 .3 2 .5c-.6 .6-.6 .6-4 3.5c-1.4 2.3-2.7 4.7-4 7c-.4 .2-.4 .2-2 1c-.6-.3-1.3-.7-2-1c-.6 .5-1.3 1-2 1.5c.1 .2 .1 .2 .5 1c-2-.5-2-.5-7-4.5c-4.8-2.5-9.4-4.2-14.5-5.5c-1-.3-2-.7-3-1c4.7-1.2 10.2 1.8 14.5 3.5c1.1 .3 2.3 .7 3.5 1c.6 .3 1.3 .7 2 1c.6-.8 1.3-1.7 2-2.5c.6-.2 1.3-.3 2-.5c-.6 1.3-1.3 2.7-2 4c.1 .2 .4 .3 .5 .5c.8 0 1.6 0 2.5 0c1-1.3 2-2.7 3-4c.6-.3 1.3-.7 2-1c0 .8 0 1.7 0 2.5c1-1.5 2-3 3-4.5c1-.8 2-1.7 3-2.5zM606.5 127c0 .5 0 1 0 1.5c-1.4 .4-2.7 .7-4.2 1.2c-8.1 2.7-14.3 6.7-20.3 12.8c1.4-.3 2.7-.7 4.1-.9c4.9-1.1 4.9-1.1 11.4-1.6c1 1 1 1 1 2.5c1 0 2 0 3 0c0 .5 0 1 0 1.5c-1 .5-2 1.1-3 1.6c-12.6 7-19.1 17.5-23.5 30.9c-.5 .3-1 .7-1.5 1c-.5-.2-1-.3-1.5-.5c-.7 1.4-1.4 2.9-2 4.4c-2.5 5.1-2.5 5.1-5.5 10.1c-.5 .2-1 .3-1.5 .5c0-6.8 1.7-12.2 4-18.5c-.4 0-.6 0-1 0c-.1 .3-.1 .3-1 2c-.6 1.2-1.2 2.3-1.8 3.6c-3.2 6.3-5.8 12.7-7.9 19.5c-1.7 5-3.7 8.9-6.3 13.4c-3 7.1-4.5 13.8-4.5 21.5c.4-1.3 .8-2.7 1.2-4.1c4.8-14.4 4.8-14.4 7.8-16.4c.1 1.1 .2 2.2 .3 3.3c1.8 12.3 6.3 24 10.4 35.6c4.8 15 3.9 29.5-1.7 44.1c-1.3 2.4-2.6 4.7-4 7c-.5 0-1 0-1.5 0c0-2.1 0-4.1 .1-6.2c-.1-10.5-2.4-18.9-7.1-28.3c-.4-.1-.6-.4-1-.5c.1 .6 .4 1.3 .5 2c1.3 16-1.7 32.7-11 46c-2.9-2.9-4.4-6.8-6.3-10.4c-2.2-3.8-4.6-7.5-7.2-11.1c-11-16.4-13.9-35.1-10.5-54.5c2.2-7.7 4.8-14.9 8.5-22c-14.6 14.6-18.4 34.4-19.1 54.2c.3 8.1 2.5 15.6 4.6 23.3c0 .5 0 1 0 1.5c-7.4-2.9-12.6-11.8-16.4-18.4c-6.3-14.7-5.4-28.9 .4-43.6c1-1.7 2-3.3 3-5c.4-.7 .6-1.3 1-2c-8 5.9-15 11.4-19.5 20.5c-.4 0-.6 0-1 0c0-13.1 7.6-26.4 16-36c.7-.9 1.4-1.8 2.2-2.7c4.6-5.6 9.7-10.7 14.8-15.8c1.9-2.2 3.7-4.4 5.4-6.7c2.6-3.3 2.6-3.3 7.1-7.8c-3.4 0-7 2.9-10 4.5c-.3 .1-.3 .1-1.5 .5c.5-2 .5-2 4.5-6c.7-1 1.4-2 2-3.1c11.5-15.4 27.5-26.1 46.5-29.4c2.5-.3 5-.7 7.5-1c-2.7-2.8-7.7-2.6-11.5-3c1.3-3.9 7.6-6.3 11.1-8.3c8.1-3.5 16.7-6.2 25.4-7.7c3.4-1.7 7.6 0 11 1zM743.5 149c4 1 6.9 4 10 6.5c.6-.3 1.3-.7 2-1c.1 .7 .4 1.3 .5 2c.1 .3 .4 .7 .5 1c.5 0 1 0 1.5 0c5 5.7 8.4 11.4 11 18.5c6.6 12.3 13.5 20.3 25.5 27.5c-.1 .1-.1 .1-1 .5c-1.3-.7-2.6-1.3-4-2c1 3.5 1 3.5 5 8.5c7 8.8 7 8.8 8 14.5c-3.7 .9-6.9-2.2-10-4c-.6-.4-.6-.4-4-2.5c-.5-.2-1-.3-1.5-.5c1.5 3 1.5 3 5.5 7c3.9 5.3 5 10.1 6 16.6c.3 1.6 .6 3.4 .9 5.2c1.6 13.3 1.6 13.3 .1 16.2c-.4 0-.6 0-1 0c-.3-1.1-.5-2.2-.9-3.3c-3.8-14-11.6-25.8-21.1-36.7c-7.5-8.8-7.5-8.8-7.5-13.5c-2.2-3.4-4.6-6.7-7-10c-1.8-4.4-3.1-8.9-4.5-13.5c-.5-1.2-1-2.3-1.5-3.5c0-.5 0-1 0-1.5c1.5 .5 1.5 .5 5 5.5c3.5 4 3.5 4 5 4.5c-.6-1.2-1.2-2.3-1.8-3.6c-3-6-5.2-12-7.2-18.4c-3.5-5-3.5-5-6-7.5c-1.5-2-1.5-2-4-7c-1.1-1.5-2.3-2.9-3.5-4.5c0-.3 0-.7 0-1zM720.5 140.5c1 0 2 0 3 0c0 .5 0 1 0 1.5c-.4 0-.6 0-1 0c0 .3 0 .7 0 1c1 .3 2 .7 3 1c10.4 9.3 15.4 19 16.5 33c-.6 .2-1.3 .3-2 .5c-1-.8-2-1.7-3-2.5c-8-4.7-14.1-7.7-23.5-6.5c0-3.9 6.3-8.3 9-11c0-.3 0-.7 0-1c-2-1-2-1-7-1c-6.4 2.6-10 6.3-14.5 11.5c.5 2 .5 2 3 4.5c.2 .1 .2 .1 1.5 .5c.1 .5 .4 1 .5 1.5c-1.5 2.8-3 5.7-4.5 8.5c-.4 .8-.6 1.7-1 2.5c-2 .5-4 1-6 1.5c-.1 .2-.1 .2-1 1c-.4 0-.6 0-1 0c1-2.5 1-2.5 2-3.5c.8-.2 .8-.2 5-1c.6-1.7 1.3-3.3 2-5c.6-1 1.3-2 2-3c0-.5 0-1 0-1.5c-1-.8-2-1.7-3-2.5c-.5-.7-1-1.3-1.5-2c1.6-6.6 9.1-11.3 14.5-14.5c3.3-.8 5.9-.8 9 .5c.4 .5 .4 .5 2.5 3c-2.6 2.7-5.3 5.3-8 8c2 .2 4 .3 6 .5c12.9 5.3 12.9 5.3 16.5 9c-.9-9.9-3.9-18.4-10.5-26c-5.5-4-5.5-4-9.5-6c0-1.5 0-1.5 1-2.5zM634 169.5c.8 .1 .8 .1 5 .5c6 2.5 6 2.5 9.5 6c.5 3.5 .5 3.5-2 7c-.4 0-.6 0-1 0c2.5 2.5 2.5 2.5 5.9 5.1c3.1 2.4 3.1 2.4 4.1 4.4c-2.5 2.1-4.3 3.3-7.5 4c.5 1.8 1 3.7 1.5 5.5c.8-.8 1.6-1.6 2.4-2.3c3.7-3.2 7.6-4.8 12.1-6.7c1 .5 2 1 3 1.5c.1 .5 .4 1 .5 1.5c-1.5 2-1.5 2-5 4c-4 3.2-6.9 6.1-10 10c-.4-.2-.6-.3-1-.5c2.9-5.8 8.1-9.7 13.5-13c0-.2 0-.3 0-.5c-6 .8-10 3.1-14.5 7c-.5 .7-1 1.3-1.5 2c-.2-.1-.2-.1-1.5-.5c-.1-1-.1-1-1-6c-.1-.4-.1-.4-1-2.5c.1-.8 .4-1.7 .5-2.5c1.3 .2 2.6 .3 4 .5c1-.5 2-1 3-1.5c-1.2-3.8-7.1-6.5-10.5-8.5c0-.3 0-.7 0-1c1.1-.7 2.3-1.3 3.5-2c1-2 1-2 .5-4.5c-4.1-4.1-8-4.3-13.5-5c-1.6-.5-3.3-1-5-1.5c-6.5 0-10.4 .3-16 3.5c-.1 .3-.4 .7-.5 1c1.3 0 2.6 0 4 0c6 1.6 10.8 4.3 16 7.5c-.1 .2-.1 .2-.5 1.5c-1.6 .2-3.3 .3-5 .5c-13 3.7-20.4 11.7-29 21.5c-3.5 3-3.5 3-5.5 4c10.9 .3 10.9 .3 15-2.5c.1-.2 .1-.2 .5-1.5c.5 0 1 0 1.5 0c-.1 .8-.4 1.7-.5 2.5c-5.5 3.6-8.5 4-15 4c-1.1-.3-2.3-.7-3.5-1c-.1-.7-.4-1.3-.5-2c1.5-1.5 1.5-1.5 5.5-3.5c3.7-3.7 7.1-7.6 10.5-11.5c6.5-6.2 13.2-10.1 22-12.5c-10.5-5.5-10.5-5.5-15-5.5c-.4-.1-.4-.1-2.5-.5c0-.7 0-1.3 0-2c7.7-6.2 15.2-6.8 24.5-4zM740.5 183c.4 .2 .6 .3 1 .5c.5 1.8 .9 3.7 1.3 5.5c1.4 5.5 3.1 10 5.7 15c.1 .5 .4 1 .5 1.5c-4.5-1-4.5-1-8.5-3c0-.3 0-.7 0-1c1.6 .3 3.3 .7 5 1c-6.5-3.3-10.8-4.5-18-4.5c-.1-.3-.4-.7-.5-1c.6-1 1.3-2 2-3c.4 .3 .6 .7 1 1c-.1 .3-.4 .7-.5 1c.6-.1 .6-.1 3.5-.5c3.6 .8 7 1.7 10.5 3c-.4-1.3-.8-2.4-1.2-3.7c-2.3-7.6-2.3-7.6-2.3-11.3c.1-.2 .4-.3 .5-.5zM578 181c.5 0 1 0 1.5 0c-1 3-1 3-2.7 6.9c-6.1 13.9-5.7 28.5-.7 42.7c.5 1.2 .9 2.2 1.4 3.4c1 0 1 0 5.5-4c10-7.4 20.1-11.8 32.5-12.5c.8-.2 1.6-.3 2.5-.5c1.1 .3 2.3 .7 3.5 1c1 0 2 0 3 0c.1 .3 .4 .7 .5 1c-.1 .3-.4 .7-.5 1c-1.3 0-2.6 0-4 0c0 .3 0 .7 0 1c1.4 0 2.7-.1 4.1-.1c4.4 .1 4.4 .1 6.9 1.1c-1.8 2.7-5.2 3.6-8 5c-9.7 6.1-17.5 13.3-24.5 22.5c.5-.3 1-.7 1.5-1c.6-.2 1.3-.3 2-.5c.4 .3 .6 .7 1 1c-.9 3.4-3.1 6.1-5 9c-5.1 10.3-6.7 19.6-6.5 31c-.5 0-1 0-1.5 0c0-.5 0-1 0-1.5c-.4 0-.6 0-1 0c0 1.8 0 3.6 0 5.5c-.4 1-.6 2-1 3c-1.1 4.7 1.1 10.2 3 14.5c-2-.5-2-.5-7-4.5c-1.1-.8-2.3-1.6-3.5-2.4c-3-2.1-3-2.1-5-4.1c.8-2.7 1.6-5.4 2.5-8c2.6-15.9 2.3-29.4-3.7-44.6c-7.5-19.6-7.5-19.6-5.8-29.9c.1 0 .4 0 .5 0c.4 1.7 .6 3.3 1 5c.4 0 .6 0 1 0c-.4-1.3-.6-2.7-1-4c-1.1-13.7 .6-23.9 7-36c.1-.3 .4-.7 .5-1zM621.5 219c0 .2 0 .3 0 .5c.8 0 1.6 0 2.5 0c0-.2 0-.3 0-.5c-.8 0-1.6 0-2.5 0zM591 268c-1.5 5.5-1.5 5.5-1 8c.1 0 .4 0 .5 0c1-5 1-5 1-8c-.1 0-.4 0-.5 0zM452.5 289.5c2.6 .2 5.4 .4 8 .5c.1-.1 .4-.4 .5-.5c.9 0 1.6 0 2.5 0c.1 .3 .1 .3 1 1.5c.4 .1 .4 .1 2 1c1.3 1.5 2.6 2.9 4 4.5c4 2.5 4 2.5 9.5 2.5c3.5 4 3.5 4 7.5 9.5c-1 2-1 2-1.5 2.5c-2.1 0-4.3 0-6.5 0c0-.5 0-1 0-1.5c.5 0 1 0 1.5 0c0-.4 0-.6 0-1c-.9-.1-1.6-.4-2.5-.5c-2.5-1-5-2-7.5-3c-8.3-2.1-16.2-.1-23.5 4c-4.4 3.6-7.6 8.4-9 14c0 6 0 6 1 10c-2.6 2.1-5.3 4.1-7.9 6.1c-6.5 5.3-11.5 11-16.1 17.9c-2.5-.5-2.5-.5-6.5-3c-.6-.1-1.3-.4-2-.5c0-.5 0-1 0-1.5c-.5 0-1 0-1.5 0c-5.6-1.4-9.9-6.9-13-11.5c.1-.5 .4-1 .5-1.5c2.2 2.4 4.4 4.9 6.5 7.5c1.5 1 2.9 2 4.5 3c-.2-.7-.2-.7-1.5-4.5c-.7-4.1-.6-8.3-.5-12.5c.9 .1 1.6 .4 2.5 .5c0-.5 0-1 0-1.5c-.9 0-1.6 0-2.5 0c0-8.6 0-8.6 2.5-12c2 .5 2 .5 3 1.5c.6 2.1 1.3 4.3 2 6.5c3 6 3 6 5.5 9c-.1-1.9-.1-3.7-.1-5.7c.2-14.2 4.5-22.7 14.6-32.8c16.6-10.6 16.6-10.6 23-8.5zM448 290c0 .1 0 .4 0 .5c1 0 2 0 3 0c0-.1 0-.4 0-.5c-1 0-2 0-3 0zM461 290c2 .5 2 .5 2 .5zM405 322c-.4 .4-.6 .6-1 1c.4 0 .6 0 1 0c.1 1.1 .4 2.3 .5 3.5c.4 .1 .6 .4 1 .5c-.5-4-.5-4-1.5-5zM403.5 323.5c.5 2 .5 2 .5 2zM403 326.5c.5 1 .5 1 .5 1zM551.5 328.5c1 1.5 2 2.9 3 4.5c14.9 20 14.9 20 24.5 25.5c1.9 1.5 3.7 3 5.5 4.5c1 .8 2 1.6 3.1 2.4c.4 .4 .4 .4 2.4 2.1c0 .5 0 1 0 1.5c-3.4-2.2-6.6-4.6-9.5-7.5c-.2 6.6 .5 12.5 2 19c.4 1.5 .6 2.9 1 4.5c-1.5 1.5-1.5 1.5-7 3c-.8 .8-1.6 1.6-2.5 2.5c-.8 .8-1.6 1.6-2.5 2.4c-2.5 2.6-2.5 2.6-5 5.6c-.6-.1-1.3-.4-2-.5c-.5-2-.5-2 1-7.5c-2.5 .5-2.5 .5-5.5 4c-.4 0-.6 0-1 0c-.4 .6-.6 1.3-1 2c-1.1 1.3-2.3 2.6-3.5 4c-8.5 12.7-11.5 27.9-11.5 43c-.4 .1-.6 .4-1 .5c-5-4-5.8-10.6-7-16.5c-.1-2.1-.4-4.3-.5-6.5c-.1 0-.4 0-.5 0c-2.1 9.9-2.8 19.9-3.5 30c.4 0 .6 0 1 0c.5 1 .5 1 .5 5c-.5 0-1 0-1.5 0c0-1.1 0-2.3 0-3.5c-1.8-.1-3.6-.4-5.5-.5c0-.4 0-.6 0-1c-1.6 0-3.3 0-5 0c-8.6-2.6-8.6-2.6-12.5-6.5c-1.5-1.2-3-2.4-4.5-3.5c-.4 .4-.4 .4-2.5 2c-6.1-3.3-10.1-6.6-15-11.5c-.6-.5-1.3-1-2-1.5c-.1-.8-.4-1.6-.5-2.5c-1.1-1.3-2.3-2.6-3.5-4c-1.4-2.6-2.7-5.3-4-8c-.4-.4-.6-.6-1-1c-1-1.5-1-1.5-1-5c-.4 0-.6 0-1 0c-.4-.6-.6-1.3-1-2c-1 5-1 5-1.5 11c-.1 .1-.4 .4-.5 .5c.9 6 1.7 11.7 3.5 17.5c0 .6 0 1.3 0 2c-.4 .1-.4 .1-2 1c-3.6-3-6.9-5.9-10-9.5c-.5-.5-1-1-1.5-1.5c0-.4 0-.6 0-1c-.4-.1-.4-.1-2-1c-9.1-13.1-10.6-25.7-9-41.5c-.6 .8-.6 .8-4 4.5c-.6-.1-1.3-.4-2-.5c-1.8-3.6 1.1-10.7 2.1-14.4c3.6-9.5 8.7-16.9 15.9-24.1c-16.7 3.4-31.6 13.6-42 27c-.4-.1-.6-.4-1-.5c1-2.5 1-2.5 2.5-4.5c.1-.8 .4-1.6 .5-2.5c10.4-16.9 22.1-29.1 41-36c15.8-3.5 29.7-1.9 45 3c.7 .1 .7 .1 4.5 1c-.1 .5-.4 1-.5 1.5c-2.5 .9-5 1.7-7.5 2.5c-3.5 1.5-3.5 1.5-4 2.5c1.5 .1 2.9 .4 4.5 .5c1 .2 1 .2 6 1.5c3.1 .5 6.4 1 9.5 1.5c-.6 1.6-1.4 3.4-2 5c8.8-6.4 14.8-11.9 20-21.5c1-.5 1-.5 4.3-.9c3.6-.6 6.7-3 10.2-2.1zM462 348c-.4 .4-.6 .6-1 1c.4 .1 .4 .1 2 1c0-.6 0-1.3 0-2c-.4 0-.6 0-1 0zM562.5 387.5c.5 1 .5 1 .5 1zM471 404c-.1 .6-.4 1.3-.5 2c1.5 0 1.5 0 2.5-.5c-.1-.5-.4-1-.5-1.5c-.5 0-1 0-1.5 0zM472.5 406c.5 1.5 .5 1.5 .5 1.5zM470 407.5c.5 2 .5 2 .5 2zM469.5 410c.5 2 .5 2 .5 2zM474 411.5c.5 1 .5 1 .5 1zM469 423.5c0 1 0 2 0 3c.1 0 .4 0 .5 0c0-1 0-2 0-3c-.1 0-.4 0-.5 0zM469.5 427c.5 1.5 .5 1.5 .5 1.5zM470 430c.5 1.5 .5 1.5 .5 1.5zM470.5 432c.5 1 .5 1 .5 1zM498.5 432.5c.5 3.5 .5 3.5 1.5 5c0-.5 0-1 0-1.5c.5 .1 1 .4 1.5 .5c-.5-1.5-1-2.9-1.5-4.5c-.5 0-.5 0-1.5 .5zM471 433.5c.5 1.5 .5 1.5 .5 1.5zM471.5 435.5c.5 1 .5 1 .5 1zM500.5 436.5c.5 1 .5 1 .5 1zM520.5 450c2 .5 2 .5 2 .5zM528 451.5c0 .1 0 .4 0 .5c.8 0 1.6 0 2.5 0c0-.1 0-.4 0-.5c-.8 0-1.6 0-2.5 0zM531 452.5c0 1 0 2 0 3c.1 0 .4 0 .5 0c0-1 0-2 0-3c-.1 0-.4 0-.5 0z"/><path fill="#9B9D9E" d="M720.5 140.5c.1 .3 .1 .3 .5 2c1.3 .7 2.6 1.3 4 2c9.5 7.6 13.6 15.7 16 27.5c0 1.5 0 2.9 0 4.5c-1.5 0-1.5 0-4-2c-7.4-4.3-13.2-7.4-22-7c0-1.5 0-1.5 2.9-4.4c1-1 2.1-2 3.1-3.1c.8-1 1.6-2 2.5-3c-1.5-1.5-1.5-1.5-3.5-2c-6.6 0-9.4 1.8-14.5 6c-2.9 3.1-2.9 3.1-5 6c.5 2 .5 2 3 4.5c.5 .5 1 1 1.5 1.5c-.5 2-.5 2-3.5 7.5c-.5 1.2-1 2.3-1.5 3.5c-.9 .2-.9 .2-5.5 1c-.1 .2-.1 .2-1 1c-3-3.1-2.1-7.8-2.1-11.9c0-1.4 0-2.9 0-4.3c.1-5.1 .5-9.9 3.1-14.3c.5-.2 1-.3 1.5-.5c.4 .2 .6 .3 1 .5c.1-.8 .4-1.7 .5-2.5c6-7.7 10.4-10.9 20-12.5c1-.5 1-.5 3 0zM642.5 160c1.3 1 2.6 2 4 3c.1-.7 .4-1.3 .5-2c2 0 2 0 5.1 2.8c7.5 8.1 12.9 19 12.9 30.2c-2 .8-4 1.7-6 2.5c-4.5 2.5-4.5 2.5-9.5 7c-.5-.2-1-.3-1.5-.5c-.5-2.2-1-4.3-1.5-6.5c-.1-.5-.4-1-.5-1.5c1.5-.5 1.5-.5 4.5-.5c1.1-.7 2.3-1.3 3.5-2c-1.2-3.7-7-6.3-10-8.5c.1-.5 .4-1 .5-1.5c.6-.2 1.3-.3 2-.5c1-2.5 1-2.5 .5-6c-4.2-4.2-8.7-4.6-14.5-5.5c-1.1-.3-2.3-.7-3.5-1c-7.4-.3-12.1 .6-18.5 4.5c-.1 .2-.1 .2-.5 1c.6-.1 .6-.1 3.5-.5c5.6 1.4 10.5 3.7 15.5 6.5c0 .7 0 1.3 0 2c-1.8 .3-3.6 .7-5.5 1c-10.5 3.8-17.5 9.9-24.5 18.5c-2.6 3.1-4.6 5.2-8.5 6.5c-.1 .2-.1 .2-.5 1.5c6.9 .1 11.9-.1 18-3.5c1.4 2.1 2.8 4.3 4 6.5c1.3 1 2.6 2 4 3c.1 .3 .1 .3 1 1.5c-1.5 1-1.5 1-4.9 1.2c-11.6 .9-21.9 6.4-30.7 13.9c-2.9 2.4-2.9 2.4-4.9 2.4c-6.7-17.5-7.6-33.2 0-50.5c2.2-4.4 4.1-7.2 7.5-11c-.4-.2-.6-.3-1-.5c3.9-7.7 16.8-12.7 24.5-16c12.7-3.5 23.3-3.8 35 2.5zM739.5 180.5c.6 .3 1.3 .7 2 1c0 1.5 0 2.9 0 4.5c2.5 10.3 2.5 10.3 4 14c-1.5 .5-1.5 .5-6-1.5c-2.6-.7-5.3-1.3-8-2c.4-1.3 .6-2.7 1-4c0-5 0-5-.5-10c.5-.3 1-.7 1.5-1c.1 .2 .4 .3 .5 .5c3.5 0 3.5 0 5.5-1.5z"/><path fill="#C4CBCE" d="M722 379.5c2.5 .5 2.5 .5 4.5 2.5c1.3 5 1.3 5 .5 8c-2 1-2 1-4 1.5c-1.5-1.5-1.5-1.5-2.5-3.5c-.6-.1-1.3-.4-2-.5c-.4-.6-.6-1.3-1-2c3-4.5 3-4.5 4.5-6z"/><path fill="#FAF9F8" d="M654.5 104c.9 .1 .9 .1 5.5 .5c-2.3 1.5-4.6 3-7 4.5c-3 3.5-3 3.5-3.5 5.5c1.1-.7 2.3-1.3 3.5-2c7.5-3.7 13.6-4.8 22-5c.1 .1 .1 .1 1 .5c0 .3 0 .7 0 1c-1.5 .8-3 1.7-4.5 2.5c-2.3 2.3-4.5 4.5-6 7.5c2-.5 2-.5 4-2c.8-.2 1.6-.3 2.5-.5c.9-.3 .9-.3 5.5-1.5c9.4 0 17.9 2.5 26.5 6c0 .5 0 1 0 1.5c-5 2-5 2-6 2c.1 .7 .4 1.3 .5 2c.4-.2 .6-.3 1-.5c8.9-.5 14.6 2 21.5 7.5c6 6.5 6 6.5 6 8.5c-1.3-.1-2.6-.2-4-.3c-7.5-.3-13.2 1.6-19.5 5.8c-3.5 4-3.5 4-6 9c-.8 0-1.6 0-2.5 0c-1.6 6.1-2.1 11.2-2.1 17.5c0 1.5 0 3 0 4.6c.1 3.9 .1 3.9 1.1 7.4c-1.5 1.5-1.5 1.5-5 2c-.4 .7-.6 1.3-1 2c1.8-.2 3.6-.3 5.5-.5c11 .8 18.8 4.6 27 12c5.3 .7 5.3 .7 10.5 1c15.8 3.9 26.5 12.1 35.1 25.8c2 3.9 3.3 7.5 4.4 11.7c-.1 .5-.4 1-.5 1.5c-1.5-.5-1.5-.5-5-5c-4.5-4.5-4.5-4.5-6-5c1 3 1 3 2.9 6.1c5.7 10.6 6.6 21.6 4.6 33.4c-3.4 8.7-7.5 15-14 21.5c-.5-.1-1-.4-1.5-.5c.1-1.1 .4-2.3 .5-3.5c.1-5.9 .2-10.7-1.5-16.5c-.4-.1-.6-.4-1-.5c-.2 1.3-.4 2.6-.5 4c-2.1 11.1-7 19.5-15 27.5c-.5 .1-1 .4-1.5 .5c0 .4 0 .6 0 1c-12.6 9.5-12.6 9.5-18.5 9.5c1-2.5 1-2.5 3.5-6c2.5-5.5 2.5-5.5 2.5-8c-.4-.1-.6-.4-1-.5c-.4 .6-.6 1.3-1 2c-8.9 10.1-18.4 16.1-31.5 19c-11.5 .7-20.9-3.4-29.5-11c0-.4 0-.6 0-1c-.4 0-.6 0-1 0c.8 6.3 3.4 9.9 7.5 14.5c0 .4 0 .6 0 1c-14.5 0-27.2-5.3-37.5-15.5c-.6-.8-.6-.8-3.5-5c-.5-.5-1-1-1.5-1.5c-.5 0-1 0-1.5 0c1 6.3 2.6 11.2 5.5 17c0 .6 0 1.3 0 2c-10.8-2.1-20.7-7.8-27.4-16.7c-6-9.4-7.6-18.9-6-29.8c1.9-8.3 4.9-14.9 9.4-22c.6-1.2 1.3-2.3 2-3.5c-2 1-2 1-5 4.5c-.5 0-1 0-1.5 0c1.6-6.3 7.7-12.3 12.5-16.5c.8-.8 1.6-1.6 2.5-2.4c9.6-8.4 20.5-13.8 32.8-17.3c3.7-1.3 3.7-1.3 5.2-3.8c4.5-7 9-12.1 16-16.5c.4 0 .6 0 1 0c.1-.7 .4-1.3 .5-2c-.8-.2-1.6-.3-2.5-.5c-.1-1.4-.3-2.9-.5-4.4c-2-10.8-6.9-20.7-15-28.1c-.4-.2-.6-.3-1-.5c.5 1 1 2 1.5 3c-.1 .5-.4 1-.5 1.5c-.7-.6-.7-.6-4.5-3.5c-10-6-18.7-7.2-30.2-5.2c-15.8 4.4-29.1 13.5-39.3 26.2c-.8 .8-1.6 1.7-2.5 2.5c0-11.4 6-22.8 13-31.5c5.9-5.9 11.7-9.8 19.5-13c0-.2 0-.3 0-.5c-8 0-15.4 1.2-23 3.5c-.5 0-1 0-1.5 0c1.2-4.9 6.6-8.1 10.6-10.7c5.5-3.2 10.6-5 16.9-6.3c0-.5 0-1 0-1.5c-8-2.2-15.3-3.3-23.5-4c-.1-.3-.4-.7-.5-1c19.3-6.7 36.5-6.3 55.5 1c.5 .2 1 .3 1.5 .5c-1.5-2.5-1.5-2.5-3.5-4.5c0-.3 0-.7 0-1c1 0 2 0 3 0c.5-.3 1-.7 1.5-1c.5 0 1 0 1.5 0c.1 .2 .1 .2 1 1c1.6-2.2 3-4.6 4.5-7c1.5-1.3 3-2.7 4.5-4c.5-.7 1-1.3 1.5-2zM640.5 117.5c0 .7 0 1.3 0 2c.5 .3 .5 .3 3 2c.4-.7 .6-1.3 1-2c-1.5-1.5-1.5-1.5-4-2zM679.5 200c-4 4.6-4 4.6-4 9.5c3.6 4.3 6.6 5.1 12 6.5c.4 .3 .4 .3 2.5 2c1.5 .5 3 1 4.5 1.5c.9 5.3 .5 7.1-2 12c-8.1 8.2-15 9.1-26 9.5c-.1 .7-.4 1.3-.5 2c7.6 3.8 14.5 3 22.5 .5c4.7-2.1 7.3-3.7 11-7.5c3.5 .5 3.5 .5 7 1.5c4.3 1.1 7.5 .7 11.5-1c2.5-2.5 2.5-2.5 3.5-4.5c-2-.5-2-.5-5.8-.4c-5.2-.1-8.4-1-12.7-4.1c-1.5-4.5-1.5-4.5-2-10c1.6-1.5 3.3-2.9 5-4.5c2.5-5 2.5-5 3-9c-1.5-4.5-1.5-4.5-4.5-7c-8.7-3.2-17.1-1.4-25 3zM555.5 134.5c-2.5 2.5-2.5 2.5-6.5 5.5c-.8 .8-1.6 1.7-2.5 2.5c-3.3 1.1-6.6 2.1-10 3c-1.5 .7-3 1.3-4.5 2c-.4-.2-.6-.3-1-.5c4.2-7.8 9.8-9 18-11.6c4-.9 4-.9 6.5-.9zM728 178c2.5 1 2.5 1 5.5 3.5c0 1.3 0 2.7 0 4c.1 1.5 .4 2.9 .5 4.5c0 3.5 0 3.5-1.5 6.5c-.6 .1-.6 .1-3.5 .5c-.5-2-.5-2 1-7c0-4.1-.4-6.8-2-10.5c0-.5 0-1 0-1.5zM495.5 193c-2 4-5.7 6.6-9 9.5c-1.7 1.7-3.4 3.3-5 5c-.5-1-.5-1 0-4.5c-1-4.5-1-4.5-4-8.5c.9-.1 .9-.1 5.2-.2c4.3-.2 8.5-1.3 12.8-1.3zM618.5 196.5c-.1 2-.4 3.9-.5 6c1.2 6.3 2.9 9.4 7.5 14c.1 .1 .1 .1 1 .5c0 .5 0 1 0 1.5c-3.3 1.6-7.2 .3-10.5-.5c-4.1-2.9-6.2-5.5-8.5-10c.5-3.5 .5-3.5 5-8c5-3.5 5-3.5 6-3.5zM797 228.5c4.8 1.2 8.5 6.9 11.5 10.5c0 .3 0 .7 0 1c.6 .3 1.3 .7 2 1c.8 1.3 1.6 2.7 2.5 4c.4 .3 .6 .7 1 1c-1.1 1-2.3 2-3.5 3c-1 2.5-1 2.5-1.5 5.5c-1-1.5-1-1.5-1.9-4.7c-2.1-7.4-5.3-13-9.6-19.3c-.1-.7-.4-1.3-.5-2zM466 229c.5 1.5 .5 1.5-2 7.5c-3.6 14.2-3.6 27.9 3.1 41.1c2.9 4.9 2.9 4.9 7.4 9.9c.5 0 1 0 1.5 0c-.2-1.1-.4-2.1-.6-3.2c-.7-7.2-.2-13.9 2.1-20.8c.4 0 .6 0 1 0c.5 1 .5 1 .9 5.3c2 17.8 9.7 30.6 22.6 42.7c7.4 5.1 14.9 8.5 23.5 11c0 .5 0 1 0 1.5c-8.2 2.2-14.6 3.1-22.8 .8c-14.9-3.8-28.8-3.3-43.7 .2c-.5-2-.5-2 1.5-6.5c5.3-6.6 12.7-7.7 20.8-8.6c1.6-.1 3.1-.3 4.7-.4c-1.6-3.1-3.5-6.5-6-9c-1.8 0-3.6 0-5.5 0c-5-3.5-5-3.5-7.9-6.6c-2.6-2.9-2.6-2.9-5.6-3.9c-12.9-.4-23.7 2.9-33.5 11.5c-.5-.1-1-.4-1.5-.5c2-2.5 2-2.5 4-4.5c-1.5-.5-1.5-.5-3-.5c-1.5 3-1.5 3-1.5 6c0 1.5 0 1.5-3.5 6.5c-5.6 10.3-5.9 18.9-5 30.5c-5.1-2.6-7.3-7.6-9.5-12.5c-.5-1.8-1-3.6-1.5-5.5c-.5-.1-1-.4-1.5-.5c-2.1 10.5-2.2 19.9 1.5 30c0 .5 0 1 0 1.5c-9.8-4.9-14.8-13.2-18.5-23c-1.6-6-2.4-11.9-1.5-18c.4-.1 .4-.1 2.5-1c2.5-5 2.5-5 3-7.5c-.9 .5-1.6 1-2.5 1.5c-2.1-4.2-.2-10.6 1-15c5.6-14.8 16.3-25.1 30-32.5c10.8-4.5 10.8-4.5 13-4.5c-.1-.5-.4-1-.5-1.5c-11.3-2.5-21.3-.6-32 3c-.4 0-.6 0-1 0c1.3-5.2 8.4-9 12.5-12c13.6-7.4 26-10.4 41.5-9c.1-.3 .4-.7 .5-1c1.6 .2 3.3 .3 5 .5c4.5-1 4.5-1 7-3zM396.5 263c-2.5 2.5-2.5 2.5-6.5 5.5c-4.8 4.3-9.2 8.4-13 13.5c-.5-1-.5-1 0-4.5c-.1-1.5-.4-2.9-.5-4.5c2-2 2-2 5.5-4c.5-.3 .5-.3 3.1-1.9c8.5-5.1 8.5-5.1 11.4-4.1zM792 278.5c1.5 .5 1.5 .5 2 1.5c.1 5.6-.2 10.9-1 16.5c-1.8 .5-3.6 1-5.5 1.5c-.8 .4-1.6 .6-2.5 1c.9-2.2 2-4.4 3-6.5c2-4.8 3.1-8.9 4-14zM374.5 324c.4 .1 .6 .4 1 .5c.2 1.4 .4 2.9 .6 4.4c2 12.2 7.7 20.3 16.9 28.6c-.1 .3-.1 .3-.5 1.5c-9.6-2.8-9.6-2.8-13-5c-.4-2-.6-3.9-1-6c-2.5-3.5-2.5-3.5-6-5.5c.1-.4 .4-.6 .5-1c.1-4.1 .2-8.3 .3-12.4c.2-3.6 .2-3.6 1.2-5.1zM677.5 347c4.5 1.5 4.5 1.5 5.5 3.5c-1.6 6.6-3.8 13.1-6 19.5c-.6 2-1.2 3.9-1.9 6c-2.1 6.5-2.1 6.5-4.1 8.5c-4.5-.5-4.5-.5-6.5-2.5c1.5-5.3 3.1-10.4 5-15.6c.5-1.8 1.1-3.6 1.8-5.5c.6-1.5 1.1-3.2 1.7-4.9c.5-1.4 .9-2.6 1.4-4c1.1-3 1.1-3 3.1-5zM462.5 349c-1 2-1 2-3.3 4.2c-9.5 9.7-13.8 21.6-15.7 34.8c2-1 2-1 6-6.5c.4 0 .6 0 1 0c-.3 2.9-.6 5.7-1 8.5c-.3 13.1 .6 23.4 8 34.5c.9 .8 1.6 1.6 2.5 2.5c4.5 5 4.5 5 5.5 7c.6 .4 1.3 .6 2 1c1.1 1 2.3 2 3.5 3c.4 0 .6 0 1 0c-.8-3.6-1.6-7.4-2.5-11c-1-7.1-.1-14.1 1-21c.5-.4 1-.6 1.5-1c.5 1.6 1 3.1 1.5 4.8c3.4 9.6 7.3 16.4 15 23.2c1.6 1.5 3.3 2.9 5 4.5c2.3 1.4 4.6 2.7 7 4c.1-.5 .4-1 .5-1.5c-.4-.6-.6-1.3-1-2c0-.6 0-1.3 0-2c2 1 2 1 3.9 3.9c5.4 8 13.2 9.3 22.2 11.3c.8 .2 .8 .2 4.4 .8c1 3.5 1 3.5 2 9.5c1.4 7.6 1.4 7.6 2 10c-7.3 1.4-16-2-22.7-4.7c-1.1-.4-2.2-.9-3.3-1.3c-.4 .1-.4 .1-2 1c-14.9-3-28.1-16-39-26c-1.3 5.2 3.1 11.6 5.5 16c-1.9 9.5-11.4 17.4-19 22.5c-10.2 5.4-20.5 7.6-32 9c3.1 3.1 8.4 3.4 12.5 4.5c6.2 2.1 8.1 4.1 11 10c.5 4.5 .5 4.5-1 8c-1.3 .8-2.6 1.6-4 2.5c-.5-.1-1-.4-1.5-.5c-.4-2-.6-3.9-1-6c-.4-.8-.6-1.6-1-2.5c-1-.1-2-.4-3-.5c.4 1 .6 2 1 3c0 3.5 0 3.5-1.5 7c-3.9 2.6-9.1 2-13.5 2c-.6-.1-1.3-.4-2-.5c-.5-2-1-3.9-1.5-6c-.5-.8-1-1.6-1.5-2.5c0-.4 0-.6 0-1c-.5 0-1 0-1.5 0c-.1 2.1-.4 4.3-.5 6.5c-.4 .8-.6 1.6-1 2.5c-5.5 2.2-11.6-.4-17-2c-7.4-5.2-10.6-9.4-12.5-18c0-4.7 .1-9.3 .5-14c-.5 0-1 0-1.5 0c-.4 .6-.4 .6-2.5 4c-.4 0-.6 0-1 0c-.4 .8-.6 1.6-1 2.5c-.6 1.2-1.3 2.4-2 3.7c-1.9 4-2.6 6.9-3 11.3c-.1 0-.4 0-.5 0c-.4-1.5-.6-2.9-1-4.5c-3-3.5-3-3.5-4-4.5c.4 0 .6 0 1 0c.1-1.1 .4-2.3 .5-3.5c.4 0 .6 0 1 0c.4-1 .6-2 1-3c2.2-4.2 4.6-7.7 7.5-11.5c.5-2.6 1-5.4 1.5-8c5-12.6 12.4-23.1 21-33.5c2.8-3.4 5.4-6.9 8-10.5c-3.8-.9-7.8 1-11.5 2c-1.6 .1-3.3 .4-5 .5c0-.6 0-1.3 0-2c1.3-1.1 2.6-2.3 4-3.5c7.9-8.1 13.4-17.6 18-28c-.3-.1-.3-.1-1.5-.5c1.8-12.7 10.6-21.6 20.1-29.4c8.2-5.9 20.1-13.1 30.4-13.1zM476 422.5c-.4 .8-.6 1.6-1 2.5c-.4 .4-.6 .6-1 1c.5 2.5 .5 2.5 1.5 4c1 0 2 0 3 0c0-.5 0-1 0-1.5c.1-.1 .4-.4 .5-.5c.6 .4 1.3 .6 2 1c-1-2.5-1-2.5-4-6.5c-.4 0-.6 0-1 0zM660.5 353.5c2 1 2 1 5 5c-2.1 3.5-5.2 5.1-8.5 7.5c-.1 .5-.4 1-.5 1.5c1 .6 1.9 1.2 2.9 1.8c3.1 2.2 3.1 2.2 5.6 5.2c-2 4-2 4-3 5c-6-1.5-12.3-7-17-11c1-5.8 7-8.7 11.5-12c1.3-1 2.6-2 4-3zM686 353.5c5.9 1.1 11.4 6.9 15.5 11c-.7 5.1-3.6 6.4-7.5 9.5c-.5 .4-.5 .4-3.1 2.6c-2.4 1.9-2.4 1.9-3.9 2.4c-1.4-1.4-2.6-2.6-4-4c.9-3.4 3.9-5.2 6.5-7.5c.6-.6 1.3-1.3 2-2c-.6-.4-1.3-.6-2-1c-5.9-4.1-5.9-4.1-7-6.5c1.5-2.5 1.5-2.5 3.5-4.5zM579 360c2 .5 2 .5 6.5 4.5c2 1.5 4 3 6 4.5c.9 .6 1.6 1.3 2.5 1.9c4.6 3.5 9.4 6.7 14.2 9.9c1.8 1.3 3.7 2.5 5.6 3.8c4.1 2.6 8.1 5 12.2 7.4c.8 .6 1.6 1.3 2.5 2c2.5 1.5 5 3 7.5 4.5c6.6 4.2 13.1 8.4 19.5 13c.8 .6 .8 .6 4.9 3.3c3.7 2.6 7.1 5.3 10.6 8.2c3.2 2.6 3.2 2.6 6 4.5c6-2 11-6.6 15.5-11c.6-.4 1.3-.6 2-1c.4-.6 .6-1.3 1-2c.4-.4 .4-.4 2-2c.4 0 .6 0 1 0c.4-.6 .6-1.3 1-2c.8-1 1.6-2 2.5-3c.4 0 .6 0 1 0c.4-.8 .6-1.6 1-2.5c1.5-1.6 3-3.3 4.5-5c1.1-1.8 2.3-3.6 3.5-5.5c1-1.4 1.9-2.9 2.9-4.4c4.6-7.2 7.3-14.8 9.6-23.1c3.5 1.7 4.4 5.6 6 9c1.5 2.5 3 5 4.5 7.5c5.4 9.9 5.4 9.9 7 13c.5 .4 1 .6 1.5 1c-1.3 1.1-2.6 2.3-4 3.5c-.4 .9-.4 .9-2 5.5c-.1 0-.4 0-.5 0c-.1-1.5-.4-2.9-.5-4.5c-2-6.4-4.3-11.6-7.5-17.5c-.5-.1-1-.4-1.5-.5c.1 .4 .4 .6 .5 1c1.4 23.4-1.7 45.9-17 64.5c-1.1 1.1-2.3 2.3-3.5 3.5c-.1 0-.4 0-.5 0c.1-1.1 .4-2.3 .5-3.5c.9-6.9 1.7-13.6 1.5-20.5c-1.5 1.5-1.5 1.5-3.1 6c-5 13.5-14.3 24.7-25.9 33c-.6 .5-1.3 1-2 1.5c-.5 0-1 0-1.5 0c-1.1-1.6-2.3-3.3-3.5-5c-4-4.5-7.8-8.4-12.6-12c-4.4-3.4-6-6.4-8.6-11.2c-2.3-4.3-2.3-4.3-5.8-9.3c0-.4 0-.6 0-1c-.4 .1-.4 .1-2 1c-.6 0-1.3 0-2 0c-2.5-2.5-2.5-2.5-3-3.5c-.6-.4-1.3-.6-2-1c-1.1-1-2.3-2-3.5-3c2.5 6.3 5.1 12.3 8.3 18.2c.6 1.1 1.1 2.2 1.7 3.3c-.1 .5-.4 1-.5 1.5c-1.2-.4-2.5-.8-3.7-1.3c-3.8-1.2-3.8-1.2-4.8-1.2c1.3 3.8 7 6.2 10.3 8.4c12.8 9.3 21.8 20.7 28.2 35.1c0 .4 0 .6 0 1c-1.5-.1-3-.4-4.5-.5c0 .5 0 1 0 1.5c3.1 2.4 6.3 4.7 9.5 7c7.2 6.4 10.8 12.6 12.5 22c-1.6 5-2.9 6.9-7 10.5c-1.5-1.5-1.5-1.5-2.5-6.5c-2.5-5-2.5-5-5-7.5c-.4 0-.6 0-1 0c.5 2.5 1.2 5 2 7.5c0 5.5 0 5.5-2 9.5c-5 2.5-5 2.5-10 3.5c-1.3 .4-2.6 .6-4 1c-1.8-.1-3.6-.4-5.5-.5c-1-1.5-1-1.5-1.5-6c-2-5-2-5-3.5-6.5c-.4 .1-.6 .4-1 .5c0 2.1 0 4.3 0 6.5c-1.5 3.5-1.5 3.5-4 5c-9 1.8-17.6-1.5-25.5-6c-4.2-3-7.7-5.5-11-9.5c-.8-.4-1.6-.6-2.5-1c.3 1.2 .6 2.4 1 3.6c.5 2.1 1 4.3 1.5 6.4c-.4 .1-.6 .4-1 .5c-15.7-7.7-24.2-21-30-37c-1.6-5.3-2.6-10.1-3.5-15.5c-.6 .1-1.3 .4-2 .5c-1.9 6.4-2.6 12-2.5 18.6c0 1.4 0 2.8 0 4.2c0 1.1 0 2.1 0 3.2c-8-4-13-13.3-16.5-21c-.7-2.3-1.4-4.6-2-7c-.4-1.1-.6-2.3-1-3.5c-1-11-.6-22.1 3.5-32.5c-.6-.1-1.3-.4-2-.5c-.4 .8-.6 1.6-1 2.5c-.5 .7-.5 .7-3 4.5c-1.9 4.3-3.8 8.6-5.5 13c-.5 .1-1 .4-1.5 .5c0-4.6 .1-8.9 .5-13.5c0-1.2 0-2.4-.1-3.7c.4-19.4 5.6-36.9 19.6-50.8c2.5-2 2.5-2 6-3c-.5 4-.5 4-2 9c2-1 2-1 5.5-5c.8-.8 1.6-1.6 2.5-2.5c.8-1 1.6-2 2.5-3c4-1.5 4-1.5 6.5-2c-.7-3.1-1.4-6.1-2-9.1c-1-5.5-1.1-10.4-1-15.9zM722 380.5c-1.5 1.5-1.5 1.5-3.5 5c.1 .5 .4 1 .5 1.5c.4 .1 .4 .1 2 .5c.4 .5 .4 .5 2 3c1.1-.4 2.3-.6 3.5-1c-.1-.6-.4-1.3-.5-2c0-1 0-1 .5-2.5c-1.5-3.5-1.5-3.5-3-4.5c-.5 0-1 0-1.5 0zM709.5 400c-.5 .5-1 1-1.5 1.5c.1 .5 .4 1 .5 1.5c1-.4 2-.6 3-1c-.4-.6-.6-1.3-1-2c-.4 0-.6 0-1 0zM714.5 428.5c-.6 .6-1.3 1.3-2 2c-.4 0-.6 0-1 0c.1 .6 .4 1.3 .5 2c.4-.1 .6-.4 1-.5c.4 1.1 .6 2.3 1 3.5c2.5 .5 2.5 .5 4 0c.4-1 .6-2 1-3c-1.1-1.3-2.3-2.6-3.5-4c-.4 0-.6 0-1 0z"/><path fill="#03B5BD" d="M569 311.5c3.5 2 3.5 2 7 4.5c4.8 2.3 9.6 4.4 14.5 6.5c1.1 .5 2.3 1 3.5 1.5c28 9.3 28 9.3 42.6 9c4 0 7.5 .9 11.4 2c8.4 1.4 16.6 1.2 25 .5c1.8 0 3.6 0 5.5 0c9.7-.8 19.1-3.5 28-7.5c3.5-1.1 7-2.1 10.5-3c0 10.4-6.5 17.6-12.5 25.5c4.8-2.6 8.6-5.1 12.5-9c.6 0 1.3 0 2 0c0 13-4.1 24.7-10.5 36c-.7 1.4-1.5 2.7-2.2 4.1c-6.8 11.4-16.3 21.3-25.8 30.4c-.8 .1-1.6 .4-2.5 .5c-2.9-2.1-5.7-4.3-8.5-6.5c-5.3-3.8-10.6-7.4-16-11c-1.5-1-3-2-4.5-3c-5.8-3.8-11.6-7.4-17.5-11c-4.3-2.6-8.4-5.2-12.5-8c-1.3-.8-2.6-1.6-4-2.4c-6.4-4.1-12.5-8.5-18.5-13.1c-1-.8-2.1-1.6-3.2-2.4c-12.3-9.6-24-20.3-32.3-33.6c1-2.5 1-2.5 2.5-4c.4 0 .6 0 1 0c.4-.6 .6-1.3 1-2c2.5-3.5 2.5-3.5 3.5-4zM677.5 348c-4 6.8-6 15.1-8.5 22.5c-.8 2.1-1.5 4.2-2.2 6.4c-1.3 4.1-1.3 4.1-.3 6.1c1.5 .1 3 .4 4.5 .5c2.1-3.6 3.1-7.4 4.4-11.3c1.6-5.3 3.4-10.6 5.1-15.9c1-3.3 1-3.3 1.5-6.8c-1.5-.5-3-1-4.5-1.5zM647 365c-.4 .5-.6 1-1 1.5c1 4.7 6.5 6.6 10.2 9.3c1.4 .8 2.8 1.8 4.3 2.7c.4-.1 .4-.1 2-.5c.5-1.3 1-2.6 1.5-4c-2.8-2.3-5.6-4.4-8.5-6.5c0-.5 0-1 0-1.5c2.8-2.1 5.6-4.1 8.5-6c.1-.5 .4-1 .5-1.5c-1-1.3-2-2.6-3-4c-4 0-11.5 8.1-14.5 10.5zM686 354.5c-2 2-2 2-2.5 4c2.5 2.5 2.5 2.5 5.6 4.8c2.9 2.2 2.9 2.2 3.4 3.7c-.4 .1-.4 .1-2 1c-5 4-5 4-6.5 5.5c.5 2 .5 2 3 4.5c3.5-1.7 6.1-4.5 9-7c1.3-1 2.6-2 4-3c.1-1.1 .4-2.3 .5-3.5c-11.3-10-11.3-10-14.5-10z"/><g id="face-lights" fill="#FAF9F8"><circle cx="628.3" cy="198" r="3.4"/><circle cx="714.2" cy="182.6" r="3"/><ellipse cx="692.6" cy="201.6" rx="4.2" ry="1.6" transform="rotate(-12 692.6 201.6)"/></g><path fill="#03B5BD" d="M640 345H706L700 388L645 390Z"/><path d="M660.5 356.5L648 366L660.5 375.5M680.5 350.5L669 382.5M685.5 356.5L698.5 365.5L686 375" fill="none" stroke="#FAF9F8" stroke-width="4.6" stroke-linecap="round" stroke-linejoin="round"/></g><g id="face-lights" fill="#FAF9F8"><circle cx="628.3" cy="198" r="3.4"/><circle cx="714.2" cy="182.6" r="3"/><ellipse cx="692.6" cy="201.6" rx="4.2" ry="1.6" transform="rotate(-12 692.6 201.6)"/></g></g></svg><g stroke="#03B5BD"><path d="M19.4 1.9a2.6 2.6 0 0 1 0 3.6"/><path d="M21.3 0.6a4.4 4.4 0 0 1 0 6.2"/></g></g></svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.18 37.09" width="24" height="34" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-0.643 -1.606) scale(0.948)" stroke-width="1.845"><svg x="0" y="4" width="22.4" height="20" viewBox="439 80 402 359" preserveAspectRatio="xMinYMax meet"><defs><clipPath id="jack-head"><path d="M458 250L465 215L480 185L500 160L525 135L560 113L600 103L645 99L690 102L730 114L765 138L792 175L812 215L822 255L820 290L802 306L772 313L748 321L740 350L724 388L700 413L676 420L650 407L600 377L560 348L547 329L535 318L500 309L470 302L458 280Z"/></clipPath><mask id="jack-rim"><path d="M458 250L465 215L480 185L500 160L525 135L560 113L600 103L645 99L690 102L730 114L765 138L792 175L812 215L822 255L820 290L802 306L772 313L748 321L740 350L724 388L700 413L676 420L650 407L600 377L560 348L547 329L535 318L500 309L470 302L458 280Z" fill="#fff" stroke="#fff" stroke-width="28" stroke-linejoin="round"/></mask></defs><path mask="url(#jack-rim)" d="M694 108c.6 .6 .6 .6 4 3.5c2.5 1 2.5 1 6.6 1.6c11.2 2 19 6.7 26.4 15.3c3.3 3.4 7.2 4.9 11.5 7c12.2 6.4 19.5 15.5 25.5 27.6c-.1 1.3-.4 2.7-.5 4c0 10.8 7.3 19.8 14.3 27.6c4.9 4.4 10.5 7.6 16.2 10.9c.5 .8 .5 .8 3 5c.7 .8 1.4 1.7 2.1 2.6c7.5 9.3 12.5 20.2 11.4 32.4c-1.3 1.2-2.6 2.3-4 3.5c-1.4 3.6-1.5 6.4-1.2 10.2c.6 12.6-3.4 22.9-10.3 33.3c-5.1 4.4-5.1 4.4-10.5 5c-4.5 2.8-7 6-10.5 10c-6.9 5.3-12.2 8-21 8c-1.8-.8-3.6-1.6-5.5-2.5c-5-1.6-7.1-2.1-12 0c-8.3 6.2-8.3 6.2-10 10.5c-.6 11.3 .1 16.9 5.4 26.7c6.9 13.8 11.5 30.9 9.1 46.3c-1 .6-2 1.3-3 2c-3.4 4.2-3 7.1-3 12.4c.1 7.5-.4 13.7-3.5 20.6c-.5 1.3-1.1 2.6-1.7 3.9c-4.8 10.7-11.7 16.6-21.8 22.1c-4 3-4 3-7.5 6.5c-.5 .4-.5 .4-3 2.5c-.5 .6-.5 .6-3 4c-1.3 1.1-2.6 2.3-4 3.5c-6.3 5.6-6.3 5.6-7 11c1.4 5.4 3 7 7 11c2 3 2 3 3 8c.5 1.2 1 2.4 1.5 3.6c3.1 8 3.5 13.7 .5 21.9c-6.6 9.9-15.4 13.7-26.7 16.8c-6.4 1.2-12.4 1.5-18.9 .9c-3.6-.2-7.2-.2-10.8-.1c-9.2 0-15.9-2.1-24.1-6.1c-4-.5-4-.5-10.5 0c-10.9-2.4-19.9-9.1-27.4-17.2c-4.1-4.4-5.6-5.2-11.6-5.8c-2.5 .1-4.9 .3-7.3 .5c-34.1 2.3-34.1 2.3-46.2-7c-3-3.5-3-3.5-6.5-8.5c-2.5-2-2.5-2-6.5-4c-2.3-5.5-3.3-10-3.9-15.9c-.6-3.6-.6-3.6-3.6-7.6c-5.9-3.5-5.9-3.5-12.5-3.5c-3 1.5-3 1.5-6.8 5.3c-5.1 5-9.8 8.1-16.2 11.2c-3.6 4.3-4 4.9-4 10.5c.4 1.1 .6 2.3 1 3.5c.1 .6 .1 .6 .4 3.9c.7 4.8 1.7 8 5.6 11.1c-.1 .6-.4 1.3-.5 2c-5.1 1.9-10.1 2.8-15.5 3.5c-1.3 .4-2.6 .6-3.9 1c-7.9 1.9-15.6 2.1-23.6 2.5c-2.1 .1-4.3 .4-6.5 .5c-13.9-1.1-26.6-3.5-36.5-14c-3-6-3-6-4-10.9c-1.1-5.2-2.9-7-6.5-10.6c-3.2-16.4 1.4-30.4 10.5-44c1-1.5 2-2.9 3-4.5c.5-1.5 .5-1.5 .5-7.5c-1.5-3-1.5-3-6-8c-1-2-1-2-1-4c1.8-.6 3.6-1.3 5.5-2c9.9-5.7 16.1-13.1 19.5-24c.4-1.1 .7-2.1 1.1-3.3c3.9-12.8 3.9-12.8 .9-18.7c-3-2.5-3-2.5-6.1-4.1c-6.5-3.6-11.1-8.9-13.9-15.9c0-1.8 0-3.6 0-5.5c-1.8-4.1-3.1-5.5-7-7.5c-7.4-12.1-10.1-24.1-7.1-37.9c2-7.4 5-13.2 9.1-19.6c3.1-4.9 3.2-6.3 2-12c0-11.8 7.7-21.9 15.4-30.2c11.9-11.1 26.8-16.8 43.1-16.3c1.1 .5 2.3 1 3.5 1.5c5.5 .5 5.5 .5 10 .5c2.5 .9 5 1.9 7.5 3c3.5 .5 3.5 .5 8-.5c4.1-3.4 5.6-6.8 8-11.5c2.7-3.8 5.6-7.3 8.5-11c1.9-3.7 1.4-5.9 .5-10c-3-3.5-3-3.5-7-5.5c.1-.5 .4-1 .5-1.5c3.1-1.3 6.4-2.7 9.5-4c12.1-6.8 21.1-16.6 30-26.9c4.1-4.3 8.5-7.5 13.5-10.7c4.5-3.1 5.8-5.7 7.5-10.9c10-11 22.4-17.4 36.6-21.1c5.4-1.4 5.4-1.4 8.4-3.4c13.1-6.5 28.2-8.5 42.5-5c2.7 1 5.4 2 8 3c4.5 .7 6.8 0 10.5-2.5c.8-.7 1.6-1.3 2.5-2c9.5-4.8 9.5-4.8 12.5-4c31.5 0 31.5 0 38.5 4z" fill="#8EA0A8" stroke="#8EA0A8" stroke-width="28" stroke-linejoin="round"/><g clip-path="url(#jack-head)"><g id="jack"><path fill="#212E34" d="M694 108c.6 .6 .6 .6 4 3.5c2.5 1 2.5 1 6.6 1.6c11.2 2 19 6.7 26.4 15.3c3.3 3.4 7.2 4.9 11.5 7c12.2 6.4 19.5 15.5 25.5 27.6c-.1 1.3-.4 2.7-.5 4c0 10.8 7.3 19.8 14.3 27.6c4.9 4.4 10.5 7.6 16.2 10.9c.5 .8 .5 .8 3 5c.7 .8 1.4 1.7 2.1 2.6c7.5 9.3 12.5 20.2 11.4 32.4c-1.3 1.2-2.6 2.3-4 3.5c-1.4 3.6-1.5 6.4-1.2 10.2c.6 12.6-3.4 22.9-10.3 33.3c-5.1 4.4-5.1 4.4-10.5 5c-4.5 2.8-7 6-10.5 10c-6.9 5.3-12.2 8-21 8c-1.8-.8-3.6-1.6-5.5-2.5c-5-1.6-7.1-2.1-12 0c-8.3 6.2-8.3 6.2-10 10.5c-.6 11.3 .1 16.9 5.4 26.7c6.9 13.8 11.5 30.9 9.1 46.3c-1 .6-2 1.3-3 2c-3.4 4.2-3 7.1-3 12.4c.1 7.5-.4 13.7-3.5 20.6c-.5 1.3-1.1 2.6-1.7 3.9c-4.8 10.7-11.7 16.6-21.8 22.1c-4 3-4 3-7.5 6.5c-.5 .4-.5 .4-3 2.5c-.5 .6-.5 .6-3 4c-1.3 1.1-2.6 2.3-4 3.5c-6.3 5.6-6.3 5.6-7 11c1.4 5.4 3 7 7 11c2 3 2 3 3 8c.5 1.2 1 2.4 1.5 3.6c3.1 8 3.5 13.7 .5 21.9c-6.6 9.9-15.4 13.7-26.7 16.8c-6.4 1.2-12.4 1.5-18.9 .9c-3.6-.2-7.2-.2-10.8-.1c-9.2 0-15.9-2.1-24.1-6.1c-4-.5-4-.5-10.5 0c-10.9-2.4-19.9-9.1-27.4-17.2c-4.1-4.4-5.6-5.2-11.6-5.8c-2.5 .1-4.9 .3-7.3 .5c-34.1 2.3-34.1 2.3-46.2-7c-3-3.5-3-3.5-6.5-8.5c-2.5-2-2.5-2-6.5-4c-2.3-5.5-3.3-10-3.9-15.9c-.6-3.6-.6-3.6-3.6-7.6c-5.9-3.5-5.9-3.5-12.5-3.5c-3 1.5-3 1.5-6.8 5.3c-5.1 5-9.8 8.1-16.2 11.2c-3.6 4.3-4 4.9-4 10.5c.4 1.1 .6 2.3 1 3.5c.1 .6 .1 .6 .4 3.9c.7 4.8 1.7 8 5.6 11.1c-.1 .6-.4 1.3-.5 2c-5.1 1.9-10.1 2.8-15.5 3.5c-1.3 .4-2.6 .6-3.9 1c-7.9 1.9-15.6 2.1-23.6 2.5c-2.1 .1-4.3 .4-6.5 .5c-13.9-1.1-26.6-3.5-36.5-14c-3-6-3-6-4-10.9c-1.1-5.2-2.9-7-6.5-10.6c-3.2-16.4 1.4-30.4 10.5-44c1-1.5 2-2.9 3-4.5c.5-1.5 .5-1.5 .5-7.5c-1.5-3-1.5-3-6-8c-1-2-1-2-1-4c1.8-.6 3.6-1.3 5.5-2c9.9-5.7 16.1-13.1 19.5-24c.4-1.1 .7-2.1 1.1-3.3c3.9-12.8 3.9-12.8 .9-18.7c-3-2.5-3-2.5-6.1-4.1c-6.5-3.6-11.1-8.9-13.9-15.9c0-1.8 0-3.6 0-5.5c-1.8-4.1-3.1-5.5-7-7.5c-7.4-12.1-10.1-24.1-7.1-37.9c2-7.4 5-13.2 9.1-19.6c3.1-4.9 3.2-6.3 2-12c0-11.8 7.7-21.9 15.4-30.2c11.9-11.1 26.8-16.8 43.1-16.3c1.1 .5 2.3 1 3.5 1.5c5.5 .5 5.5 .5 10 .5c2.5 .9 5 1.9 7.5 3c3.5 .5 3.5 .5 8-.5c4.1-3.4 5.6-6.8 8-11.5c2.7-3.8 5.6-7.3 8.5-11c1.9-3.7 1.4-5.9 .5-10c-3-3.5-3-3.5-7-5.5c.1-.5 .4-1 .5-1.5c3.1-1.3 6.4-2.7 9.5-4c12.1-6.8 21.1-16.6 30-26.9c4.1-4.3 8.5-7.5 13.5-10.7c4.5-3.1 5.8-5.7 7.5-10.9c10-11 22.4-17.4 36.6-21.1c5.4-1.4 5.4-1.4 8.4-3.4c13.1-6.5 28.2-8.5 42.5-5c2.7 1 5.4 2 8 3c4.5 .7 6.8 0 10.5-2.5c.8-.7 1.6-1.3 2.5-2c9.5-4.8 9.5-4.8 12.5-4c31.5 0 31.5 0 38.5 4z"/><path fill="#4A4E51" d="M651.5 106.5c.6 .2 1.3 .3 2 .5c-.6 .6-.6 .6-4 3.5c-1.4 2.3-2.7 4.7-4 7c-.4 .2-.4 .2-2 1c-.6-.3-1.3-.7-2-1c-.6 .5-1.3 1-2 1.5c.1 .2 .1 .2 .5 1c-2-.5-2-.5-7-4.5c-4.8-2.5-9.4-4.2-14.5-5.5c-1-.3-2-.7-3-1c4.7-1.2 10.2 1.8 14.5 3.5c1.1 .3 2.3 .7 3.5 1c.6 .3 1.3 .7 2 1c.6-.8 1.3-1.7 2-2.5c.6-.2 1.3-.3 2-.5c-.6 1.3-1.3 2.7-2 4c.1 .2 .4 .3 .5 .5c.8 0 1.6 0 2.5 0c1-1.3 2-2.7 3-4c.6-.3 1.3-.7 2-1c0 .8 0 1.7 0 2.5c1-1.5 2-3 3-4.5c1-.8 2-1.7 3-2.5zM606.5 127c0 .5 0 1 0 1.5c-1.4 .4-2.7 .7-4.2 1.2c-8.1 2.7-14.3 6.7-20.3 12.8c1.4-.3 2.7-.7 4.1-.9c4.9-1.1 4.9-1.1 11.4-1.6c1 1 1 1 1 2.5c1 0 2 0 3 0c0 .5 0 1 0 1.5c-1 .5-2 1.1-3 1.6c-12.6 7-19.1 17.5-23.5 30.9c-.5 .3-1 .7-1.5 1c-.5-.2-1-.3-1.5-.5c-.7 1.4-1.4 2.9-2 4.4c-2.5 5.1-2.5 5.1-5.5 10.1c-.5 .2-1 .3-1.5 .5c0-6.8 1.7-12.2 4-18.5c-.4 0-.6 0-1 0c-.1 .3-.1 .3-1 2c-.6 1.2-1.2 2.3-1.8 3.6c-3.2 6.3-5.8 12.7-7.9 19.5c-1.7 5-3.7 8.9-6.3 13.4c-3 7.1-4.5 13.8-4.5 21.5c.4-1.3 .8-2.7 1.2-4.1c4.8-14.4 4.8-14.4 7.8-16.4c.1 1.1 .2 2.2 .3 3.3c1.8 12.3 6.3 24 10.4 35.6c4.8 15 3.9 29.5-1.7 44.1c-1.3 2.4-2.6 4.7-4 7c-.5 0-1 0-1.5 0c0-2.1 0-4.1 .1-6.2c-.1-10.5-2.4-18.9-7.1-28.3c-.4-.1-.6-.4-1-.5c.1 .6 .4 1.3 .5 2c1.3 16-1.7 32.7-11 46c-2.9-2.9-4.4-6.8-6.3-10.4c-2.2-3.8-4.6-7.5-7.2-11.1c-11-16.4-13.9-35.1-10.5-54.5c2.2-7.7 4.8-14.9 8.5-22c-14.6 14.6-18.4 34.4-19.1 54.2c.3 8.1 2.5 15.6 4.6 23.3c0 .5 0 1 0 1.5c-7.4-2.9-12.6-11.8-16.4-18.4c-6.3-14.7-5.4-28.9 .4-43.6c1-1.7 2-3.3 3-5c.4-.7 .6-1.3 1-2c-8 5.9-15 11.4-19.5 20.5c-.4 0-.6 0-1 0c0-13.1 7.6-26.4 16-36c.7-.9 1.4-1.8 2.2-2.7c4.6-5.6 9.7-10.7 14.8-15.8c1.9-2.2 3.7-4.4 5.4-6.7c2.6-3.3 2.6-3.3 7.1-7.8c-3.4 0-7 2.9-10 4.5c-.3 .1-.3 .1-1.5 .5c.5-2 .5-2 4.5-6c.7-1 1.4-2 2-3.1c11.5-15.4 27.5-26.1 46.5-29.4c2.5-.3 5-.7 7.5-1c-2.7-2.8-7.7-2.6-11.5-3c1.3-3.9 7.6-6.3 11.1-8.3c8.1-3.5 16.7-6.2 25.4-7.7c3.4-1.7 7.6 0 11 1zM743.5 149c4 1 6.9 4 10 6.5c.6-.3 1.3-.7 2-1c.1 .7 .4 1.3 .5 2c.1 .3 .4 .7 .5 1c.5 0 1 0 1.5 0c5 5.7 8.4 11.4 11 18.5c6.6 12.3 13.5 20.3 25.5 27.5c-.1 .1-.1 .1-1 .5c-1.3-.7-2.6-1.3-4-2c1 3.5 1 3.5 5 8.5c7 8.8 7 8.8 8 14.5c-3.7 .9-6.9-2.2-10-4c-.6-.4-.6-.4-4-2.5c-.5-.2-1-.3-1.5-.5c1.5 3 1.5 3 5.5 7c3.9 5.3 5 10.1 6 16.6c.3 1.6 .6 3.4 .9 5.2c1.6 13.3 1.6 13.3 .1 16.2c-.4 0-.6 0-1 0c-.3-1.1-.5-2.2-.9-3.3c-3.8-14-11.6-25.8-21.1-36.7c-7.5-8.8-7.5-8.8-7.5-13.5c-2.2-3.4-4.6-6.7-7-10c-1.8-4.4-3.1-8.9-4.5-13.5c-.5-1.2-1-2.3-1.5-3.5c0-.5 0-1 0-1.5c1.5 .5 1.5 .5 5 5.5c3.5 4 3.5 4 5 4.5c-.6-1.2-1.2-2.3-1.8-3.6c-3-6-5.2-12-7.2-18.4c-3.5-5-3.5-5-6-7.5c-1.5-2-1.5-2-4-7c-1.1-1.5-2.3-2.9-3.5-4.5c0-.3 0-.7 0-1zM720.5 140.5c1 0 2 0 3 0c0 .5 0 1 0 1.5c-.4 0-.6 0-1 0c0 .3 0 .7 0 1c1 .3 2 .7 3 1c10.4 9.3 15.4 19 16.5 33c-.6 .2-1.3 .3-2 .5c-1-.8-2-1.7-3-2.5c-8-4.7-14.1-7.7-23.5-6.5c0-3.9 6.3-8.3 9-11c0-.3 0-.7 0-1c-2-1-2-1-7-1c-6.4 2.6-10 6.3-14.5 11.5c.5 2 .5 2 3 4.5c.2 .1 .2 .1 1.5 .5c.1 .5 .4 1 .5 1.5c-1.5 2.8-3 5.7-4.5 8.5c-.4 .8-.6 1.7-1 2.5c-2 .5-4 1-6 1.5c-.1 .2-.1 .2-1 1c-.4 0-.6 0-1 0c1-2.5 1-2.5 2-3.5c.8-.2 .8-.2 5-1c.6-1.7 1.3-3.3 2-5c.6-1 1.3-2 2-3c0-.5 0-1 0-1.5c-1-.8-2-1.7-3-2.5c-.5-.7-1-1.3-1.5-2c1.6-6.6 9.1-11.3 14.5-14.5c3.3-.8 5.9-.8 9 .5c.4 .5 .4 .5 2.5 3c-2.6 2.7-5.3 5.3-8 8c2 .2 4 .3 6 .5c12.9 5.3 12.9 5.3 16.5 9c-.9-9.9-3.9-18.4-10.5-26c-5.5-4-5.5-4-9.5-6c0-1.5 0-1.5 1-2.5zM634 169.5c.8 .1 .8 .1 5 .5c6 2.5 6 2.5 9.5 6c.5 3.5 .5 3.5-2 7c-.4 0-.6 0-1 0c2.5 2.5 2.5 2.5 5.9 5.1c3.1 2.4 3.1 2.4 4.1 4.4c-2.5 2.1-4.3 3.3-7.5 4c.5 1.8 1 3.7 1.5 5.5c.8-.8 1.6-1.6 2.4-2.3c3.7-3.2 7.6-4.8 12.1-6.7c1 .5 2 1 3 1.5c.1 .5 .4 1 .5 1.5c-1.5 2-1.5 2-5 4c-4 3.2-6.9 6.1-10 10c-.4-.2-.6-.3-1-.5c2.9-5.8 8.1-9.7 13.5-13c0-.2 0-.3 0-.5c-6 .8-10 3.1-14.5 7c-.5 .7-1 1.3-1.5 2c-.2-.1-.2-.1-1.5-.5c-.1-1-.1-1-1-6c-.1-.4-.1-.4-1-2.5c.1-.8 .4-1.7 .5-2.5c1.3 .2 2.6 .3 4 .5c1-.5 2-1 3-1.5c-1.2-3.8-7.1-6.5-10.5-8.5c0-.3 0-.7 0-1c1.1-.7 2.3-1.3 3.5-2c1-2 1-2 .5-4.5c-4.1-4.1-8-4.3-13.5-5c-1.6-.5-3.3-1-5-1.5c-6.5 0-10.4 .3-16 3.5c-.1 .3-.4 .7-.5 1c1.3 0 2.6 0 4 0c6 1.6 10.8 4.3 16 7.5c-.1 .2-.1 .2-.5 1.5c-1.6 .2-3.3 .3-5 .5c-13 3.7-20.4 11.7-29 21.5c-3.5 3-3.5 3-5.5 4c10.9 .3 10.9 .3 15-2.5c.1-.2 .1-.2 .5-1.5c.5 0 1 0 1.5 0c-.1 .8-.4 1.7-.5 2.5c-5.5 3.6-8.5 4-15 4c-1.1-.3-2.3-.7-3.5-1c-.1-.7-.4-1.3-.5-2c1.5-1.5 1.5-1.5 5.5-3.5c3.7-3.7 7.1-7.6 10.5-11.5c6.5-6.2 13.2-10.1 22-12.5c-10.5-5.5-10.5-5.5-15-5.5c-.4-.1-.4-.1-2.5-.5c0-.7 0-1.3 0-2c7.7-6.2 15.2-6.8 24.5-4zM740.5 183c.4 .2 .6 .3 1 .5c.5 1.8 .9 3.7 1.3 5.5c1.4 5.5 3.1 10 5.7 15c.1 .5 .4 1 .5 1.5c-4.5-1-4.5-1-8.5-3c0-.3 0-.7 0-1c1.6 .3 3.3 .7 5 1c-6.5-3.3-10.8-4.5-18-4.5c-.1-.3-.4-.7-.5-1c.6-1 1.3-2 2-3c.4 .3 .6 .7 1 1c-.1 .3-.4 .7-.5 1c.6-.1 .6-.1 3.5-.5c3.6 .8 7 1.7 10.5 3c-.4-1.3-.8-2.4-1.2-3.7c-2.3-7.6-2.3-7.6-2.3-11.3c.1-.2 .4-.3 .5-.5zM578 181c.5 0 1 0 1.5 0c-1 3-1 3-2.7 6.9c-6.1 13.9-5.7 28.5-.7 42.7c.5 1.2 .9 2.2 1.4 3.4c1 0 1 0 5.5-4c10-7.4 20.1-11.8 32.5-12.5c.8-.2 1.6-.3 2.5-.5c1.1 .3 2.3 .7 3.5 1c1 0 2 0 3 0c.1 .3 .4 .7 .5 1c-.1 .3-.4 .7-.5 1c-1.3 0-2.6 0-4 0c0 .3 0 .7 0 1c1.4 0 2.7-.1 4.1-.1c4.4 .1 4.4 .1 6.9 1.1c-1.8 2.7-5.2 3.6-8 5c-9.7 6.1-17.5 13.3-24.5 22.5c.5-.3 1-.7 1.5-1c.6-.2 1.3-.3 2-.5c.4 .3 .6 .7 1 1c-.9 3.4-3.1 6.1-5 9c-5.1 10.3-6.7 19.6-6.5 31c-.5 0-1 0-1.5 0c0-.5 0-1 0-1.5c-.4 0-.6 0-1 0c0 1.8 0 3.6 0 5.5c-.4 1-.6 2-1 3c-1.1 4.7 1.1 10.2 3 14.5c-2-.5-2-.5-7-4.5c-1.1-.8-2.3-1.6-3.5-2.4c-3-2.1-3-2.1-5-4.1c.8-2.7 1.6-5.4 2.5-8c2.6-15.9 2.3-29.4-3.7-44.6c-7.5-19.6-7.5-19.6-5.8-29.9c.1 0 .4 0 .5 0c.4 1.7 .6 3.3 1 5c.4 0 .6 0 1 0c-.4-1.3-.6-2.7-1-4c-1.1-13.7 .6-23.9 7-36c.1-.3 .4-.7 .5-1zM621.5 219c0 .2 0 .3 0 .5c.8 0 1.6 0 2.5 0c0-.2 0-.3 0-.5c-.8 0-1.6 0-2.5 0zM591 268c-1.5 5.5-1.5 5.5-1 8c.1 0 .4 0 .5 0c1-5 1-5 1-8c-.1 0-.4 0-.5 0zM452.5 289.5c2.6 .2 5.4 .4 8 .5c.1-.1 .4-.4 .5-.5c.9 0 1.6 0 2.5 0c.1 .3 .1 .3 1 1.5c.4 .1 .4 .1 2 1c1.3 1.5 2.6 2.9 4 4.5c4 2.5 4 2.5 9.5 2.5c3.5 4 3.5 4 7.5 9.5c-1 2-1 2-1.5 2.5c-2.1 0-4.3 0-6.5 0c0-.5 0-1 0-1.5c.5 0 1 0 1.5 0c0-.4 0-.6 0-1c-.9-.1-1.6-.4-2.5-.5c-2.5-1-5-2-7.5-3c-8.3-2.1-16.2-.1-23.5 4c-4.4 3.6-7.6 8.4-9 14c0 6 0 6 1 10c-2.6 2.1-5.3 4.1-7.9 6.1c-6.5 5.3-11.5 11-16.1 17.9c-2.5-.5-2.5-.5-6.5-3c-.6-.1-1.3-.4-2-.5c0-.5 0-1 0-1.5c-.5 0-1 0-1.5 0c-5.6-1.4-9.9-6.9-13-11.5c.1-.5 .4-1 .5-1.5c2.2 2.4 4.4 4.9 6.5 7.5c1.5 1 2.9 2 4.5 3c-.2-.7-.2-.7-1.5-4.5c-.7-4.1-.6-8.3-.5-12.5c.9 .1 1.6 .4 2.5 .5c0-.5 0-1 0-1.5c-.9 0-1.6 0-2.5 0c0-8.6 0-8.6 2.5-12c2 .5 2 .5 3 1.5c.6 2.1 1.3 4.3 2 6.5c3 6 3 6 5.5 9c-.1-1.9-.1-3.7-.1-5.7c.2-14.2 4.5-22.7 14.6-32.8c16.6-10.6 16.6-10.6 23-8.5zM448 290c0 .1 0 .4 0 .5c1 0 2 0 3 0c0-.1 0-.4 0-.5c-1 0-2 0-3 0zM461 290c2 .5 2 .5 2 .5zM405 322c-.4 .4-.6 .6-1 1c.4 0 .6 0 1 0c.1 1.1 .4 2.3 .5 3.5c.4 .1 .6 .4 1 .5c-.5-4-.5-4-1.5-5zM403.5 323.5c.5 2 .5 2 .5 2zM403 326.5c.5 1 .5 1 .5 1zM551.5 328.5c1 1.5 2 2.9 3 4.5c14.9 20 14.9 20 24.5 25.5c1.9 1.5 3.7 3 5.5 4.5c1 .8 2 1.6 3.1 2.4c.4 .4 .4 .4 2.4 2.1c0 .5 0 1 0 1.5c-3.4-2.2-6.6-4.6-9.5-7.5c-.2 6.6 .5 12.5 2 19c.4 1.5 .6 2.9 1 4.5c-1.5 1.5-1.5 1.5-7 3c-.8 .8-1.6 1.6-2.5 2.5c-.8 .8-1.6 1.6-2.5 2.4c-2.5 2.6-2.5 2.6-5 5.6c-.6-.1-1.3-.4-2-.5c-.5-2-.5-2 1-7.5c-2.5 .5-2.5 .5-5.5 4c-.4 0-.6 0-1 0c-.4 .6-.6 1.3-1 2c-1.1 1.3-2.3 2.6-3.5 4c-8.5 12.7-11.5 27.9-11.5 43c-.4 .1-.6 .4-1 .5c-5-4-5.8-10.6-7-16.5c-.1-2.1-.4-4.3-.5-6.5c-.1 0-.4 0-.5 0c-2.1 9.9-2.8 19.9-3.5 30c.4 0 .6 0 1 0c.5 1 .5 1 .5 5c-.5 0-1 0-1.5 0c0-1.1 0-2.3 0-3.5c-1.8-.1-3.6-.4-5.5-.5c0-.4 0-.6 0-1c-1.6 0-3.3 0-5 0c-8.6-2.6-8.6-2.6-12.5-6.5c-1.5-1.2-3-2.4-4.5-3.5c-.4 .4-.4 .4-2.5 2c-6.1-3.3-10.1-6.6-15-11.5c-.6-.5-1.3-1-2-1.5c-.1-.8-.4-1.6-.5-2.5c-1.1-1.3-2.3-2.6-3.5-4c-1.4-2.6-2.7-5.3-4-8c-.4-.4-.6-.6-1-1c-1-1.5-1-1.5-1-5c-.4 0-.6 0-1 0c-.4-.6-.6-1.3-1-2c-1 5-1 5-1.5 11c-.1 .1-.4 .4-.5 .5c.9 6 1.7 11.7 3.5 17.5c0 .6 0 1.3 0 2c-.4 .1-.4 .1-2 1c-3.6-3-6.9-5.9-10-9.5c-.5-.5-1-1-1.5-1.5c0-.4 0-.6 0-1c-.4-.1-.4-.1-2-1c-9.1-13.1-10.6-25.7-9-41.5c-.6 .8-.6 .8-4 4.5c-.6-.1-1.3-.4-2-.5c-1.8-3.6 1.1-10.7 2.1-14.4c3.6-9.5 8.7-16.9 15.9-24.1c-16.7 3.4-31.6 13.6-42 27c-.4-.1-.6-.4-1-.5c1-2.5 1-2.5 2.5-4.5c.1-.8 .4-1.6 .5-2.5c10.4-16.9 22.1-29.1 41-36c15.8-3.5 29.7-1.9 45 3c.7 .1 .7 .1 4.5 1c-.1 .5-.4 1-.5 1.5c-2.5 .9-5 1.7-7.5 2.5c-3.5 1.5-3.5 1.5-4 2.5c1.5 .1 2.9 .4 4.5 .5c1 .2 1 .2 6 1.5c3.1 .5 6.4 1 9.5 1.5c-.6 1.6-1.4 3.4-2 5c8.8-6.4 14.8-11.9 20-21.5c1-.5 1-.5 4.3-.9c3.6-.6 6.7-3 10.2-2.1zM462 348c-.4 .4-.6 .6-1 1c.4 .1 .4 .1 2 1c0-.6 0-1.3 0-2c-.4 0-.6 0-1 0zM562.5 387.5c.5 1 .5 1 .5 1zM471 404c-.1 .6-.4 1.3-.5 2c1.5 0 1.5 0 2.5-.5c-.1-.5-.4-1-.5-1.5c-.5 0-1 0-1.5 0zM472.5 406c.5 1.5 .5 1.5 .5 1.5zM470 407.5c.5 2 .5 2 .5 2zM469.5 410c.5 2 .5 2 .5 2zM474 411.5c.5 1 .5 1 .5 1zM469 423.5c0 1 0 2 0 3c.1 0 .4 0 .5 0c0-1 0-2 0-3c-.1 0-.4 0-.5 0zM469.5 427c.5 1.5 .5 1.5 .5 1.5zM470 430c.5 1.5 .5 1.5 .5 1.5zM470.5 432c.5 1 .5 1 .5 1zM498.5 432.5c.5 3.5 .5 3.5 1.5 5c0-.5 0-1 0-1.5c.5 .1 1 .4 1.5 .5c-.5-1.5-1-2.9-1.5-4.5c-.5 0-.5 0-1.5 .5zM471 433.5c.5 1.5 .5 1.5 .5 1.5zM471.5 435.5c.5 1 .5 1 .5 1zM500.5 436.5c.5 1 .5 1 .5 1zM520.5 450c2 .5 2 .5 2 .5zM528 451.5c0 .1 0 .4 0 .5c.8 0 1.6 0 2.5 0c0-.1 0-.4 0-.5c-.8 0-1.6 0-2.5 0zM531 452.5c0 1 0 2 0 3c.1 0 .4 0 .5 0c0-1 0-2 0-3c-.1 0-.4 0-.5 0z"/><path fill="#9B9D9E" d="M720.5 140.5c.1 .3 .1 .3 .5 2c1.3 .7 2.6 1.3 4 2c9.5 7.6 13.6 15.7 16 27.5c0 1.5 0 2.9 0 4.5c-1.5 0-1.5 0-4-2c-7.4-4.3-13.2-7.4-22-7c0-1.5 0-1.5 2.9-4.4c1-1 2.1-2 3.1-3.1c.8-1 1.6-2 2.5-3c-1.5-1.5-1.5-1.5-3.5-2c-6.6 0-9.4 1.8-14.5 6c-2.9 3.1-2.9 3.1-5 6c.5 2 .5 2 3 4.5c.5 .5 1 1 1.5 1.5c-.5 2-.5 2-3.5 7.5c-.5 1.2-1 2.3-1.5 3.5c-.9 .2-.9 .2-5.5 1c-.1 .2-.1 .2-1 1c-3-3.1-2.1-7.8-2.1-11.9c0-1.4 0-2.9 0-4.3c.1-5.1 .5-9.9 3.1-14.3c.5-.2 1-.3 1.5-.5c.4 .2 .6 .3 1 .5c.1-.8 .4-1.7 .5-2.5c6-7.7 10.4-10.9 20-12.5c1-.5 1-.5 3 0zM642.5 160c1.3 1 2.6 2 4 3c.1-.7 .4-1.3 .5-2c2 0 2 0 5.1 2.8c7.5 8.1 12.9 19 12.9 30.2c-2 .8-4 1.7-6 2.5c-4.5 2.5-4.5 2.5-9.5 7c-.5-.2-1-.3-1.5-.5c-.5-2.2-1-4.3-1.5-6.5c-.1-.5-.4-1-.5-1.5c1.5-.5 1.5-.5 4.5-.5c1.1-.7 2.3-1.3 3.5-2c-1.2-3.7-7-6.3-10-8.5c.1-.5 .4-1 .5-1.5c.6-.2 1.3-.3 2-.5c1-2.5 1-2.5 .5-6c-4.2-4.2-8.7-4.6-14.5-5.5c-1.1-.3-2.3-.7-3.5-1c-7.4-.3-12.1 .6-18.5 4.5c-.1 .2-.1 .2-.5 1c.6-.1 .6-.1 3.5-.5c5.6 1.4 10.5 3.7 15.5 6.5c0 .7 0 1.3 0 2c-1.8 .3-3.6 .7-5.5 1c-10.5 3.8-17.5 9.9-24.5 18.5c-2.6 3.1-4.6 5.2-8.5 6.5c-.1 .2-.1 .2-.5 1.5c6.9 .1 11.9-.1 18-3.5c1.4 2.1 2.8 4.3 4 6.5c1.3 1 2.6 2 4 3c.1 .3 .1 .3 1 1.5c-1.5 1-1.5 1-4.9 1.2c-11.6 .9-21.9 6.4-30.7 13.9c-2.9 2.4-2.9 2.4-4.9 2.4c-6.7-17.5-7.6-33.2 0-50.5c2.2-4.4 4.1-7.2 7.5-11c-.4-.2-.6-.3-1-.5c3.9-7.7 16.8-12.7 24.5-16c12.7-3.5 23.3-3.8 35 2.5zM739.5 180.5c.6 .3 1.3 .7 2 1c0 1.5 0 2.9 0 4.5c2.5 10.3 2.5 10.3 4 14c-1.5 .5-1.5 .5-6-1.5c-2.6-.7-5.3-1.3-8-2c.4-1.3 .6-2.7 1-4c0-5 0-5-.5-10c.5-.3 1-.7 1.5-1c.1 .2 .4 .3 .5 .5c3.5 0 3.5 0 5.5-1.5z"/><path fill="#C4CBCE" d="M722 379.5c2.5 .5 2.5 .5 4.5 2.5c1.3 5 1.3 5 .5 8c-2 1-2 1-4 1.5c-1.5-1.5-1.5-1.5-2.5-3.5c-.6-.1-1.3-.4-2-.5c-.4-.6-.6-1.3-1-2c3-4.5 3-4.5 4.5-6z"/><path fill="#FAF9F8" d="M654.5 104c.9 .1 .9 .1 5.5 .5c-2.3 1.5-4.6 3-7 4.5c-3 3.5-3 3.5-3.5 5.5c1.1-.7 2.3-1.3 3.5-2c7.5-3.7 13.6-4.8 22-5c.1 .1 .1 .1 1 .5c0 .3 0 .7 0 1c-1.5 .8-3 1.7-4.5 2.5c-2.3 2.3-4.5 4.5-6 7.5c2-.5 2-.5 4-2c.8-.2 1.6-.3 2.5-.5c.9-.3 .9-.3 5.5-1.5c9.4 0 17.9 2.5 26.5 6c0 .5 0 1 0 1.5c-5 2-5 2-6 2c.1 .7 .4 1.3 .5 2c.4-.2 .6-.3 1-.5c8.9-.5 14.6 2 21.5 7.5c6 6.5 6 6.5 6 8.5c-1.3-.1-2.6-.2-4-.3c-7.5-.3-13.2 1.6-19.5 5.8c-3.5 4-3.5 4-6 9c-.8 0-1.6 0-2.5 0c-1.6 6.1-2.1 11.2-2.1 17.5c0 1.5 0 3 0 4.6c.1 3.9 .1 3.9 1.1 7.4c-1.5 1.5-1.5 1.5-5 2c-.4 .7-.6 1.3-1 2c1.8-.2 3.6-.3 5.5-.5c11 .8 18.8 4.6 27 12c5.3 .7 5.3 .7 10.5 1c15.8 3.9 26.5 12.1 35.1 25.8c2 3.9 3.3 7.5 4.4 11.7c-.1 .5-.4 1-.5 1.5c-1.5-.5-1.5-.5-5-5c-4.5-4.5-4.5-4.5-6-5c1 3 1 3 2.9 6.1c5.7 10.6 6.6 21.6 4.6 33.4c-3.4 8.7-7.5 15-14 21.5c-.5-.1-1-.4-1.5-.5c.1-1.1 .4-2.3 .5-3.5c.1-5.9 .2-10.7-1.5-16.5c-.4-.1-.6-.4-1-.5c-.2 1.3-.4 2.6-.5 4c-2.1 11.1-7 19.5-15 27.5c-.5 .1-1 .4-1.5 .5c0 .4 0 .6 0 1c-12.6 9.5-12.6 9.5-18.5 9.5c1-2.5 1-2.5 3.5-6c2.5-5.5 2.5-5.5 2.5-8c-.4-.1-.6-.4-1-.5c-.4 .6-.6 1.3-1 2c-8.9 10.1-18.4 16.1-31.5 19c-11.5 .7-20.9-3.4-29.5-11c0-.4 0-.6 0-1c-.4 0-.6 0-1 0c.8 6.3 3.4 9.9 7.5 14.5c0 .4 0 .6 0 1c-14.5 0-27.2-5.3-37.5-15.5c-.6-.8-.6-.8-3.5-5c-.5-.5-1-1-1.5-1.5c-.5 0-1 0-1.5 0c1 6.3 2.6 11.2 5.5 17c0 .6 0 1.3 0 2c-10.8-2.1-20.7-7.8-27.4-16.7c-6-9.4-7.6-18.9-6-29.8c1.9-8.3 4.9-14.9 9.4-22c.6-1.2 1.3-2.3 2-3.5c-2 1-2 1-5 4.5c-.5 0-1 0-1.5 0c1.6-6.3 7.7-12.3 12.5-16.5c.8-.8 1.6-1.6 2.5-2.4c9.6-8.4 20.5-13.8 32.8-17.3c3.7-1.3 3.7-1.3 5.2-3.8c4.5-7 9-12.1 16-16.5c.4 0 .6 0 1 0c.1-.7 .4-1.3 .5-2c-.8-.2-1.6-.3-2.5-.5c-.1-1.4-.3-2.9-.5-4.4c-2-10.8-6.9-20.7-15-28.1c-.4-.2-.6-.3-1-.5c.5 1 1 2 1.5 3c-.1 .5-.4 1-.5 1.5c-.7-.6-.7-.6-4.5-3.5c-10-6-18.7-7.2-30.2-5.2c-15.8 4.4-29.1 13.5-39.3 26.2c-.8 .8-1.6 1.7-2.5 2.5c0-11.4 6-22.8 13-31.5c5.9-5.9 11.7-9.8 19.5-13c0-.2 0-.3 0-.5c-8 0-15.4 1.2-23 3.5c-.5 0-1 0-1.5 0c1.2-4.9 6.6-8.1 10.6-10.7c5.5-3.2 10.6-5 16.9-6.3c0-.5 0-1 0-1.5c-8-2.2-15.3-3.3-23.5-4c-.1-.3-.4-.7-.5-1c19.3-6.7 36.5-6.3 55.5 1c.5 .2 1 .3 1.5 .5c-1.5-2.5-1.5-2.5-3.5-4.5c0-.3 0-.7 0-1c1 0 2 0 3 0c.5-.3 1-.7 1.5-1c.5 0 1 0 1.5 0c.1 .2 .1 .2 1 1c1.6-2.2 3-4.6 4.5-7c1.5-1.3 3-2.7 4.5-4c.5-.7 1-1.3 1.5-2zM640.5 117.5c0 .7 0 1.3 0 2c.5 .3 .5 .3 3 2c.4-.7 .6-1.3 1-2c-1.5-1.5-1.5-1.5-4-2zM679.5 200c-4 4.6-4 4.6-4 9.5c3.6 4.3 6.6 5.1 12 6.5c.4 .3 .4 .3 2.5 2c1.5 .5 3 1 4.5 1.5c.9 5.3 .5 7.1-2 12c-8.1 8.2-15 9.1-26 9.5c-.1 .7-.4 1.3-.5 2c7.6 3.8 14.5 3 22.5 .5c4.7-2.1 7.3-3.7 11-7.5c3.5 .5 3.5 .5 7 1.5c4.3 1.1 7.5 .7 11.5-1c2.5-2.5 2.5-2.5 3.5-4.5c-2-.5-2-.5-5.8-.4c-5.2-.1-8.4-1-12.7-4.1c-1.5-4.5-1.5-4.5-2-10c1.6-1.5 3.3-2.9 5-4.5c2.5-5 2.5-5 3-9c-1.5-4.5-1.5-4.5-4.5-7c-8.7-3.2-17.1-1.4-25 3zM555.5 134.5c-2.5 2.5-2.5 2.5-6.5 5.5c-.8 .8-1.6 1.7-2.5 2.5c-3.3 1.1-6.6 2.1-10 3c-1.5 .7-3 1.3-4.5 2c-.4-.2-.6-.3-1-.5c4.2-7.8 9.8-9 18-11.6c4-.9 4-.9 6.5-.9zM728 178c2.5 1 2.5 1 5.5 3.5c0 1.3 0 2.7 0 4c.1 1.5 .4 2.9 .5 4.5c0 3.5 0 3.5-1.5 6.5c-.6 .1-.6 .1-3.5 .5c-.5-2-.5-2 1-7c0-4.1-.4-6.8-2-10.5c0-.5 0-1 0-1.5zM495.5 193c-2 4-5.7 6.6-9 9.5c-1.7 1.7-3.4 3.3-5 5c-.5-1-.5-1 0-4.5c-1-4.5-1-4.5-4-8.5c.9-.1 .9-.1 5.2-.2c4.3-.2 8.5-1.3 12.8-1.3zM618.5 196.5c-.1 2-.4 3.9-.5 6c1.2 6.3 2.9 9.4 7.5 14c.1 .1 .1 .1 1 .5c0 .5 0 1 0 1.5c-3.3 1.6-7.2 .3-10.5-.5c-4.1-2.9-6.2-5.5-8.5-10c.5-3.5 .5-3.5 5-8c5-3.5 5-3.5 6-3.5zM797 228.5c4.8 1.2 8.5 6.9 11.5 10.5c0 .3 0 .7 0 1c.6 .3 1.3 .7 2 1c.8 1.3 1.6 2.7 2.5 4c.4 .3 .6 .7 1 1c-1.1 1-2.3 2-3.5 3c-1 2.5-1 2.5-1.5 5.5c-1-1.5-1-1.5-1.9-4.7c-2.1-7.4-5.3-13-9.6-19.3c-.1-.7-.4-1.3-.5-2zM466 229c.5 1.5 .5 1.5-2 7.5c-3.6 14.2-3.6 27.9 3.1 41.1c2.9 4.9 2.9 4.9 7.4 9.9c.5 0 1 0 1.5 0c-.2-1.1-.4-2.1-.6-3.2c-.7-7.2-.2-13.9 2.1-20.8c.4 0 .6 0 1 0c.5 1 .5 1 .9 5.3c2 17.8 9.7 30.6 22.6 42.7c7.4 5.1 14.9 8.5 23.5 11c0 .5 0 1 0 1.5c-8.2 2.2-14.6 3.1-22.8 .8c-14.9-3.8-28.8-3.3-43.7 .2c-.5-2-.5-2 1.5-6.5c5.3-6.6 12.7-7.7 20.8-8.6c1.6-.1 3.1-.3 4.7-.4c-1.6-3.1-3.5-6.5-6-9c-1.8 0-3.6 0-5.5 0c-5-3.5-5-3.5-7.9-6.6c-2.6-2.9-2.6-2.9-5.6-3.9c-12.9-.4-23.7 2.9-33.5 11.5c-.5-.1-1-.4-1.5-.5c2-2.5 2-2.5 4-4.5c-1.5-.5-1.5-.5-3-.5c-1.5 3-1.5 3-1.5 6c0 1.5 0 1.5-3.5 6.5c-5.6 10.3-5.9 18.9-5 30.5c-5.1-2.6-7.3-7.6-9.5-12.5c-.5-1.8-1-3.6-1.5-5.5c-.5-.1-1-.4-1.5-.5c-2.1 10.5-2.2 19.9 1.5 30c0 .5 0 1 0 1.5c-9.8-4.9-14.8-13.2-18.5-23c-1.6-6-2.4-11.9-1.5-18c.4-.1 .4-.1 2.5-1c2.5-5 2.5-5 3-7.5c-.9 .5-1.6 1-2.5 1.5c-2.1-4.2-.2-10.6 1-15c5.6-14.8 16.3-25.1 30-32.5c10.8-4.5 10.8-4.5 13-4.5c-.1-.5-.4-1-.5-1.5c-11.3-2.5-21.3-.6-32 3c-.4 0-.6 0-1 0c1.3-5.2 8.4-9 12.5-12c13.6-7.4 26-10.4 41.5-9c.1-.3 .4-.7 .5-1c1.6 .2 3.3 .3 5 .5c4.5-1 4.5-1 7-3zM396.5 263c-2.5 2.5-2.5 2.5-6.5 5.5c-4.8 4.3-9.2 8.4-13 13.5c-.5-1-.5-1 0-4.5c-.1-1.5-.4-2.9-.5-4.5c2-2 2-2 5.5-4c.5-.3 .5-.3 3.1-1.9c8.5-5.1 8.5-5.1 11.4-4.1zM792 278.5c1.5 .5 1.5 .5 2 1.5c.1 5.6-.2 10.9-1 16.5c-1.8 .5-3.6 1-5.5 1.5c-.8 .4-1.6 .6-2.5 1c.9-2.2 2-4.4 3-6.5c2-4.8 3.1-8.9 4-14zM374.5 324c.4 .1 .6 .4 1 .5c.2 1.4 .4 2.9 .6 4.4c2 12.2 7.7 20.3 16.9 28.6c-.1 .3-.1 .3-.5 1.5c-9.6-2.8-9.6-2.8-13-5c-.4-2-.6-3.9-1-6c-2.5-3.5-2.5-3.5-6-5.5c.1-.4 .4-.6 .5-1c.1-4.1 .2-8.3 .3-12.4c.2-3.6 .2-3.6 1.2-5.1zM677.5 347c4.5 1.5 4.5 1.5 5.5 3.5c-1.6 6.6-3.8 13.1-6 19.5c-.6 2-1.2 3.9-1.9 6c-2.1 6.5-2.1 6.5-4.1 8.5c-4.5-.5-4.5-.5-6.5-2.5c1.5-5.3 3.1-10.4 5-15.6c.5-1.8 1.1-3.6 1.8-5.5c.6-1.5 1.1-3.2 1.7-4.9c.5-1.4 .9-2.6 1.4-4c1.1-3 1.1-3 3.1-5zM462.5 349c-1 2-1 2-3.3 4.2c-9.5 9.7-13.8 21.6-15.7 34.8c2-1 2-1 6-6.5c.4 0 .6 0 1 0c-.3 2.9-.6 5.7-1 8.5c-.3 13.1 .6 23.4 8 34.5c.9 .8 1.6 1.6 2.5 2.5c4.5 5 4.5 5 5.5 7c.6 .4 1.3 .6 2 1c1.1 1 2.3 2 3.5 3c.4 0 .6 0 1 0c-.8-3.6-1.6-7.4-2.5-11c-1-7.1-.1-14.1 1-21c.5-.4 1-.6 1.5-1c.5 1.6 1 3.1 1.5 4.8c3.4 9.6 7.3 16.4 15 23.2c1.6 1.5 3.3 2.9 5 4.5c2.3 1.4 4.6 2.7 7 4c.1-.5 .4-1 .5-1.5c-.4-.6-.6-1.3-1-2c0-.6 0-1.3 0-2c2 1 2 1 3.9 3.9c5.4 8 13.2 9.3 22.2 11.3c.8 .2 .8 .2 4.4 .8c1 3.5 1 3.5 2 9.5c1.4 7.6 1.4 7.6 2 10c-7.3 1.4-16-2-22.7-4.7c-1.1-.4-2.2-.9-3.3-1.3c-.4 .1-.4 .1-2 1c-14.9-3-28.1-16-39-26c-1.3 5.2 3.1 11.6 5.5 16c-1.9 9.5-11.4 17.4-19 22.5c-10.2 5.4-20.5 7.6-32 9c3.1 3.1 8.4 3.4 12.5 4.5c6.2 2.1 8.1 4.1 11 10c.5 4.5 .5 4.5-1 8c-1.3 .8-2.6 1.6-4 2.5c-.5-.1-1-.4-1.5-.5c-.4-2-.6-3.9-1-6c-.4-.8-.6-1.6-1-2.5c-1-.1-2-.4-3-.5c.4 1 .6 2 1 3c0 3.5 0 3.5-1.5 7c-3.9 2.6-9.1 2-13.5 2c-.6-.1-1.3-.4-2-.5c-.5-2-1-3.9-1.5-6c-.5-.8-1-1.6-1.5-2.5c0-.4 0-.6 0-1c-.5 0-1 0-1.5 0c-.1 2.1-.4 4.3-.5 6.5c-.4 .8-.6 1.6-1 2.5c-5.5 2.2-11.6-.4-17-2c-7.4-5.2-10.6-9.4-12.5-18c0-4.7 .1-9.3 .5-14c-.5 0-1 0-1.5 0c-.4 .6-.4 .6-2.5 4c-.4 0-.6 0-1 0c-.4 .8-.6 1.6-1 2.5c-.6 1.2-1.3 2.4-2 3.7c-1.9 4-2.6 6.9-3 11.3c-.1 0-.4 0-.5 0c-.4-1.5-.6-2.9-1-4.5c-3-3.5-3-3.5-4-4.5c.4 0 .6 0 1 0c.1-1.1 .4-2.3 .5-3.5c.4 0 .6 0 1 0c.4-1 .6-2 1-3c2.2-4.2 4.6-7.7 7.5-11.5c.5-2.6 1-5.4 1.5-8c5-12.6 12.4-23.1 21-33.5c2.8-3.4 5.4-6.9 8-10.5c-3.8-.9-7.8 1-11.5 2c-1.6 .1-3.3 .4-5 .5c0-.6 0-1.3 0-2c1.3-1.1 2.6-2.3 4-3.5c7.9-8.1 13.4-17.6 18-28c-.3-.1-.3-.1-1.5-.5c1.8-12.7 10.6-21.6 20.1-29.4c8.2-5.9 20.1-13.1 30.4-13.1zM476 422.5c-.4 .8-.6 1.6-1 2.5c-.4 .4-.6 .6-1 1c.5 2.5 .5 2.5 1.5 4c1 0 2 0 3 0c0-.5 0-1 0-1.5c.1-.1 .4-.4 .5-.5c.6 .4 1.3 .6 2 1c-1-2.5-1-2.5-4-6.5c-.4 0-.6 0-1 0zM660.5 353.5c2 1 2 1 5 5c-2.1 3.5-5.2 5.1-8.5 7.5c-.1 .5-.4 1-.5 1.5c1 .6 1.9 1.2 2.9 1.8c3.1 2.2 3.1 2.2 5.6 5.2c-2 4-2 4-3 5c-6-1.5-12.3-7-17-11c1-5.8 7-8.7 11.5-12c1.3-1 2.6-2 4-3zM686 353.5c5.9 1.1 11.4 6.9 15.5 11c-.7 5.1-3.6 6.4-7.5 9.5c-.5 .4-.5 .4-3.1 2.6c-2.4 1.9-2.4 1.9-3.9 2.4c-1.4-1.4-2.6-2.6-4-4c.9-3.4 3.9-5.2 6.5-7.5c.6-.6 1.3-1.3 2-2c-.6-.4-1.3-.6-2-1c-5.9-4.1-5.9-4.1-7-6.5c1.5-2.5 1.5-2.5 3.5-4.5zM579 360c2 .5 2 .5 6.5 4.5c2 1.5 4 3 6 4.5c.9 .6 1.6 1.3 2.5 1.9c4.6 3.5 9.4 6.7 14.2 9.9c1.8 1.3 3.7 2.5 5.6 3.8c4.1 2.6 8.1 5 12.2 7.4c.8 .6 1.6 1.3 2.5 2c2.5 1.5 5 3 7.5 4.5c6.6 4.2 13.1 8.4 19.5 13c.8 .6 .8 .6 4.9 3.3c3.7 2.6 7.1 5.3 10.6 8.2c3.2 2.6 3.2 2.6 6 4.5c6-2 11-6.6 15.5-11c.6-.4 1.3-.6 2-1c.4-.6 .6-1.3 1-2c.4-.4 .4-.4 2-2c.4 0 .6 0 1 0c.4-.6 .6-1.3 1-2c.8-1 1.6-2 2.5-3c.4 0 .6 0 1 0c.4-.8 .6-1.6 1-2.5c1.5-1.6 3-3.3 4.5-5c1.1-1.8 2.3-3.6 3.5-5.5c1-1.4 1.9-2.9 2.9-4.4c4.6-7.2 7.3-14.8 9.6-23.1c3.5 1.7 4.4 5.6 6 9c1.5 2.5 3 5 4.5 7.5c5.4 9.9 5.4 9.9 7 13c.5 .4 1 .6 1.5 1c-1.3 1.1-2.6 2.3-4 3.5c-.4 .9-.4 .9-2 5.5c-.1 0-.4 0-.5 0c-.1-1.5-.4-2.9-.5-4.5c-2-6.4-4.3-11.6-7.5-17.5c-.5-.1-1-.4-1.5-.5c.1 .4 .4 .6 .5 1c1.4 23.4-1.7 45.9-17 64.5c-1.1 1.1-2.3 2.3-3.5 3.5c-.1 0-.4 0-.5 0c.1-1.1 .4-2.3 .5-3.5c.9-6.9 1.7-13.6 1.5-20.5c-1.5 1.5-1.5 1.5-3.1 6c-5 13.5-14.3 24.7-25.9 33c-.6 .5-1.3 1-2 1.5c-.5 0-1 0-1.5 0c-1.1-1.6-2.3-3.3-3.5-5c-4-4.5-7.8-8.4-12.6-12c-4.4-3.4-6-6.4-8.6-11.2c-2.3-4.3-2.3-4.3-5.8-9.3c0-.4 0-.6 0-1c-.4 .1-.4 .1-2 1c-.6 0-1.3 0-2 0c-2.5-2.5-2.5-2.5-3-3.5c-.6-.4-1.3-.6-2-1c-1.1-1-2.3-2-3.5-3c2.5 6.3 5.1 12.3 8.3 18.2c.6 1.1 1.1 2.2 1.7 3.3c-.1 .5-.4 1-.5 1.5c-1.2-.4-2.5-.8-3.7-1.3c-3.8-1.2-3.8-1.2-4.8-1.2c1.3 3.8 7 6.2 10.3 8.4c12.8 9.3 21.8 20.7 28.2 35.1c0 .4 0 .6 0 1c-1.5-.1-3-.4-4.5-.5c0 .5 0 1 0 1.5c3.1 2.4 6.3 4.7 9.5 7c7.2 6.4 10.8 12.6 12.5 22c-1.6 5-2.9 6.9-7 10.5c-1.5-1.5-1.5-1.5-2.5-6.5c-2.5-5-2.5-5-5-7.5c-.4 0-.6 0-1 0c.5 2.5 1.2 5 2 7.5c0 5.5 0 5.5-2 9.5c-5 2.5-5 2.5-10 3.5c-1.3 .4-2.6 .6-4 1c-1.8-.1-3.6-.4-5.5-.5c-1-1.5-1-1.5-1.5-6c-2-5-2-5-3.5-6.5c-.4 .1-.6 .4-1 .5c0 2.1 0 4.3 0 6.5c-1.5 3.5-1.5 3.5-4 5c-9 1.8-17.6-1.5-25.5-6c-4.2-3-7.7-5.5-11-9.5c-.8-.4-1.6-.6-2.5-1c.3 1.2 .6 2.4 1 3.6c.5 2.1 1 4.3 1.5 6.4c-.4 .1-.6 .4-1 .5c-15.7-7.7-24.2-21-30-37c-1.6-5.3-2.6-10.1-3.5-15.5c-.6 .1-1.3 .4-2 .5c-1.9 6.4-2.6 12-2.5 18.6c0 1.4 0 2.8 0 4.2c0 1.1 0 2.1 0 3.2c-8-4-13-13.3-16.5-21c-.7-2.3-1.4-4.6-2-7c-.4-1.1-.6-2.3-1-3.5c-1-11-.6-22.1 3.5-32.5c-.6-.1-1.3-.4-2-.5c-.4 .8-.6 1.6-1 2.5c-.5 .7-.5 .7-3 4.5c-1.9 4.3-3.8 8.6-5.5 13c-.5 .1-1 .4-1.5 .5c0-4.6 .1-8.9 .5-13.5c0-1.2 0-2.4-.1-3.7c.4-19.4 5.6-36.9 19.6-50.8c2.5-2 2.5-2 6-3c-.5 4-.5 4-2 9c2-1 2-1 5.5-5c.8-.8 1.6-1.6 2.5-2.5c.8-1 1.6-2 2.5-3c4-1.5 4-1.5 6.5-2c-.7-3.1-1.4-6.1-2-9.1c-1-5.5-1.1-10.4-1-15.9zM722 380.5c-1.5 1.5-1.5 1.5-3.5 5c.1 .5 .4 1 .5 1.5c.4 .1 .4 .1 2 .5c.4 .5 .4 .5 2 3c1.1-.4 2.3-.6 3.5-1c-.1-.6-.4-1.3-.5-2c0-1 0-1 .5-2.5c-1.5-3.5-1.5-3.5-3-4.5c-.5 0-1 0-1.5 0zM709.5 400c-.5 .5-1 1-1.5 1.5c.1 .5 .4 1 .5 1.5c1-.4 2-.6 3-1c-.4-.6-.6-1.3-1-2c-.4 0-.6 0-1 0zM714.5 428.5c-.6 .6-1.3 1.3-2 2c-.4 0-.6 0-1 0c.1 .6 .4 1.3 .5 2c.4-.1 .6-.4 1-.5c.4 1.1 .6 2.3 1 3.5c2.5 .5 2.5 .5 4 0c.4-1 .6-2 1-3c-1.1-1.3-2.3-2.6-3.5-4c-.4 0-.6 0-1 0z"/><path fill="#03B5BD" d="M569 311.5c3.5 2 3.5 2 7 4.5c4.8 2.3 9.6 4.4 14.5 6.5c1.1 .5 2.3 1 3.5 1.5c28 9.3 28 9.3 42.6 9c4 0 7.5 .9 11.4 2c8.4 1.4 16.6 1.2 25 .5c1.8 0 3.6 0 5.5 0c9.7-.8 19.1-3.5 28-7.5c3.5-1.1 7-2.1 10.5-3c0 10.4-6.5 17.6-12.5 25.5c4.8-2.6 8.6-5.1 12.5-9c.6 0 1.3 0 2 0c0 13-4.1 24.7-10.5 36c-.7 1.4-1.5 2.7-2.2 4.1c-6.8 11.4-16.3 21.3-25.8 30.4c-.8 .1-1.6 .4-2.5 .5c-2.9-2.1-5.7-4.3-8.5-6.5c-5.3-3.8-10.6-7.4-16-11c-1.5-1-3-2-4.5-3c-5.8-3.8-11.6-7.4-17.5-11c-4.3-2.6-8.4-5.2-12.5-8c-1.3-.8-2.6-1.6-4-2.4c-6.4-4.1-12.5-8.5-18.5-13.1c-1-.8-2.1-1.6-3.2-2.4c-12.3-9.6-24-20.3-32.3-33.6c1-2.5 1-2.5 2.5-4c.4 0 .6 0 1 0c.4-.6 .6-1.3 1-2c2.5-3.5 2.5-3.5 3.5-4zM677.5 348c-4 6.8-6 15.1-8.5 22.5c-.8 2.1-1.5 4.2-2.2 6.4c-1.3 4.1-1.3 4.1-.3 6.1c1.5 .1 3 .4 4.5 .5c2.1-3.6 3.1-7.4 4.4-11.3c1.6-5.3 3.4-10.6 5.1-15.9c1-3.3 1-3.3 1.5-6.8c-1.5-.5-3-1-4.5-1.5zM647 365c-.4 .5-.6 1-1 1.5c1 4.7 6.5 6.6 10.2 9.3c1.4 .8 2.8 1.8 4.3 2.7c.4-.1 .4-.1 2-.5c.5-1.3 1-2.6 1.5-4c-2.8-2.3-5.6-4.4-8.5-6.5c0-.5 0-1 0-1.5c2.8-2.1 5.6-4.1 8.5-6c.1-.5 .4-1 .5-1.5c-1-1.3-2-2.6-3-4c-4 0-11.5 8.1-14.5 10.5zM686 354.5c-2 2-2 2-2.5 4c2.5 2.5 2.5 2.5 5.6 4.8c2.9 2.2 2.9 2.2 3.4 3.7c-.4 .1-.4 .1-2 1c-5 4-5 4-6.5 5.5c.5 2 .5 2 3 4.5c3.5-1.7 6.1-4.5 9-7c1.3-1 2.6-2 4-3c.1-1.1 .4-2.3 .5-3.5c-11.3-10-11.3-10-14.5-10z"/><g id="face-lights" fill="#FAF9F8"><circle cx="628.3" cy="198" r="3.4"/><circle cx="714.2" cy="182.6" r="3"/><ellipse cx="692.6" cy="201.6" rx="4.2" ry="1.6" transform="rotate(-12 692.6 201.6)"/></g><path fill="#03B5BD" d="M640 345H706L700 388L645 390Z"/><path d="M660.5 356.5L648 366L660.5 375.5M680.5 350.5L669 382.5M685.5 356.5L698.5 365.5L686 375" fill="none" stroke="#FAF9F8" stroke-width="4.6" stroke-linecap="round" stroke-linejoin="round"/></g><g id="face-lights" fill="#FAF9F8"><circle cx="628.3" cy="198" r="3.4"/><circle cx="714.2" cy="182.6" r="3"/><ellipse cx="692.6" cy="201.6" rx="4.2" ry="1.6" transform="rotate(-12 692.6 201.6)"/></g></g></svg><g stroke="#04A5AD"><path d="M19.4 1.9a2.6 2.6 0 0 1 0 3.6"/><path d="M21.3 0.6a4.4 4.4 0 0 1 0 6.2"/></g></g></svg>
|
package/assets/icons/bowl.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.18 37.09" width="24" height="34" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-1.292 -2.503) scale(1.058)" stroke-width="1.655"><path fill="#04A5AD" opacity=".85" d="M4.6 14.5h14.8l-1.1 4.5H5.7z"/><g stroke="#6F818A"><path d="M2.5 11.5h19l-2.3 8H4.8z"/><path d="M9 8.5c0-1 .8-1.5 1.5-1h3c.7-.5 1.5 0 1.5 1s-.8 1.5-1.5 1h-3c-.7.5-1.5 0-1.5-1z"/></g></g></svg>
|
package/assets/icons/decide.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.18 37.09" width="24" height="34" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-2.489 -1.663) scale(1.111)" stroke-width="1.575"><g stroke="#6F818A"><path d="M12 3v18"/><path d="M9 21h6"/><path d="M12 5H5.5L3.5 7l2 2H12"/></g><path stroke="#04A5AD" d="M12 11h6.5l2 2-2 2H12"/></g></svg>
|
package/assets/icons/ear.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.18 37.09" width="24" height="34" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-2.562 0.035) scale(1.058)" stroke-width="1.655"><g stroke="#6F818A"><path d="M4 10a8 8 0 0 0 10 10z"/><path d="M9 15l3.5-3.5"/><path d="M7.5 20.5h5"/></g><circle fill="#6F818A" cx="13" cy="11" r="1.2"/><g stroke="#04A5AD"><path d="M15.5 4.5a4 4 0 0 1 4 4"/><path d="M15.5 1.5a7 7 0 0 1 7 7"/></g></g></svg>
|
package/assets/icons/lanes.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.18 37.09" width="24" height="34" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-1.726 -1.084) scale(1.063)" stroke-width="1.647"><g stroke="#04A5AD"><path d="M5.8 12C11 12 12.5 5 18.2 5"/><path d="M5.8 12H18.2"/><path d="M5.8 12C11 12 12.5 19 18.2 19"/></g><circle fill="#6F818A" cx="4" cy="12" r="2"/><g stroke="#6F818A"><circle cx="20" cy="5" r="1.8"/><circle cx="20" cy="12" r="1.8"/><circle cx="20" cy="19" r="1.8"/></g></g></svg>
|
package/assets/icons/plan.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.18 37.09" width="24" height="34" fill="none" stroke-linecap="round" stroke-linejoin="round"><g transform="translate(-5.267 -1.663) scale(1.111)" stroke-width="1.575"><g stroke="#6F818A"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/><path d="M9 11h6"/></g><path stroke="#04A5AD" d="M9 16l2 2 4-4"/></g></svg>
|
|
@@ -35,11 +35,27 @@ var APPOINTMENT_VOCABULARY = {
|
|
|
35
35
|
[PLAN_LANGUAGE.de]: {
|
|
36
36
|
heading: "Termine",
|
|
37
37
|
columns: { when: "Wann", action: "Aktion", origin: "Herkunft", status: "Stand" },
|
|
38
|
+
statusAlso: ["Status"],
|
|
38
39
|
open: ["offen"]
|
|
39
40
|
},
|
|
40
41
|
[PLAN_LANGUAGE.en]: {
|
|
41
42
|
heading: "Appointments",
|
|
42
43
|
columns: { when: "When", action: "Action", origin: "Origin", status: "Status" },
|
|
44
|
+
statusAlso: [],
|
|
45
|
+
open: ["open"]
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var WAITING_VOCABULARY = {
|
|
49
|
+
[PLAN_LANGUAGE.de]: {
|
|
50
|
+
heading: "Wartet auf dich",
|
|
51
|
+
columns: { since: "Seit", item: "Punkt", origin: "Herkunft", status: "Stand" },
|
|
52
|
+
statusAlso: ["Status"],
|
|
53
|
+
open: ["offen"]
|
|
54
|
+
},
|
|
55
|
+
[PLAN_LANGUAGE.en]: {
|
|
56
|
+
heading: "Waiting for you",
|
|
57
|
+
columns: { since: "Since", item: "Item", origin: "Origin", status: "Status" },
|
|
58
|
+
statusAlso: [],
|
|
43
59
|
open: ["open"]
|
|
44
60
|
}
|
|
45
61
|
};
|
|
@@ -143,6 +159,7 @@ export {
|
|
|
143
159
|
PLAN_APPROVAL_LABELS,
|
|
144
160
|
APPROVAL_TEXTS,
|
|
145
161
|
APPOINTMENT_VOCABULARY,
|
|
162
|
+
WAITING_VOCABULARY,
|
|
146
163
|
isPlanLanguage,
|
|
147
164
|
PLAN_STATUS,
|
|
148
165
|
PLAN_VOCABULARY,
|
package/dist/config.d.ts
CHANGED
|
@@ -90,6 +90,9 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
90
90
|
herdr: "herdr";
|
|
91
91
|
}>>;
|
|
92
92
|
}, z.core.$strict>>;
|
|
93
|
+
preview: z.ZodPrefault<z.ZodObject<{
|
|
94
|
+
publish: z.ZodDefault<z.ZodBoolean>;
|
|
95
|
+
}, z.core.$strict>>;
|
|
93
96
|
plans: z.ZodPrefault<z.ZodObject<{
|
|
94
97
|
fetchIntervalMinutes: z.ZodDefault<z.ZodNumber>;
|
|
95
98
|
linkKinds: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
@@ -120,6 +123,9 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
120
123
|
checks: z.ZodPrefault<z.ZodObject<{
|
|
121
124
|
failedTestPattern: z.ZodDefault<z.ZodString>;
|
|
122
125
|
}, z.core.$strict>>;
|
|
126
|
+
parallelTasks: z.ZodPrefault<z.ZodObject<{
|
|
127
|
+
maxTokens: z.ZodDefault<z.ZodNumber>;
|
|
128
|
+
}, z.core.$strict>>;
|
|
123
129
|
previews: z.ZodOptional<z.ZodObject<{
|
|
124
130
|
deployments: z.ZodDefault<z.ZodBoolean>;
|
|
125
131
|
authors: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PLAN_LANGUAGE,
|
|
3
3
|
RESPONSE_ADDRESS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MCP4XJQH.js";
|
|
5
5
|
|
|
6
6
|
// src/config/json-schema.ts
|
|
7
7
|
import { z as z3 } from "zod";
|
|
@@ -313,6 +313,15 @@ var feedbackSchema = z2.strictObject({
|
|
|
313
313
|
*/
|
|
314
314
|
noFindingTemplates: z2.array(z2.string().min(1)).default([CLEAN_REVIEW_TEXT])
|
|
315
315
|
});
|
|
316
|
+
var DEFAULT_PARALLEL_TASKS_MAX_TOKENS = 1e5;
|
|
317
|
+
var parallelTasksSchema = z2.strictObject({
|
|
318
|
+
/**
|
|
319
|
+
* The most the extra agents of a parallel proposal may cost before they do anything: the token baseline of a fresh
|
|
320
|
+
* agent times the agents to add. Above it the watcher does not propose parallel tasks. The baseline is the context
|
|
321
|
+
* the first answer of a lane's session carried.
|
|
322
|
+
*/
|
|
323
|
+
maxTokens: z2.number().int().positive().default(DEFAULT_PARALLEL_TASKS_MAX_TOKENS)
|
|
324
|
+
});
|
|
316
325
|
var checksSchema = z2.strictObject({
|
|
317
326
|
/**
|
|
318
327
|
* Finds a failed test in a line of a red run's log (`gh run view --log-failed`) after its job, step and timestamp
|
|
@@ -397,9 +406,9 @@ var sourceSchema = z2.strictObject({
|
|
|
397
406
|
var hasUniqueNames = (sources) => new Set(sources.map(({ name }) => name)).size === sources.length;
|
|
398
407
|
var coordinatorSchema = z2.strictObject({
|
|
399
408
|
/** Tokens in the coordinator's context from which the watcher reports `coordinator warn`. */
|
|
400
|
-
warnTokens: tokenCount.default(
|
|
409
|
+
warnTokens: tokenCount.default(35e4),
|
|
401
410
|
/** Tokens in the coordinator's context from which the watcher reports `coordinator alert`. */
|
|
402
|
-
alertTokens: tokenCount.default(
|
|
411
|
+
alertTokens: tokenCount.default(5e5)
|
|
403
412
|
}).refine(warnBelowAlert, WARN_BELOW_ALERT);
|
|
404
413
|
var guardedCommand = z2.string().regex(/^[a-z][a-z0-9-]*( [a-z][a-z0-9-]*){1,3}$/, "a program and one to three plain words, such as gh pr merge");
|
|
405
414
|
var checkFreePattern = z2.string().regex(/^[A-Za-z0-9_.*/-]+$/, "path words with * and ** only, such as docs/**/*.md").refine(
|
|
@@ -517,6 +526,11 @@ var jackherdConfigSchema = z2.strictObject({
|
|
|
517
526
|
}).prefault({}),
|
|
518
527
|
models: z2.record(z2.enum(Object.values(MODEL_ROLE)), modelId),
|
|
519
528
|
terminal: z2.strictObject({ adapter: z2.enum(Object.values(TERMINAL_ADAPTER)).default(TERMINAL_ADAPTER.none) }).prefault({}),
|
|
529
|
+
/** How the coordinator shows a draft for review (`orchestrate` § 4). */
|
|
530
|
+
preview: z2.strictObject({
|
|
531
|
+
/** Publish the draft as a private Artifact when the session has the tool; `false` sends a file card or `jh preview --open` instead. */
|
|
532
|
+
publish: z2.boolean().default(true)
|
|
533
|
+
}).prefault({}),
|
|
520
534
|
plans: z2.strictObject({
|
|
521
535
|
/** Minutes between background fetches of the base branch while `jh herd` runs; 0 turns them off. */
|
|
522
536
|
fetchIntervalMinutes: z2.number().min(0).default(5),
|
|
@@ -533,6 +547,7 @@ var jackherdConfigSchema = z2.strictObject({
|
|
|
533
547
|
/**
|
|
534
548
|
* Read by `jh watch`; without `deploy` it reports no deploy runs. `feedback` is on unless set to `false`:
|
|
535
549
|
* it reports new feedback on the lanes' pull requests except from the account the watcher runs as and `ignore`.
|
|
550
|
+
* `parallelTasks.maxTokens` caps the cost of the extra agents in a proposal of parallel tasks at the heartbeat.
|
|
536
551
|
* `checks` reads the failed tests of a red lane pull request (`failedTestPattern`), also with `feedback` off.
|
|
537
552
|
* Without `previews` it reads no deploy preview; with it, one `preview` per new head commit. Each of `sources` is a
|
|
538
553
|
* command whose JSON output reports `source` for a new or changed entry.
|
|
@@ -541,6 +556,7 @@ var jackherdConfigSchema = z2.strictObject({
|
|
|
541
556
|
deploy: deploySchema.optional(),
|
|
542
557
|
feedback: z2.union([z2.literal(false), feedbackSchema]).prefault({}),
|
|
543
558
|
checks: checksSchema.prefault({}),
|
|
559
|
+
parallelTasks: parallelTasksSchema.prefault({}),
|
|
544
560
|
previews: previewsSchema.optional(),
|
|
545
561
|
sources: z2.array(sourceSchema).refine(hasUniqueNames, "source names must be unique").default([])
|
|
546
562
|
}).prefault({}),
|
package/dist/plan-format.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ declare const APPROVAL_TEXTS: Record<PlanLanguage, {
|
|
|
44
44
|
}>;
|
|
45
45
|
/**
|
|
46
46
|
* The board section of agreed times, which the watcher reads: its heading, the header names of its columns (when,
|
|
47
|
-
* action, origin, status
|
|
47
|
+
* action, origin, status, found by name in any order; the status column may also carry a name of `statusAlso`) and the lower-case words a status cell of a still open
|
|
48
48
|
* appointment starts with.
|
|
49
49
|
*/
|
|
50
50
|
declare const APPOINTMENT_VOCABULARY: Record<PlanLanguage, {
|
|
@@ -55,6 +55,24 @@ declare const APPOINTMENT_VOCABULARY: Record<PlanLanguage, {
|
|
|
55
55
|
origin: string;
|
|
56
56
|
status: string;
|
|
57
57
|
};
|
|
58
|
+
/** Further header names that count as the status column. */
|
|
59
|
+
statusAlso: readonly string[];
|
|
60
|
+
open: readonly string[];
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* The board section of what waits on the user's answer (a sent preview, an open question, a report to accept): its
|
|
64
|
+
* heading, the header names of its columns (since, item, origin, status, found by name in any order; the status
|
|
65
|
+
* column may also carry a name of `statusAlso`) and the lower-case words a status cell of a still open item starts with.
|
|
66
|
+
*/
|
|
67
|
+
declare const WAITING_VOCABULARY: Record<PlanLanguage, {
|
|
68
|
+
heading: string;
|
|
69
|
+
columns: {
|
|
70
|
+
since: string;
|
|
71
|
+
item: string;
|
|
72
|
+
origin: string;
|
|
73
|
+
status: string;
|
|
74
|
+
};
|
|
75
|
+
statusAlso: readonly string[];
|
|
58
76
|
open: readonly string[];
|
|
59
77
|
}>;
|
|
60
78
|
declare const isPlanLanguage: (value: string) => value is PlanLanguage;
|
|
@@ -346,7 +364,8 @@ declare const withoutRepeats: (lane: SprintLane, step: PlanStep) => PlanStep;
|
|
|
346
364
|
/**
|
|
347
365
|
* The lanes of the sprint document's lanes table (`## Spuren` in `de`) in table order. A row whose
|
|
348
366
|
* first cell names a lane in backticks belongs to that lane; a `↳` row without a name continues
|
|
349
|
-
* the lane above it.
|
|
367
|
+
* the lane above it. A cleaned-up lane stays closed through its `↳` rows, but a later row that names it again
|
|
368
|
+
* without the mark starts the lane anew: the closed rows are history and drop out.
|
|
350
369
|
*/
|
|
351
370
|
declare const parseSprintLanes: (markdown: string, language: PlanLanguage) => SprintLane[];
|
|
352
371
|
declare const sprintTitleOf: (markdown: string, fallback: string) => string;
|
|
@@ -510,4 +529,4 @@ declare const readSprintDocument: (markdown: string, language: PlanLanguage) =>
|
|
|
510
529
|
*/
|
|
511
530
|
declare const readPhaseDependencies: (planMarkdown: string, language: PlanLanguage) => Record<string, string>;
|
|
512
531
|
|
|
513
|
-
export { ADDRESS_FORM, APPOINTMENT_VOCABULARY, APPROVAL_TEXTS, type ChecklistItem, type ColumnModel, type DeferredItem, type DriftFinding, LANGUAGE_NAME, type LaneProgress, type MergedPhaseWithOpenBoxes, type MisplacedDeferral, PHASE_CELL_LIMIT, PHASE_ID_PREFIX, PLAN_APPROVAL_LABELS, PLAN_LANGUAGE, PLAN_STATUS, PLAN_VOCABULARY, PROSE_REASON, type PhaseDependency, type PhaseHeading, type PhaseProgress, type PhaseSchedule, type PhaseTally, type PhaseWithoutGate, type PhaseWithoutRow, type PlanHeader, type PlanLanguage, type PlanPhase, type PlanStatus, type PlanStep, type PlanVocabulary, type PlansByHref, type ProseReason, RESPONSE_ADDRESS, type ResponseAddress, type RowWithProse, type RowWithoutPhase, SELF_MERGE_LABEL, type SprintDocument, type SprintLane, type SprintPlanRow, type SprintPlanTable, type StatusWord, type StepProgress, activeItem, boardRowsWithProse, boardRowsWithoutPhase, classifyStatus, columnModels, countDecisions, criticalPath, currentPhase, currentPhaseOf, deferralTarget, differsFromColumn, endsPhase, findDrift, hasLanesTable, isCheckboxLine, isDocumentationGateItem, isOpenCheckboxLine, isPhaseFinished, isPhaseOpen, isPlanLanguage, isReviewGateLine, isTickedUnmerged, laneNameOf, laneProgress, mergedPhasesWithOpenBoxes, misplacedDeferrals, newPhasesWithoutReviewGate, onlyDocumentationOpen, parallelGroups, parallelGroupsOfPlan, parseDependencyTable, parsePlanPhases, parseSprintLanes, phaseHeading, phaseHeadingPattern, phaseHeadings, phaseIdsOfCell, phaseIdsOfPlan, phaseLabel, phaseLabels, phaseProgress, phaseWaves, phasesText, phasesWithoutDependencyRow, readPhaseDependencies, readPlanHeader, readSprintDocument, resolvePlanPath, sectionHeading, shortTitle, sprintTitleOf, sumPhases, tallyPhases, wavesOfPlan, withoutRepeats };
|
|
532
|
+
export { ADDRESS_FORM, APPOINTMENT_VOCABULARY, APPROVAL_TEXTS, type ChecklistItem, type ColumnModel, type DeferredItem, type DriftFinding, LANGUAGE_NAME, type LaneProgress, type MergedPhaseWithOpenBoxes, type MisplacedDeferral, PHASE_CELL_LIMIT, PHASE_ID_PREFIX, PLAN_APPROVAL_LABELS, PLAN_LANGUAGE, PLAN_STATUS, PLAN_VOCABULARY, PROSE_REASON, type PhaseDependency, type PhaseHeading, type PhaseProgress, type PhaseSchedule, type PhaseTally, type PhaseWithoutGate, type PhaseWithoutRow, type PlanHeader, type PlanLanguage, type PlanPhase, type PlanStatus, type PlanStep, type PlanVocabulary, type PlansByHref, type ProseReason, RESPONSE_ADDRESS, type ResponseAddress, type RowWithProse, type RowWithoutPhase, SELF_MERGE_LABEL, type SprintDocument, type SprintLane, type SprintPlanRow, type SprintPlanTable, type StatusWord, type StepProgress, WAITING_VOCABULARY, activeItem, boardRowsWithProse, boardRowsWithoutPhase, classifyStatus, columnModels, countDecisions, criticalPath, currentPhase, currentPhaseOf, deferralTarget, differsFromColumn, endsPhase, findDrift, hasLanesTable, isCheckboxLine, isDocumentationGateItem, isOpenCheckboxLine, isPhaseFinished, isPhaseOpen, isPlanLanguage, isReviewGateLine, isTickedUnmerged, laneNameOf, laneProgress, mergedPhasesWithOpenBoxes, misplacedDeferrals, newPhasesWithoutReviewGate, onlyDocumentationOpen, parallelGroups, parallelGroupsOfPlan, parseDependencyTable, parsePlanPhases, parseSprintLanes, phaseHeading, phaseHeadingPattern, phaseHeadings, phaseIdsOfCell, phaseIdsOfPlan, phaseLabel, phaseLabels, phaseProgress, phaseWaves, phasesText, phasesWithoutDependencyRow, readPhaseDependencies, readPlanHeader, readSprintDocument, resolvePlanPath, sectionHeading, shortTitle, sprintTitleOf, sumPhases, tallyPhases, wavesOfPlan, withoutRepeats };
|
package/dist/plan-format.js
CHANGED
|
@@ -9,11 +9,12 @@ import {
|
|
|
9
9
|
PLAN_VOCABULARY,
|
|
10
10
|
RESPONSE_ADDRESS,
|
|
11
11
|
SELF_MERGE_LABEL,
|
|
12
|
+
WAITING_VOCABULARY,
|
|
12
13
|
classifyStatus,
|
|
13
14
|
isPlanLanguage,
|
|
14
15
|
phaseHeading,
|
|
15
16
|
sectionHeading
|
|
16
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MCP4XJQH.js";
|
|
17
18
|
|
|
18
19
|
// src/plan-format/lanes.ts
|
|
19
20
|
import { posix } from "path";
|
|
@@ -100,6 +101,8 @@ var CONTINUATION = "\u21B3";
|
|
|
100
101
|
var PLAN_LINK = /\[([^\]]+)\]\(([^)]+)\)/;
|
|
101
102
|
var PHASE_ID_PREFIX = "P";
|
|
102
103
|
var phaseLabel = (id) => `${PHASE_ID_PREFIX}${id}`;
|
|
104
|
+
var MAX_RANGE = 50;
|
|
105
|
+
var spannedPhaseIds = (first, last) => first > last || last - first >= MAX_RANGE ? [] : Array.from({ length: last - first + 1 }, (_, offset) => String(first + offset));
|
|
103
106
|
var phaseLabels = (ids, separator) => ids.map(phaseLabel).join(separator);
|
|
104
107
|
var PHASES_COLUMN = 3;
|
|
105
108
|
var CLAUSE_SEPARATOR = /([;,]|\.(?=\s))\s*/;
|
|
@@ -109,10 +112,18 @@ var phaseIdPatterns = (language) => {
|
|
|
109
112
|
const id = `(?:\\*\\*)?${PHASE_ID_PREFIX}(\\d+[a-z]?)\\b`;
|
|
110
113
|
return {
|
|
111
114
|
leading: new RegExp(`^\\s*(?:(?:${connectors})\\s+)*${id}`),
|
|
115
|
+
rangeEnd: new RegExp(`^\\s*[\u2013-]\\s*(?:\\*\\*)?${PHASE_ID_PREFIX}(\\d+)\\b`),
|
|
112
116
|
afterConnector: new RegExp(`^\\s*(?:${connectors})\\s`),
|
|
113
117
|
connector: new RegExp(`\\b(?:${connectors})\\s+${id}`, "g")
|
|
114
118
|
};
|
|
115
119
|
};
|
|
120
|
+
var leadingIds = (clause, leading, patterns) => {
|
|
121
|
+
const first = leading[1];
|
|
122
|
+
const end = clause.slice(leading[0].length).match(patterns.rangeEnd);
|
|
123
|
+
if (!end || !/^\d+$/.test(first)) return [first];
|
|
124
|
+
const spanned = spannedPhaseIds(Number(first), Number(end[1]));
|
|
125
|
+
return spanned.length > 0 ? spanned : [first];
|
|
126
|
+
};
|
|
116
127
|
var phaseIdsOf = (cell, patterns) => {
|
|
117
128
|
const parts = cell.split(CLAUSE_SEPARATOR);
|
|
118
129
|
const ids = [];
|
|
@@ -125,7 +136,7 @@ var phaseIdsOf = (cell, patterns) => {
|
|
|
125
136
|
const leading = clause.match(patterns.leading);
|
|
126
137
|
const startsEntry = entryStart || listRunning || patterns.afterConnector.test(clause);
|
|
127
138
|
const counts = leading !== null && startsEntry;
|
|
128
|
-
if (leading && counts) ids.push(leading
|
|
139
|
+
if (leading && counts) ids.push(...leadingIds(clause, leading, patterns));
|
|
129
140
|
ids.push(...[...clause.matchAll(patterns.connector)].map((match) => match[1]));
|
|
130
141
|
listRunning ||= counts;
|
|
131
142
|
}
|
|
@@ -162,7 +173,12 @@ var parseSprintLanes = (markdown, language) => {
|
|
|
162
173
|
if (!name) continue;
|
|
163
174
|
const port = Number.parseInt(cells[1] ?? "", 10);
|
|
164
175
|
const lane = lanes.get(name) ?? { name, port: Number.isNaN(port) ? null : port, steps: [], closed: false };
|
|
165
|
-
|
|
176
|
+
const marked = (cells[0] ?? "").includes(laneClosed);
|
|
177
|
+
if (lane.closed && !marked && !(cells[0] ?? "").startsWith(CONTINUATION)) {
|
|
178
|
+
lane.closed = false;
|
|
179
|
+
lane.steps = [];
|
|
180
|
+
}
|
|
181
|
+
lane.closed ||= marked;
|
|
166
182
|
lane.steps.push(withoutRepeats(lane, toStep(cells, phaseId)));
|
|
167
183
|
lanes.set(name, lane);
|
|
168
184
|
previous = name;
|
|
@@ -451,7 +467,6 @@ var GLOB_CHARACTER = /[*?{[]/;
|
|
|
451
467
|
var VERSION = /^v?\d+(?:[.\-+][\w.-]*)?$/i;
|
|
452
468
|
var PACKAGE_SCOPE = /^@[^/]+\//;
|
|
453
469
|
var RELEASE_FILE = /(?:^|\/)(?:CHANGELOG\.md|package\.json)$/;
|
|
454
|
-
var MAX_RANGE = 50;
|
|
455
470
|
var phaseIdOf = (cell) => PHASE_ID.exec(cell)?.[1]?.toLowerCase() ?? null;
|
|
456
471
|
var splitOutsideParentheses = (cell, separator) => {
|
|
457
472
|
const entries = [];
|
|
@@ -470,9 +485,7 @@ var splitOutsideParentheses = (cell, separator) => {
|
|
|
470
485
|
var rangeOf = (entry) => {
|
|
471
486
|
const match = PHASE_RANGE.exec(entry);
|
|
472
487
|
if (!match) return null;
|
|
473
|
-
|
|
474
|
-
if (first > last || last - first >= MAX_RANGE) return [];
|
|
475
|
-
return Array.from({ length: last - first + 1 }, (_, offset) => String(first + offset));
|
|
488
|
+
return spannedPhaseIds(Number(match[1]), Number(match[2]));
|
|
476
489
|
};
|
|
477
490
|
var dependsOf = (cell, language) => {
|
|
478
491
|
const noDependency = PLAN_VOCABULARY[language].noDependency;
|
|
@@ -863,6 +876,7 @@ export {
|
|
|
863
876
|
PROSE_REASON,
|
|
864
877
|
RESPONSE_ADDRESS,
|
|
865
878
|
SELF_MERGE_LABEL,
|
|
879
|
+
WAITING_VOCABULARY,
|
|
866
880
|
activeItem,
|
|
867
881
|
boardRowsWithProse,
|
|
868
882
|
boardRowsWithoutPhase,
|
package/install.sh
CHANGED
|
@@ -9,7 +9,7 @@ set -eu
|
|
|
9
9
|
|
|
10
10
|
# The default is the version this file ships with. The release bump changes it together with
|
|
11
11
|
# package.json; install.test.ts fails while the two differ. Overridable, but only by a plain release.
|
|
12
|
-
JACKHERD_VERSION="${JACKHERD_VERSION:-1.
|
|
12
|
+
JACKHERD_VERSION="${JACKHERD_VERSION:-1.9.0}"
|
|
13
13
|
|
|
14
14
|
JACKHERD_PACKAGE='jackherd'
|
|
15
15
|
# Test seam: the terminal the wizard asks its questions on.
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
// PermissionRequest hook of Claude Code, shipped by jackherd: the client adapter of the approval gate. In a lane, known
|
|
2
2
|
// by the herdr agent of the pane and not by the directory of the call, it holds a call that would open a permission
|
|
3
|
-
// dialog, records it for the coordinator and answers with the user's decision from the coordinator's dialog;
|
|
4
|
-
// and on any failure, it answers nothing and the dialog stays. argv[2..5]: the allow label, the deny label, the text for
|
|
3
|
+
// dialog, records it for the coordinator and answers with the user's decision from the coordinator's dialog; the same for
|
|
4
|
+
// a subagent of the coordinator, under its own name; elsewhere, and on any failure, it answers nothing and the dialog stays. argv[2..5]: the allow label, the deny label, the text for
|
|
5
5
|
// a call still pending after the wait, the text for a denied call, rendered into the hook entry by `sync`.
|
|
6
|
+
import { existsSync } from 'node:fs'
|
|
6
7
|
import { homedir } from 'node:os'
|
|
8
|
+
import { join } from 'node:path'
|
|
7
9
|
import { mainCheckoutOf } from '../shared/checkout'
|
|
8
10
|
import { commandOutput } from '../shared/command'
|
|
9
11
|
import { readConfig } from '../shared/config'
|
|
10
12
|
import { isRecord } from '../shared/json'
|
|
11
13
|
import { ownPaneAgent } from '../shared/own-pane'
|
|
14
|
+
import { gateSettingsOf } from './settings'
|
|
12
15
|
import { coordinatorSessions } from './herdr-panes'
|
|
13
16
|
import { type ClientCall, type GateDependencies, type GateOutcome, runGate } from './run'
|
|
14
17
|
import { approvalsDirectory, claimRequest, pruneRequests, readRequests, writeRequest } from './store'
|
|
@@ -23,17 +26,32 @@ const herdrPanes = (): unknown => {
|
|
|
23
26
|
return answer.result
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
/**
|
|
29
|
+
/** The subagent a call comes from: Claude Code adds `agent_id` and `agent_type` only to the hooks of a subagent. */
|
|
30
|
+
const subagentOf = (input: Record<string, unknown>): ClientCall['subagent'] =>
|
|
31
|
+
typeof input.agent_id === 'string'
|
|
32
|
+
? { id: input.agent_id, type: typeof input.agent_type === 'string' ? input.agent_type : null }
|
|
33
|
+
: undefined
|
|
34
|
+
|
|
35
|
+
/** Claude Code's hook input: `cwd`, `session_id`, `tool_name`, `tool_input`, and `agent_id` inside a subagent. */
|
|
27
36
|
const clientCallOf = (text: string): ClientCall | null => {
|
|
28
37
|
const input: unknown = JSON.parse(text)
|
|
29
38
|
if (!isRecord(input) || typeof input.cwd !== 'string' || typeof input.tool_name !== 'string') return null
|
|
30
39
|
if (typeof input.session_id !== 'string') return null
|
|
31
|
-
|
|
40
|
+
const subagent = subagentOf(input)
|
|
41
|
+
return {
|
|
42
|
+
cwd: input.cwd,
|
|
43
|
+
session: input.session_id,
|
|
44
|
+
tool: input.tool_name,
|
|
45
|
+
input: input.tool_input ?? null,
|
|
46
|
+
...(subagent ? { subagent } : {}),
|
|
47
|
+
}
|
|
32
48
|
}
|
|
33
49
|
|
|
34
50
|
const dependencies: GateDependencies = {
|
|
35
51
|
paneAgent: () => ownPaneAgent(),
|
|
36
52
|
mainCheckoutOf,
|
|
53
|
+
isLaneName: (main, name) =>
|
|
54
|
+
existsSync(join(main, gateSettingsOf(readConfig([main, homedir()])).worktreeDirectory, name)),
|
|
37
55
|
config: (main) => readConfig([main, homedir()]),
|
|
38
56
|
readRequests: (main) => readRequests(approvalsDirectory(main)),
|
|
39
57
|
writeRequest: (main, request) => writeRequest(approvalsDirectory(main), request),
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { DialogAnswer } from '../shared/dialog-answer'
|
|
2
2
|
import { ASK_USER_QUESTION_TOOL } from '../shared/dialog-answers'
|
|
3
3
|
import { isFresh } from '../shared/fresh'
|
|
4
|
-
import { laneOfAgent } from '../shared/lane'
|
|
4
|
+
import { isCoordinatorAgent, laneOfAgent } from '../shared/lane'
|
|
5
5
|
import type { PaneAgent } from '../shared/pane-agent'
|
|
6
6
|
import { gateDecision, type GateLabels } from './decision'
|
|
7
7
|
import { type ApprovalRequest, callHash, type GateCall, isStorableInput, newRequest, requestId } from './request'
|
|
8
8
|
import { gateSettingsOf } from './settings'
|
|
9
|
+
import { type SubagentCall, subagentLabel } from './subagent'
|
|
9
10
|
|
|
10
|
-
/** A call as the client's hook hands it over, before it is known to be a lane's. */
|
|
11
|
-
export type ClientCall = { cwd: string; session: string; tool: string; input: unknown }
|
|
11
|
+
/** A call as the client's hook hands it over, before it is known to be a lane's; `subagent` when a subagent makes it. */
|
|
12
|
+
export type ClientCall = { cwd: string; session: string; tool: string; input: unknown; subagent?: SubagentCall }
|
|
12
13
|
|
|
13
14
|
/** What the gate decided; null decides nothing, so the client's own dialog stays. */
|
|
14
15
|
export type GateOutcome = { kind: 'allow' } | { kind: 'denied' } | { kind: 'pending' } | null
|
|
@@ -18,6 +19,8 @@ export type GateDependencies = {
|
|
|
18
19
|
/** The agent of the multiplexer pane this session runs in; null outside the multiplexer. */
|
|
19
20
|
paneAgent: () => PaneAgent | null
|
|
20
21
|
mainCheckoutOf: (cwd: string) => string
|
|
22
|
+
/** Whether a worktree of this name exists below the main checkout's worktree directory. */
|
|
23
|
+
isLaneName: (main: string, name: string) => boolean
|
|
21
24
|
config: (main: string) => Record<string, unknown>
|
|
22
25
|
readRequests: (main: string) => ApprovalRequest[]
|
|
23
26
|
writeRequest: (main: string, request: ApprovalRequest) => void
|
|
@@ -75,11 +78,31 @@ const awaitDecision = async (
|
|
|
75
78
|
/** A question to the user asks for an answer, not for a permission: the lane asks the coordinator in its text instead. */
|
|
76
79
|
const isHeld = ({ tool, input }: ClientCall): boolean => tool !== ASK_USER_QUESTION_TOOL && isStorableInput(input)
|
|
77
80
|
|
|
81
|
+
/**
|
|
82
|
+
* What holds the call: the lane of the pane's agent, else, for a subagent of the coordinator, its own name. The
|
|
83
|
+
* coordinator's session is the one the hook was called for, and the agent of the pane started in the main checkout
|
|
84
|
+
* under no lane's name; the subagent's permission dialog would open in that pane.
|
|
85
|
+
*/
|
|
86
|
+
const holderOf = (
|
|
87
|
+
clientCall: ClientCall,
|
|
88
|
+
agent: PaneAgent,
|
|
89
|
+
main: string,
|
|
90
|
+
worktreeDirectory: string,
|
|
91
|
+
dependencies: GateDependencies,
|
|
92
|
+
): string | null => {
|
|
93
|
+
const lane = laneOfAgent({ agent, session: clientCall.session, main, worktreeDirectory })
|
|
94
|
+
if (lane || !clientCall.subagent) return lane
|
|
95
|
+
const isLane = (name: string) => dependencies.isLaneName(main, name)
|
|
96
|
+
const coordinator = isCoordinatorAgent({ agent, session: clientCall.session, main, isLane })
|
|
97
|
+
return coordinator ? subagentLabel(clientCall.subagent) : null
|
|
98
|
+
}
|
|
99
|
+
|
|
78
100
|
/**
|
|
79
101
|
* The gate for a call that would open a permission dialog in a lane: it records the call as a request the watcher
|
|
80
102
|
* reports, waits for the user's answer to the coordinator's dialog, and allows or denies. The lane is the agent of the
|
|
81
|
-
* pane, never the directory of the call
|
|
82
|
-
* (the multiplexer or git cannot be asked), it
|
|
103
|
+
* pane, never the directory of the call; a subagent of the coordinator is held like one, under its own name. Outside a
|
|
104
|
+
* lane, for a question or a call too large to store, and on any failure (the multiplexer or git cannot be asked), it
|
|
105
|
+
* decides nothing, so the dialog stays.
|
|
83
106
|
*/
|
|
84
107
|
export const runGate = async (
|
|
85
108
|
clientCall: ClientCall,
|
|
@@ -92,7 +115,7 @@ export const runGate = async (
|
|
|
92
115
|
if (agent === null || agent.cwd === null) return null
|
|
93
116
|
const main = dependencies.mainCheckoutOf(agent.cwd)
|
|
94
117
|
const { worktreeDirectory, waitMinutes } = gateSettingsOf(dependencies.config(main))
|
|
95
|
-
const lane =
|
|
118
|
+
const lane = holderOf(clientCall, agent, main, worktreeDirectory, dependencies)
|
|
96
119
|
if (!lane) return null
|
|
97
120
|
const { cwd, tool, input } = clientCall
|
|
98
121
|
const request = openRequest(main, { lane, cwd, tool, input }, dependencies)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** The subagent a hook call comes from: Claude Code's `agent_id` and `agent_type`. */
|
|
2
|
+
export type SubagentCall = { id: string; type: string | null }
|
|
3
|
+
|
|
4
|
+
/** `agent_id` as Claude Code writes it into the subagent's log (`agent-<id>.jsonl`): lower-case hexadecimal. */
|
|
5
|
+
const AGENT_ID = /^[0-9a-f]{8,64}$/
|
|
6
|
+
const AGENT_TYPE = /^[a-z0-9][a-z0-9-]{0,31}$/
|
|
7
|
+
const ID_LENGTH = 8
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The name a subagent of the coordinator is held under, in the place of a lane's name: `subagent-<type>-<id start>`.
|
|
11
|
+
* The type is a plain word or `agent`, so nothing the subagent could choose freely reaches the coordinator's question;
|
|
12
|
+
* null for an id of another shape. The herd derives the same name from the subagent's log (contract test).
|
|
13
|
+
*/
|
|
14
|
+
export const subagentLabel = ({ id, type }: SubagentCall): string | null => {
|
|
15
|
+
if (!AGENT_ID.test(id)) return null
|
|
16
|
+
const word = type !== null && AGENT_TYPE.test(type) ? type : 'agent'
|
|
17
|
+
return `subagent-${word}-${id.slice(0, ID_LENGTH)}`
|
|
18
|
+
}
|